21. [SQL기초] 데이터베이스 백업과 복원

백업

학습에 사용한 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'트랜잭션 로그 백업 파일'"