>운영 및 유지보수 >Docker >docker MySQL은 매일 자동 백업을 실현합니다!

docker MySQL은 매일 자동 백업을 실현합니다!

藏色散人
藏色散人앞으로
2022-12-08 16:56:493101검색

이 글은 주로 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 &#39;mysqldump: [Warning] Using a password on the command line interface can be insec&#39; 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 &#39;exec mysqldump --all-databases -uroot -p123456 --all-databases&#39; > /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 &#39;exec mysqldump --all-databases -uroot -p123456 --all-databases&#39; > /var/backup/music_`date +)
....

명령어 뒤의 %F`.sql이 표시되지 않는 것을 확인합니다. 그 이유는 %가 변수이고, 이스케이프 문자가 추가되어 있기 때문입니다. 원래 문자를 유지합니다.

0 2 * * * find /backup/ -mtime +1 -name "*.sql" -delete && sudo docker exec mysql sh -c &#39;exec mysqldump --all-databases -uroot -p123456 --all-databases&#39; > /var/backup/music_`date +\%F`.sql

저장하면 테스트가 적용됩니다.

위 내용은 docker MySQL은 매일 자동 백업을 실현합니다!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제