이 글은 주로 docker MySQL 데이터베이스를 백업하고 복원하는 방법과 매일 자동 백업을 구현하는 방법을 소개합니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다!
Docker MySQL 데이터베이스 백업 및 복원, 일일 예약 자동 백업
One: 백업
Docker mysql 보기
ubuntu@ubuntu:~$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a30ead8a26fc mysql:8.0.27 "docker-entrypoint.s…" 10 seconds ago Up 7 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
방법 1:
단계별, 정기 백업, 컨테이너 입력 및 mysqldump 사용 백업합니다. [추천 학습: docker 비디오 튜토리얼]
sudo docker exec -it mysql /bin/bash #进入mysql容器 mysqldump -uroot -p123456 --all-databases > emp_`date +%F`.sql #在容器中备份所有数据库,并以日期命名 exit #退出容器 sudo docker cp mysql:emp_2022-03-17.sql /var/backup/ #将容器中的备份文件,复制到本地备份文件夹中
은 다음과 같이 표시됩니다:
ubuntu@ubuntu:~$ sudo docker exec -it mysql /bin/bash root@a30ead8a26fc:/# mysqldump -uroot -p123456 --all-databases > emp_`date +%F`.sql mysqldump: [Warning] Using a password on the command line interface can be insecure. root@a30ead8a26fc:/# exit exit ubuntu@ubuntu:~$ sudo docker cp mysql:emp_2022-03-17.sql /var/backup/ ubuntu@ubuntu:~$ ll /var/backup/ total 11492 drwxrwxrwx 2 root root 4096 Mar 17 15:45 ./ drwxr-xr-x 14 root root 4096 Mar 14 17:49 ../ -rw-r--r-- 1 root root 3915599 Mar 17 15:42 emp_2022-03-17.sql
방법 2:
한 단계, 여기에 두 가지 가능한 명령이 있습니다
1): (권장, 복원은 문제 없습니다)
sudo docker exec mysql(容器名) sh -c 'exec mysqldump --all-databases -uroot -p123456 --all-databases' > /var/backup/music_`date +%F`.sql
2) : (권장하지 않습니다. 복원에 문제가 있습니다.)
인터넷에 있는 백업 방법은 대부분 이렇지만, 복원에 문제가 있는 경우는 5.7 버전을 사용하시면 됩니다.
sudo docker exec -it mysql(容器名) mysqldump -uroot -p123456 --all-databases > /var/backup/music_`date +%F`.sql
참고: 버전 때문일 수 있습니다(제 버전은 8.0입니다). 이런 종류의 백업에는 문제가 없지만 복원에는 문제가 있습니다. 오류는 다음과 같이 보고됩니다.
ubuntu@ubuntu:~$ sudo mysql -uroot -p < emp_2022-03-15.sql Enter password: ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysqldump: [Warning] Using a password on the command line interface can be insec' at line 1
데이터베이스에 들어가서 명령 소스를 사용하여 복원할 수도 있지만 오류가 계속 표시되지만 무시되므로 결국 데이터 복구가 불완전해집니다. 이 모든 것은 권장되지 않습니다.
둘: 복원
1): 컨테이너가 아닌 곳에서 복원
1: 복원을 위한 직접 명령
mysql -uroot -p123456 < /var/backup/emp_2022-03-15.sql
2: mysql 입력 후 소스 복원
mysql -uroot -p source /var/backup/emp_2022-03-15.sql
2): 컨테이너 mysql 복원
mysql 컨테이너에 들어가야 함 복원합니다.
#复制备份文件到容器中的var目录 sudo docker cp /var/backup/emp_2022-03-17.sql mysql:/var #进入容器 sudo docker exec -it mysql bin/bash #进入mysql mysql -uroot -p #使用备份sql恢复数据库 source /var/backup/emp_2022-03-15.sql #或者不进入mysql直接容器中还原 mysql -uroot -p123456 < /var/backup/emp_2022-03-15.sql
3개: 예약된 작업
1): 예약된 작업 설정
crontab -e
내용은 다음과 같습니다.
0 2 * * * find /backup/ -mtime +1 -name "*.sql" -delete && sudo docker exec mysql sh -c 'exec mysqldump --all-databases -uroot -p123456 --all-databases' > /var/backup/music_`date +%F`.sql
명령 설명:
매일 오전 2시에 실행
find /backup/ -mtime +1 -name "*.sql" -delete #删除2天前的备份任务,即保留3个版本。根据需要自己选择。
2): 예약된 작업은 실행되지 않습니다
업데이트: 두 번째 백업 파일이 없는 것으로 확인되었으니 크론 로그를 확인해 보세요. 그렇지 않은 경우 cron 로그를 활성화하십시오. 방법은 다음과 같습니다.
#编辑系统日志文件 vim /etc/rsyslog.d/50-default.conf #去掉前面的#注释符号 cron.* /var/log/cron.log #重启日志服务 systemctl restart rsyslog.service
예약된 작업 표시를 확인하여
cat /var/log/cron.log .... CRON[2015636]: (root) CMD (find /backup/ -mtime +1 -name "*.sql" -delete && sudo docker exec mysql sh -c 'exec mysqldump --all-databases -uroot -p123456 --all-databases' > /var/backup/music_`date +) ....
명령어 뒤의 %F`.sql이 표시되지 않는 것을 확인합니다. 그 이유는 %가 변수이고, 이스케이프 문자가 추가되어 있기 때문입니다. 원래 문자를 유지합니다.
0 2 * * * find /backup/ -mtime +1 -name "*.sql" -delete && sudo docker exec mysql sh -c 'exec mysqldump --all-databases -uroot -p123456 --all-databases' > /var/backup/music_`date +\%F`.sql
저장하면 테스트가 적용됩니다.
위 내용은 docker MySQL은 매일 자동 백업을 실현합니다!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!