WorkaHolic

데이터베이스 백업 및 복원(mysqldump) 본문

Server/MySQL

데이터베이스 백업 및 복원(mysqldump)

Programics 2021. 6. 7. 14:53

1. 백업 (mysqldump 옵션 > 저장위치의 백업파일명.sql)

* 특정 데이터베이스 백업

mysqldump -u유저명 -p 디비명 > 디비백업명.sql

e.g. mysqldump -uroot -p some_database > database_bak.sql

* 복수 가능

mysqldump -uroot -p 디비명 --databases 디비명2 디비명3  > 디비백업명.sql

e.g. mysqldump -uroot -p some_database --databases database2 database3 > database23_bak.sql

* 비밀번호 미리 입력(이하동일)

mysqldump -u유저명 -p유저패스워드 디비명 > 디비백업명.sql

e.g. mysqldump -uroot -p1234abc some_database > database_bak.sql

 

!비밀번호를 입력한 채로 실행하면, 아래와 같은 보안을 걱정하는 문구 출력

# mysqldump -uroot -p1234abc some_database > database_bak.sql

# mysqldump: [Warning] Using a password on the command line interface can be insecure.

 

!Lock걸린 특정 Table이 있을 경우, 아래와 같은 오류 문구 출력

# mysqldump: Got error: 1146: Table 'db_name.table_name' doesn't exist when using LOCK TABLES

 

* 전체 데이터베이스 백업

mysqldump -u유저명 -p --all-databases > 전체디비백업명.sql

mysqldump -u유저명 -p -A > 전체디비백업명.sql (동일)

e.g. mysqldump -uroot -p --all-databases > all_database.sql

 

* 특정 테이블만 백업

mysqldump -uroot -p 디비명 디비테이블명 > 디비백업명.sql

e.g. mysqldump -uroot -p some_database database_table > database_table_bak.sql

* 복수 가능

mysqldump -uroot -p 디비명 --tables 디비테이블명2 디비테이블명3  > 디비백업명.sql

e.g. mysqldump -uroot -p some_database --tables database_table2 database_table3 > database_table23_bak.sql

 

* 특정 데이터베이스 스키마(테이블 구조)만 백업(데이터는 없음)

mysqldump -uroot -p --no-data 디비명 > 디비백업명.sql

e.g. mysqldump -uroot -p --no-data some_database > database_schema.sql

 


2. 복원 (mysql 옵션 < 저장위치의 백업파일명.sql)

* 복원시 주의사항 (데이터베이스 & 테이블 동일, 복원 전 필독)

1. 복원하는 데이터베이스와 동명의 테이블이 없으면, 새로이 테이블을 생성 및 백업데이터가 삽입됨

e.g. backup_database_table(table1, table2) | database_table(table3)

 ㄴ backup_database_table의 table1, table2 테이블 생성 및 데이터 삽입

2. 복원하는 데이터베이스와 동명의 테이블이 있으면, 먼저 해당 테이블을 삭제하고, 새로이 테이블을 생성 및 백업데이터가 삽입됨

e.g. backup_database_table(table1, table2) | database_table(table1)

 ㄴ database_table의 table1 테이블 삭제, backup_database_table의 table1, table2 테이블 생성 및 데이터 삽입

3. 특정 데이터베이스 백업이라도, 백업디비파일이 전체백업된 파일이면, 전체 데이터베이스로 적용됨(제일 중요하고 위험함!)

e.g. mysql -uroot -p some_database < all_database.sql

e.g. all_database[some_database(table1) database2(table2)] | some_database(table1), database2(table2)

 ㄴ 특정 데이터베이스(some_database)뿐 만 아니라, 모든 데이터베이스의 동명의 테이블들은 전부 백업데이터로 재생성됨


* 특정 데이터베이스 복원

mysql -u유저명 -p 디비명 < 디비백업명.sql

e.g. mysql -uroot -p some_database < database_bak.sql

 

* 전체 데이터베이스(--all-databases)나 특정 데이터베이스 복수(--databases)는 전체 복원

mysql -u유저명 -p < 디비백업명.sql

e.g. mysql -uroot -p < all_database.sql

 

 

 

반응형