Docker mysql 自动化备份
文章目录
一、Docker mysql 数据备份
1.查看docker下 mysql

mysql 版本:8.3.4
2. 创建mysql_backup.sh文件
#!/bin/bash
# 获取容器ID
# name为docker下mysql容器名
container_id=$(docker ps -aqf "name=mysql")
echo "mysql的容器ID is $container_id"
# 检查容器是否存在
if [ -z "$container_id" ]; then
echo "没有找到名为 mysql 的容器!"
exit 1
fi
# 登录用户名 自行填入
MYSQL_USER=""
# 登录密码 自行填入(注意:如果密码包含特殊符号,请在前面使用 '\')
MYSQL_PASSWORD=""
MYSQL_PORT="3306"
# 是否删除过期数据
expire_backup_delete="true"
# 过期天数
expire_days=7
# 备份文件存放地址
backup_location=""
# 定义备份详细时间
backup_time=$(date +%Y%m%d%H%M)
# 定义备份目录中的年月日时间
backup_Ymd=$(date +%Y-%m-%d)
# 备份文件夹全路径
backup_dir=$backup_location/$backup_Ymd
# 获取所有数据库的名称,排除信息库
DATABASES=$(docker exec $container_id mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'SHOW DATABASES;' | grep -vE '^(Database|information_schema|performance_schema)$')
echo "DATABASES == $DATABASES"
# 判断是否有待备份的数据库
if [ -n "$DATABASES" ]; then
mkdir -p "$backup_dir"
# 循环备份每个数据库
echo "$DATABASES" | while read dbname; do
echo "开始执行数据库 $dbname 备份..."
# 备份数据库 备份为压缩包形式
docker exec $container_id mysqldump --defaults-extra-file=/etc/mysql/conf.d -F -B --default-character-set=utf8 "$dbname" | gzip > "$backup_dir/bak-$dbname-$backup_time.sql.gz"
if [ $? -eq 0 ]; then
echo "数据库 $dbname 成功备份到 $backup_dir/bak-$dbname-$backup_time.sql.gz"
else
echo "数据库 $dbname 备份失败!"
fi
done
else
echo "没有待备份的数据库,停止数据库备份"
exit 1
fi
# 删除过期备份
if [ "$expire_backup_delete" == "true" ] && [ -n "$backup_dir" ]; then
find "$backup_dir" -type f -mtime +$expire_days -exec rm -f {} \;
echo "删除过期的数据库备份信息!"
fi
echo "所有的数据库已完成备份"
exit 0
3. 编辑配置
需要自行配置: /etc/my.cnf
docker exec $container_id mysqldump `--defaults-extra-file=/etc/my.cnf` -F -B --default-character-set=utf8 "$dbname" | gzip > "$backup_dir/bak-$dbname-$backup_time.sql.gz"
3.1 进入容器
docker exec -it <container_id_or_name> /bin/bash
vim /etc/my.cnf
3.2 或者是找 mysql 创建容器挂载的配置文件
volumes:
# 数据挂载
- /docker/mysql/data/:/var/lib/mysql/
# 配置挂载
- /docker/mysql/conf/:/etc/mysql/conf.d/
在/docker/mysql/conf/ 下新建 my.cnf
3.3 编辑my.cnf,添加如下
[mysqldump]
user=xxx
password="xxx"
4. 赋予shell文件可执行权限
#设置拥有者可读写,其他人不可读写执行
chmod 700 /backup/scripts/mysql_backup.sh
#赋予“可执行”权限
chmod +x /backup/scripts/mysql_backup.sh
5.运行备份脚本
sh mysql_backup.sh
6. 自动化备份
设置定时任务

配置定时信息
# 配置
crontab -e
//凌晨 3点开始备份
00 3 * * * /backup/scripts/mysql_backup.sh >> /backup/logs/mysql_backup.log 2>&1
重启 cron 服务
#重启 cron 服务
ld@ld-jzdjk:~$ systemctl reload crond.service
7. 总结出现过的问题
7.1 在notepad++ 编辑好的文件 不能在xshell 正常运行
CentOS7 运行.sh脚本提示 syntax error: unexpected end of file
ld@ld-jzdjk:~/docker$ vi mysql_backup.sh
进入后: Ctrl+C 进入命令行模式
输入: :set ff
结果为: fileformat=dos
解决方法:
输入: :set ff=unix wq保存退出即可
再通过set ff查看会发现fileformat=unix。

7.2 未配置my.cnf文件
解决方法:查看目录3
1420

被折叠的 条评论
为什么被折叠?



