MySQL 데이터를 SQL 파일로 내보내고 다시 읽어 들이는 논리 백업 절차입니다. 원노트의 DB 백업·테이블 백업·백업 스크립트 메모를 합쳤습니다. 예제 DB는 appdb이며 백업 계정과 복구 계정의 권한은 목적에 맞게 준비합니다.
백업 범위 선택
DB 이름 뒤에 테이블을 쓰지 않으면 해당 DB 전체를 대상으로 합니다. 테이블을 나열하면 그 테이블만 내보냅니다. -p 뒤에 암호를 붙이지 않으면 대화형으로 입력할 수 있습니다.
umask 077
mkdir -p /home/lieper/backup
mysqldump -u lieper -p --single-transaction --no-tablespaces appdb > /home/lieper/backup/appdb.sql
mysqldump -u lieper -p --single-transaction --no-tablespaces appdb account > /home/lieper/backup/account.sql--single-transaction은 InnoDB 같은 트랜잭션 테이블의 일관성 확보에 사용합니다. 비트랜잭션 테이블이나 백업 중 DDL이 있는 환경에는 별도 일관성 대책이 필요합니다. 루틴·이벤트 등도 복구해야 한다면 해당 옵션과 권한을 추가 확인합니다.
실패한 백업을 구분
리디렉션은 명령이 실패해도 파일을 만들 수 있습니다. 종료 코드와 파일 크기를 확인하고 오류 파일도 함께 보관합니다. 자동화에서는 임시 파일에 작성한 뒤 성공한 경우에만 최종 이름으로 바꿉니다. 암호는 스크립트에 직접 쓰기보다 권한이 제한된 클라이언트 설정이나 비밀 관리 방식을 사용합니다.
ls -lh /home/lieper/backup/appdb.sql
sha256sum /home/lieper/backup/appdb.sql별도 DB에서 복구 확인
복구 SQL에 DB 선택문이나 기존 테이블 삭제문이 있는지 먼저 확인합니다. 다음은 대상 DB를 명령에 지정하는 형식입니다. 테이블 이름을 mysql 옵션처럼 붙이는 문법은 사용하지 않습니다.
mysql -u lieper -p restore_check < /home/lieper/backup/appdb.sqlrestore_check는 사전에 생성한 시험 DB입니다. CREATE DATABASE·USE가 포함된 덤프는 내부 구문에 따라 원래 DB를 대상으로 할 수 있으므로 먼저 내용을 확인합니다. 복구 후 테이블 수·대표 행 수·인덱스·애플리케이션 조회를 확인하고 백업 파일을 서버와 분리된 보관소에도 복제합니다.
참고: https://dev.mysql.com/doc/refman/8.4/en/mysqldump.html