On this page
데이터베이스 관리자는 시스템 오류나 데이터 손실에 대비해 주기적인 백업을 수행하는 것이 매우 중요합니다. MySQL에서는 mysqldump
명령어를 통해 데이터베이스를 백업하고 복원할 수 있습니다. 이 블로그 포스팅에서는 MySQL 데이터베이스를 백업하고 복원하는 방법을 자세히 설명합니다.
배경 지식
MySQL은 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)으로, 전 세계적으로 널리 사용됩니다. 데이터베이스 백업은 데이터 손실을 방지하고, 시스템 복구를 용이하게 하기 위해 필수적인 작업입니다. mysqldump
는 MySQL에서 제공하는 데이터베이스 백업 도구로, SQL 형식의 덤프 파일을 생성합니다. 이 덤프 파일을 사용하여 데이터베이스를 복원할 수 있습니다.
데이터베이스 백업
mysqldump
명령어를 사용한 데이터베이스 백업
mysqldump
명령어는 MySQL 데이터베이스를 백업하는 가장 일반적인 방법입니다. 다음은 mysqldump
명령어를 사용하여 데이터베이스를 백업하는 방법입니다.
mysqldump -u [사용자이름] -p [데이터베이스이름] > [백업파일경로/파일명.sql]
예시
- 사용자 이름:
root
- 데이터베이스 이름:
mydatabase
- 백업 파일 경로 및 이름:
/path/to/backup/mydatabase_backup.sql
mysqldump -u root -p mydatabase > /path/to/backup/mydatabase_backup.sql
이 명령어를 실행하면 비밀번호를 입력하라는 프롬프트가 나타납니다. 비밀번호를 입력하면 데이터베이스가 백업 파일로 저장됩니다.
데이터베이스 복원
mysql
명령어를 사용한 데이터베이스 복원
백업된 SQL 파일을 사용하여 데이터베이스를 복원할 수 있습니다. 다음은 mysql
명령어를 사용하여 데이터베이스를 복원하는 방법입니다.
mysql -u [사용자이름] -p [데이터베이스이름] < [백업파일경로/파일명.sql]
예시
- 사용자 이름:
root
- 데이터베이스 이름:
mydatabase
- 백업 파일 경로 및 이름:
/path/to/backup/mydatabase_backup.sql
mysql -u root -p mydatabase < /path/to/backup/mydatabase_backup.sql
이 명령어를 실행하면 비밀번호를 입력하라는 프롬프트가 나타납니다. 비밀번호를 입력하면 백업 파일에 저장된 데이터가 지정된 데이터베이스로 복원됩니다.
주의사항
- 파일 경로 정확성: 백업 파일의 경로가 정확한지 확인합니다. 경로가 잘못되면 파일을 찾을 수 없어 복원에 실패할 수 있습니다.
- 접근 권한: 백업 및 복원 작업을 수행하는 사용자에게 적절한 권한이 부여되어 있는지 확인합니다. 백업 작업을 수행하려면
SELECT
권한이 필요하며, 복원 작업을 수행하려면INSERT
권한이 필요합니다.
데이터베이스 이름 확인: 복원할 데이터베이스가 이미 존재해야 합니다. 데이터베이스가 존재하지 않으면 복원하기 전에 데이터베이스를 생성해야 합니다.
CREATE DATABASE mydatabase;
결론
MySQL 데이터베이스의 백업과 복원은 데이터 손실을 방지하고 시스템 복구를 위해 필수적인 작업입니다. mysqldump
와 mysql
명령어를 사용하면 손쉽게 백업과 복원을 수행할 수 있습니다. 이 가이드를 참고하여 정기적인 백업을 통해 데이터를 안전하게 보호하세요.
AWS RDS 또는 NHN Toast DB와 같은 클라우드 기반 데이터베이스를 사용할 때는 로컬 데이터베이스와 다소 다른 방법으로 데이터를 가져오고 백업할 수 있습니다. 아래는 이러한 클라우드 DB에서 데이터를 백업하고 가져오는 방법에 대해 설명합니다.
AWS RDS를 사용한 데이터베이스 백업 및 복원
AWS RDS 데이터베이스 백업
AWS RDS에서는 자동 백업과 수동 스냅샷을 사용하여 데이터베이스를 백업할 수 있습니다.
- 자동 백업: RDS 인스턴스를 생성할 때 자동 백업을 활성화할 수 있습니다. 자동 백업은 정해진 기간 동안 유지되며, 필요에 따라 복원할 수 있습니다.
- 수동 스냅샷: 수동으로 RDS 인스턴스의 스냅샷을 생성하여 백업할 수 있습니다.
- AWS Management Console에서 RDS 인스턴스로 이동합니다.
- 백업할 인스턴스를 선택하고
Actions
버튼을 클릭합니다. Take snapshot
을 선택하고 스냅샷 이름을 입력한 후Take snapshot
을 클릭합니다.
AWS RDS 데이터베이스 복원
- 자동 백업 복원:
- AWS Management Console에서 RDS 인스턴스로 이동합니다.
Snapshots
탭에서 복원할 스냅샷을 선택합니다.Actions
버튼을 클릭하고Restore snapshot
을 선택합니다.- 새로운 인스턴스 이름과 설정을 입력한 후
Restore DB instance
를 클릭합니다.
- 수동 스냅샷 복원:
- AWS Management Console에서 RDS 인스턴스로 이동합니다.
Snapshots
탭에서 복원할 스냅샷을 선택합니다.Actions
버튼을 클릭하고Restore snapshot
을 선택합니다.- 새로운 인스턴스 이름과 설정을 입력한 후
Restore DB instance
를 클릭합니다.
데이터 내보내기 및 가져오기
AWS RDS에서도 mysqldump
와 mysql
명령어를 사용할 수 있습니다.
데이터베이스 내보내기
mysqldump -h [RDS 엔드포인트] -u [사용자이름] -p [데이터베이스이름] > [백업파일경로/파일명.sql]
데이터베이스 가져오기
mysql -h [RDS 엔드포인트] -u [사용자이름] -p [데이터베이스이름] < [백업파일경로/파일명.sql]
NHN Toast DB를 사용한 데이터베이스 백업 및 복원
NHN Toast DB에서도 AWS RDS와 유사한 방식으로 데이터베이스를 백업하고 복원할 수 있습니다. NHN Toast DB는 자체 관리 콘솔을 통해 백업과 복원을 관리할 수 있습니다.
NHN Toast DB 데이터베이스 백업
- 자동 백업 설정:
- NHN Toast 콘솔에 로그인합니다.
- DB 인스턴스로 이동하여 백업 설정을 구성합니다.
- 자동 백업 주기와 보관 기간을 설정합니다.
- 수동 백업:
- NHN Toast 콘솔에서 DB 인스턴스를 선택합니다.
백업
메뉴로 이동하여수동 백업
을 선택합니다.- 백업 이름을 입력하고 백업을 생성합니다.
NHN Toast DB 데이터베이스 복원
- 자동 백업 복원:
- NHN Toast 콘솔에서 DB 인스턴스를 선택합니다.
백업 및 복원
메뉴로 이동하여 복원할 백업을 선택합니다.복원
버튼을 클릭하고 복원 설정을 입력합니다.
- 수동 백업 복원:
- NHN Toast 콘솔에서 DB 인스턴스를 선택합니다.
백업 및 복원
메뉴로 이동하여 복원할 수동 백업을 선택합니다.복원
버튼을 클릭하고 복원 설정을 입력합니다.
데이터 내보내기 및 가져오기
NHN Toast DB에서도 mysqldump
와 mysql
명령어를 사용할 수 있습니다.
데이터베이스 내보내기
mysqldump -h [NHN Toast DB 엔드포인트] -u [사용자이름] -p [데이터베이스이름] > [백업파일경로/파일명.sql]
데이터베이스 가져오기
mysql -h [NHN Toast DB 엔드포인트] -u [사용자이름] -p [데이터베이스이름] < [백업파일경로/파일명.sql]
결론
AWS RDS와 NHN Toast DB 모두 백업 및 복원 기능을 제공하여 데이터베이스의 안정성을 높이고 데이터 손실을 방지할 수 있습니다. mysqldump
와 mysql
명령어를 사용하면 데이터를 쉽게 내보내고 가져올 수 있습니다. 정기적인 백업을 통해 데이터의 안전성을 확보하고, 필요 시 빠르게 복원할 수 있도록 대비하는 것이 중요합니다.
도커에서 Dump
1. MySQL 데이터 덤프 생성
먼저, 현재 실행 중인 MySQL 컨테이너에서 데이터베이스 덤프를 생성해야 합니다. 도커 exec
명령을 사용하여 컨테이너 내에서 mysqldump
를 실행합니다.
docker exec -it [컨테이너_이름] /usr/bin/mysqldump -u [사용자명] -p[비밀번호] [데이터베이스명] > [백업파
2. 덤프 파일을 안전한 위치로 이동
이제 생성된 덤프 파일을 호스트 머신으로 복사합니다.
docker cp [컨테이너_이름]:/path/to/backup.sql /path/on/host
utf8mb4_0900_ai_ci
ERROR 1273 (HY000) at line 25: Unknown collation: 'utf8mb4_0900_ai_ci'
오류는 MySQL 서버가 덤프 파일에 지정된 collation인 utf8mb4_0900_ai_ci
를 인식하지 못할 때 발생합니다. 이는 보통 MySQL 서버의 버전 차이에서 비롯됩니다. MySQL 8.0에서 utf8mb4_0900_ai_ci
collation이 도입되었기 때문에, 이 collation을 사용하는 덤프 파일을 MySQL 8.0 이하 버전에서 복원하려고 하면 문제가 발생합니다.
이 문제를 해결하려면 덤프 파일의 collation을 지원되는 collation으로 변경하거나, 덤프를 생성할 때 호환 가능한 collation을 지정할 수 있습니다. 여기서는 덤프 파일의 collation을 변경하는 방법을 설명하겠습니다.
덤프 파일의 Collation 변경
- 덤프 파일을 텍스트 편집기로 엽니다.
utf8mb4_0900_ai_ci
를utf8mb4_general_ci
또는 호스트 MySQL 서버가 지원하는 다른 collation으로 바꿉니다.
명령어를 사용해서 덤프 파일의 collation을 일괄적으로 변경할 수도 있습니다:
sed -i 's/utf8mb4_0900_ai_ci/utf8mb4_general_ci/g' backup.sql
이 명령어는 backup.sql
파일에서 utf8mb4_0900_ai_ci
를 utf8mb4_general_ci
로 모두 변경합니다.
덤프 생성 시 호환 가능한 Collation 지정
MySQL 덤프를 생성할 때 호환 가능한 collation을 직접 지정할 수도 있습니다. 이를 위해 --default-character-set
옵션을 사용합니다:
docker exec -it 6e2 /bin/sh -c 'mysqldump --default-character-set=utf8mb4 -u ghost -pghostpass ghost > /backup.sql'
이렇게 하면 덤프 파일이 utf8mb4
character set과 기본 collation으로 생성됩니다.
덤프 파일 복원
덤프 파일의 collation을 변경한 후, 다시 MySQL 서버에 복원을 시도하세요:
mysql -u batiai --host=....com --port=3306 blog < backup.sql
윈도우에서 처리하기
- 덤프 파일 열기:
notepad++
,VS Code
등 텍스트 편집기에서 덤프 파일을 엽니다. - 찾기 및 바꾸기:
Ctrl + H
를 눌러 찾기 및 바꾸기 창을 엽니다.찾을 내용에utf8mb4_0900_ai_ci
를 입력합니다.바꿀 내용에utf8mb4_general_ci
를 입력합니다.모두 바꾸기 버튼을 클릭하여 덤프 파일 내의 모든utf8mb4_0900_ai_ci
를utf8mb4_general_ci
로 변경합니다.
Trouble Shooting
SUPER privilege and binary logging
Task 'MySQL restore' started at Sat Jul 13 22:42:28 KST 2024 ERROR 1419 (HY000) at line 478: You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
MySQL에서 CREATE FUNCTION
이나 CREATE PROCEDURE
같은 저장된 프로시저를 생성할 때 바이너리 로깅이 활성화된 경우입니다. 이를 해결하려면 두 가지 방법이 있습니다:
1. SUPER
권한 부여
SUPER
권한이 있는 사용자로 로그인하여 SUPER
권한을 부여할 수 있습니다. 예를 들어, root
사용자로 로그인하여 권한을 부여할 수 있습니다.
sql코드 복사GRANT SUPER ON *.* TO 'batiai'@'%'
;
FLUSH PRIVILEGES;
2. log_bin_trust_function_creators
변수 설정
log_bin_trust_function_creators
변수를 ON
으로 설정하여 덤프 파일을 가져올 때 SUPER
권한 없이 저장된 프로시저나 함수를 생성할 수 있도록 합니다. 이 설정을 변경하려면 SUPER
권한이 필요합니다.
RDS 환경에서 설정 변경
RDS 환경에서는 파라미터 그룹을 통해 설정을 변경할 수 있습니다.
- AWS Management Console에서 RDS 인스턴스를 선택합니다.
- Parameter Groups를 선택합니다.
- 사용 중인 파라미터 그룹을 편집하여
log_bin_trust_function_creators
변수를1
로 설정합니다. - 변경 사항을 저장하고 RDS 인스턴스를 재시작합니다.
MySQL 클라이언트를 사용하여 설정 변경
만약 RDS가 아닌 자체 MySQL 서버를 사용 중이라면, MySQL 클라이언트를 사용하여 설정을 변경할 수 있습니다.
sql코드 복사SET GLOBAL log_bin_trust_function_creators = 1
;
3. 예제
권한 부여 예제
sql코드 복사-- root 사용자로 로그인한 후
;
GRANT SUPER ON *.* TO 'batiai'@'%'
FLUSH PRIVILEGES;
설정 변경 예제 (RDS가 아닌 경우)
sql코드 복사-- root 사용자로 로그인한 후
;
SET GLOBAL log_bin_trust_function_creators = 1
결론
RDS 환경에서는 파라미터 그룹을 통해 log_bin_trust_function_creators
설정을 변경하고, 그 외의 환경에서는 SUPER
권한을 부여하거나 설정을 변경하여 문제를 해결할 수 있습니다.