侧边栏壁纸
博主头像
赫兹

谁辜负过自己,说不上可惜

  • 累计撰写 18 篇文章
  • 累计创建 13 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

mysql之docker容器数据定时备份

赫兹
2022-09-06 / 0 评论 / 0 点赞 / 375 阅读 / 467 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-09-08,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

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
0

评论区