1)設(shè)置Docker Mysql的volumes
mariadb:
? ? container_name: mariadb
? ? image: mariadb
? ? environment:
? ? ? - MYSQL_ROOT_PASSWORD=dbpassword
? ? ? - MYSQL_DATABASE=dbback
? ? ? - MYSQL_USER=dbuser
? ? ? - MYSQL_PASSWORD=dbpassword
? ? ? - "TZ=Asia/Shanghai"
? ? volumes:
? ? ? - /home/xldev/docker/mysqldata:/var/lib/mysql
? ? ? - /home/xldev/docker/config:/etc/mysql/conf.d
? ? ports:
? ? ? - 3306:3306
2)編寫備份腳本
#!/bin/bash
:<
此為參考shell示例代碼
根據(jù)每個服務(wù)器配置的不同進行相應的修改
賦值權(quán)限:
? ? Step-One :修改所有BACKUP用戶權(quán)限 sudo chown -R [用戶] back
????Step-Two :修改所有BACKUP組權(quán)限 sudo chgrp -R [用戶組] back
????Step-Three :賦予腳本執(zhí)行權(quán)限 sudo chmod 744 [腳本]
添加定時任務(wù):
? ? Step-One :查看定時任務(wù) crontab -l
????Step-Two :刪除定時任務(wù) crontab -r
????Step-Three :
????????crontab -e
????????#每天凌晨兩點十分執(zhí)行腳本 /data/tmp/mysqldata/backup/kstreamdb.sh
????????10 2 * * * /data/tmp/mysqldata/backup/kstreamdb.sh
????????Step-Four :重啟定時任務(wù) service crond restart
!
#當前的時間作為備份的文件名
DATETIME=$(date +%Y_%m_%d_%H%M%S)
#服務(wù)器存放路徑
BACKUP=/data/tmp/mysqldata/backup
#docker容器備份存放路徑
DOCKER_BACKUP=/var/lib/mysql/backup
#docker容器名稱
DOCKER_NAME=mariadb
#docker數(shù)據(jù)庫用戶名
DOCKER_DB_USER=dbuser
#docker數(shù)據(jù)庫密碼
DOCKER_DB_PWD=dbpassword
#docker數(shù)據(jù)庫名
DOCKER_DATABASE=dbback
echo "=======開始備份========"
echo "=======備份的路徑是 $BACKUP/$DATETIME.tar.gz"
#進入 docker mariadb鏡像
docker exec -i mariadb bash <<-DOF
????????#如果備份的路徑文件夾存在矩动,就使用吱韭,否則就創(chuàng)建
? ? ? ? [ ! -d "$DOCKER_BACKUP/$DATETIME" ] && mkdir -p "$DOCKER_BACKUP/$DATETIME"
????????#執(zhí)行mysql的備份數(shù)據(jù)庫的指令
? ? ? ? mysqldump -u${DOCKER_DB_USER} -p${DOCKER_DB_PWD}? $DOCKER_DATABASE | gzip > $DOCKER_BACKUP/$DATETIME/$DATETIME.sql.gz
????????#打包備份文件
? ? ? ? cd $DOCKER_BACKUP
????????tar -zcvf $DATETIME.tar.gz $DATETIME
????????#刪除臨時目錄
? ? ? ? rm -rf $DOCKER_BACKUP/$DATETIME
????????#刪除10天前的備份文件
? ? ? ? find $DOCKER_BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;
????????#進入數(shù)據(jù)庫
? ? ? ? mysql -u${DOCKER_DB_USER} -p${DOCKER_DB_PWD} <<-MOF
????????????????#指定數(shù)據(jù)庫
? ? ? ? ? ? ? ? use ${DOCKER_DATABASE};
????????????????#開啟事務(wù)
? ? ? ? ? ? ? ? BEGIN;
????????????????????#清理 history_record表30天前的數(shù)據(jù)
? ? ? ? ? ? ? ? ? ? DELETE FROM history_record? WHERE create_time < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 MONTH));
????????????????????#釋放表空間(會鎖定表)
? ? ? ? ? ? ? ? ? ? OPTIMIZE TABLE history_record;
????????????????#提交事務(wù)
? ? ? ? ? ? ? ? COMMIT;
exit
MOF
exit
DOF
echo "=======備份文件成功========"