建立備份的MySQL容器
docker run --name mysql-back -e MYSQL_ROOT_PASSWORD=root -v /srv/mysql/backup:/mysql/backup -d mysql:5.7.17
查看虛擬網絡,其中 bridge 是 Docker 默認使用的虛擬網絡:
docker network inspect bridge
在返回的結果中,找到 Containers 部分。內容如下:
"Containers": { "asdf2334a": { "Name": "mysql-a" "EndpointID": "sadfas234" "MacAddress": "...." "IPv4Address": "192.168.0.2" "IPv6Address": "" } }
Containers 列出了所有使用 bridge 網絡的容器。因為我給 MySQL 服務器容器起名為 mysql-a,所以我查看Name 為 mysql-a 的配置。IPv4Address表示容器mysql-a的虛擬IP是 192.168.0.2 。記錄下這個IP 。
進入容器的 bash :
docker exec -it mysql-b bash
安裝VIM和CRON定時任務:
apt-get update && apt-get install vim apt-get update && apt-get install cron
生成一個shell腳本文件來進行備份。
cat >/zc/mysql/backup.sh <<EOF #!/bin/sh zcDATE=\$(date +%Y%m%d) mkdir /zc/mysql/backup/\$zcDATE mysqldump -h '192.168.0.2' -uroot -p'123456' --databases db1 > /zc/mysql/backup/\$zcDATE/db1.sql mysqldump -h '192.168.0.2' -uroot -p'123456' --databases db2 > /zc/mysql/backup/\$zcDATE/db2.sql EOF
MySQL上存在兩個數據庫,名稱分別是 db1 和 db2,利用這種方式在硬盤上備份數據。-h表示遠程的服務器IP。-u 和 -p 分別是遠程服務器的用戶名和密碼。這里不建議使用 mysqldump 的 –all-database 選項。因為該選項會把遠程MySQL里的系統數據庫也備份下來,包括 root 用戶的密碼等內容。如果你要把導出的內容導入到別的機器上,這些系統設置(比如用戶名和密碼)會覆蓋你的機器上原來的設置。
設置定時任務的啟動時間:
crontab -e 0 23 * * * sh /zc/mysql/backup.sh
啟動定時任務
service cron start