본문 바로가기

서버·DB·C#

21일. 데이터베이스 백업과 복원

반응형

백업

학습에 사용한 MySQL 커맨드 라인 방식으로 간편하게 데이터베이스를 백업할 있습니다.

MySQL에는 “mysqldump”라는 커맨드 라인 실행 프로그램을 이용해 데이터베이스를 백업합니다. 사용법도 간단하고, 윈도우10 스케줄러나 리눅스 크론탭에 스케줄을 등록해서 일정 시간 간격으로 반복 백업이 되도록 수도 있습니다.

MySQL 데이터베이스 백업 커멘드라인 기본 명령줄은 다음과 같습니다.

 

mysqldump -u [user] -p [database_name] > [backup_filename].sql

mysqldump -u [user] -p [database_1] [database_2] > [backup_filename].sql

 

예를 들어 다음과 같이 shop 데이터베이스를 파일로 백업할 수 있습니다.

 

mysqldump -u root -p shop > C:\Backup\shop_20220720_01.sql

 

명령줄을 실행하면 “root” 계정의 패스워드를 입력하는 프롬프트가 표시됩니다. 패스워드를 입력하면 “shop” 데이터베이스 스키마와 데이터가 “C:\Backup\shop_20210308_01.sql” 경로의 파일에 텍스트 파일로 저장됩니다. 저장된 파일은 텍스트 편집기에서 열어서 내용을 확인할 있습니다.

 데이터 없이 스키마 생성 쿼리문만 따로 저장하고 싶으면 데이터베이스 이름 앞에 “--no-data” 옵션을 추가하면 됩니다.

 

mysqldump -u root -p -–no-data shop > shop_schema_20210308_01.sql

 

“mysqldump” 커멘드 라인 명령어의 옵션 항목은 100개가 넘기 때문에 모든 명령 옵션을 수는 없습니다.

자주 사용하는 주요 옵션 몇 가지만 알아보면 다음과 같습니다.

 

옵션 기능
--no-data 데이터 백업 없이 스키마만 백업함
--skip-comments 코멘트를 표시하지 않음
--version 데이터베이스 버전을 출력하고 종료
--lock-tables 백업하는 동안 테이블을 잠금
--help 명령어와 옵션 항목들에 대한 도움말 출력
--force 백업 에러가 발생해도 백업 과정 계속 진행
--flush-logs 백업 전에 누적된 서버 로그를 삭제
--user 백업을 위해 서버에 연결하는 MySQL 계정 아이디 “-u” 줄여서 사용 가능
--password 백업을 위해 서버에 연결하는 MySQL 계정 패스워드. “-p” 줄여서 사용 가능

 

커맨드 라인 옵션 표시는 (-) 2개를 연달아 붙여 표시하는 것으로 시작합니다. 주의해야 합니다. 아이디와 패스워드를 표시하는 단축 표현 파라미터인 “-u”, “-p” (-) 1개로 표시합니다.

다양한 mysqldump 커멘드 라인 옵션을 확인하려면 “mysqldump –help” 옵션을 사용하면 됩니다.

 

 


 

복원

백업한 데이터베이스 파일은 커맨드 라인 명령어로 복원할 수 있습니다.

복원할 때는 백업 프로그램과는 다른 프로그램을 사용합니다. MySQL 실행 커맨드라인 프로그램(mysql), 또는  데이터 복원 전용 프로그램인 mysqlimport를 사용합니다.

 

mysql -u [user] -p [database_name] < [filename].sql

mysqlimport -u [user] -p [database_name] [filename].sql

 

mysqlimport를 사용할 때는 mysql 실행 파일과 다르게 "<" 화살표를 사용하지 않는 점에 주의해야 합니다.

 

SQL Server는 sqlcmd라는 커맨드 라인 인터페이스가 있습니다. MySQL처럼 백업/복원 전용은 아니고, 커맨드 라인으로 쿼리문을 실행할 수 있도록 해주는 커맨드라인 프로그램입니다.
sqlcmd를 이용해 다음과 같이 데이터베이스와 트랜잭션 로그 파일을 백업/복원할 수 있습니다.

sqlcmd -S -Q "BACKUP DATABASE [데이터베이스 이름] TO DISK='데이터베이스 백업 파일 이름'"
sqlcmd -S -Q "BACKUP LOG [데이터베이스 이름] TO DISK='트랜잭션 로그 백업 파일 이름'"
sqlcmd -S localhost -U sa -Q "RESTORE DATABASE [데이터베이스 이름] FROM DISK = N'데이터베이스 백업 파일'
sqlcmd -S localhost -U sa -Q "RESTORE LOG [데이터베이스 이름] FROM DISK = N'트랜잭션 로그 백업 파일'"

 

 

반응형

Comments





❌ 닫기