1)设置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示例代码
根据每个服务器配置的不同进行相应的修改
赋值权限:
Step-One :修改所有BACKUP用户权限 sudo chown -R [用户] back
Step-Two :修改所有BACKUP组权限 sudo chgrp -R [用户组] back
Step-Three :赋予脚本执行权限 sudo chmod 744 [脚本]
添加定时任务:
Step-One :查看定时任务 crontab -l
Step-Two :删除定时任务 crontab -r
Step-Three :
crontab -e
#每天凌晨两点十分执行脚本 /data/tmp/mysqldata/backup/kstreamdb.sh
10 2 * * * /data/tmp/mysqldata/backup/kstreamdb.sh
Step-Four :重启定时任务 service crond restart
!
#当前的时间作为备份的文件名
DATETIME=$(date +%Y_%m_%d_%H%M%S)
#服务器存放路径
BACKUP=/data/tmp/mysqldata/backup
#docker容器备份存放路径
DOCKER_BACKUP=/var/lib/mysql/backup
#docker容器名称
DOCKER_NAME=mariadb
#docker数据库用户名
DOCKER_DB_USER=dbuser
#docker数据库密码
DOCKER_DB_PWD=dbpassword
#docker数据库名
DOCKER_DATABASE=dbback
echo "=======开始备份========"
echo "=======备份的路径是 $BACKUP/$DATETIME.tar.gz"
#进入 docker mariadb镜像
docker exec -i mariadb bash <<-DOF
#如果备份的路径文件夹存在,就使用,否则就创建
[ ! -d "$DOCKER_BACKUP/$DATETIME" ] && mkdir -p "$DOCKER_BACKUP/$DATETIME"
#执行mysql的备份数据库的指令
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 {} \;
#进入数据库
mysql -u${DOCKER_DB_USER} -p${DOCKER_DB_PWD} <<-MOF
#指定数据库
use ${DOCKER_DATABASE};
#开启事务
BEGIN;
#清理 history_record表30天前的数据
DELETE FROM history_record WHERE create_time < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 MONTH));
#释放表空间(会锁定表)
OPTIMIZE TABLE history_record;
#提交事务
COMMIT;
exit
MOF
exit
DOF
echo "=======备份文件成功========"