mysql之docker容器数据备份
本文针对mysql是docker容器的情况下,如何做备份。
1.启动mysql容器,挂载备份目录
可以在启动mysql容器时加一个挂载目录 ,我备份的sql挂载目录为 -v /opt/docker/mysql/backup:/opt/backup
,/opt/docker/mysql/backup
宿主机目录,/opt/backup
容器目录。例如:
docker run --name mysql -v /opt/docker/mysql/backup:/opt/backup -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.27
2.编写sh定时任务脚本
vim ~/backup.sh
粘贴进backup.sh脚本
#!/bin/bash
dateBackup=$(date +%Y-%m-%d_%H:%M:%S)
dir=/opt/docker/mysql/backup/${dateBackup}
# 宿主机新建目录,通过挂载会自动添加到容器
if [ ! -d "${dir}" ]
then
mkdir ${dir}
echo "创建文件夹 ${dir} 成功" >> ${dir}/error.log
else
echo "创建文件夹 ${dir} 失败,文件夹已存在" >> ${dir}/error.log
fi
# 需要备份的数据库名,多个空格隔开如:dbNames=(testdb1 testdb2)
dbNames=(halodb)
for dbName in ${dbNames[@]}
do
echo "-----------------> 备份 ${dbName} 数据库 <-----------------" >> ${dir}/error.log
docker exec -it mysql /bin/bash -c "mysqldump -uroot -pth19xcf.zhz -h127.0.0.1 -P3306 ${dbName} 1>> /opt/backup/${dateBackup}/${dbName}.sql 2>> /opt/backup/${dateBackup}/error.log"
gzip ${dir}/${dbName}.sql
done
echo -e " \n ----------------> 删除过期文件 <---------------------------" >> ${dir}/error.log
# 判断文件夹数量是否大于7,防止程序意外停止,删除所有备份
dirCount=`ls -l /opt/docker/mysql/backup/|grep "^d"|wc -l`
if [ ${dirCount} -gt 7 ]
then
# 删除超过七天的带"_"的目录
find /opt/docker/mysql/backup/ -mtime +6 -name "*_*" -exec rm -rf {} \;
echo -e " 删除过期文件成功" >> ${dir}/error.log
else
echo "删除过期文件失败,文件数量小于 7 " >> ${dir}/error.log
fi
3.开启定时任务
crontab -e
chmod +x ~/backup.sh
#凌晨 01:00 分执行
0 1 * * * ~/backup.sh
评论区