Docker mysql 自动化备份

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值