docker定时备份mysql-定时备份docker中mysql的数据

一、概念

方法一:备份是通过如下命令实现

docker exec -it mysql(镜像号) mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -B test1(数据库名称)(中间是有一个空格的)> $backup_dir/mysql_backup_test-$backup_time.sql
# 如果需要压缩
docker exec 301520ed7b07 mysqldump -uroot -p123456 leyeoa | gzip > ${backup_dir}/leyeoa_${backup_time}.sql.gz
# 解压gz压缩包
gzip -d FileName.gz

参考:http://t.zoukankan.com/Hello-TomCat-p-13231783.html

方法二:或者进入容器执行

#获取容器id
mysqlid=`/usr/local/bin/docker ps -aqf "name=mysql5.7"`
 
#进入mysql容器
/usr/local/bin/docker exec -i ${mysqlid} bash<<'EOF'
# 执行备份
mysqldump --single-transaction -u root -h 127.0.0.1 --password=123456 --all-databases > /backup/db.sql
#将容器内sql文件导出到服务器
docker cp ${mysqlid}:/backup/db.sql ${backup_dir}/db_${now}.sql

参考:https://www.cnblogs.com/wangtaobiu/p/15624238.html

二、实现

1、新建脚本

cd /usr/local/mysql
touch mysql_backup_edevp-nacos.sh
vim mysql_backup_edevp-nacos.sh

输入以下内容

#!/bin/bash

# 定义工作路径
BASE_DIR=/usr/local/mysql
 
# 备份文件存放地址(根据实际情况填写)
backup_location=$BASE_DIR/backup
echo "$(date "+%Y-%m-%d %H:%M:%S") 备份路径:$backup_location"

# 判断路径是否存在
if [ ! -d "$backup_location" ]; then
    mkdir -p $backup_location
fi

# 设置mysql的登录用户名和密码(根据实际情况填写)
mysql_user="root"
mysql_password="123"
mysql_host="localhost"
mysql_port="3306"
mysql_charset="utf8"
mysql_database=edevp-nacos

# 增加日志路径 #时间格式DATE=`date '+%Y%m%d-%H%M'`
LOGFILE=$backup_location/$mysql_database-backup.log
echo "$(date "+%Y-%m-%d %H:%M:%S") 日志路径:$LOGFILE"

# 是否删除过期数据
expire_backup_delete="ON"
expire_days=7
backup_time=`date +%Y%m%d%H%M`
backup_dir=$backup_location
welcome_msg="Welcome to use MySQL backup tools!"
mysql_database_backup_file=${mysql_database}_backup-${backup_time}.sql

time=$(date "+%Y-%m-%d %H:%M:%S")
echo -e "\r\n\r\n\r\n--------------------------------" >> $LOGFILE

# 备份指定数据库中数据(此处假设数据库是mysql_backup_test)
# mysqldump --single-transaction -u root -h 127.0.0.1 --password=123456 --all-databases > /backup/db.sql
#docker exec -it mysql(镜像号) mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -B test1(数据库名称)(中间是有一个空格的)> $backup_dir/mysql_backup_test-$backup_time.sql
echo "${time} START BACKUP"
echo "${time} START BACKUP ">> $LOGFILE
echo "${time} docker exec -it mysql mysqldump -h${mysql_host} -P${mysql_port} -u${mysql_user} -p${mysql_password} -B ${mysql_database} > ${backup_dir}/${mysql_database_backup_file}"  >> $LOGFILE
# docker exec -it mysql mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -B $mysql_database > $backup_dir/$mysql_database_backup_file
# 报错解决:the input device is not a TTY 原因是后台linux执行的时候没有终端设备一般来说我们启动容器后要与容器进行交互操作,这是,就要加上"-it"这个参数,而在重启过重中或定时任务中,如果让脚本在后台运行,就没有可交互的终端,这就会引发如题所示错误,解决办法就是去掉“-it”这个参数
docker exec mysql mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -B $mysql_database > $backup_dir/$mysql_database_backup_file

time=$(date "+%Y-%m-%d %H:%M:%S")
if [ $? -ne 0 ]; then
	echo '${time} FINISH ERROR'
	echo '${time} FINISH ERROR'  >> $LOGFILE
	exit
	EOF
fi
echo "${time} FINISH BACKUP"
echo "${time} FINISH BACKUP" >> $LOGFILE
# 删除过期数据
if [ "$expire_backup_delete" == "ON" -a  "$backup_location" != "" ];then
		#删除7天以上的备份 find /home/ywtg/backup/ -type f -mtime +7 -exec rm {} ;
        `find $backup_location/ -type f -mtime +$expire_days | xargs rm -rf`
        echo ${time}' Expired backup data delete complete!'
fi
  • 注意
    报错解决:the input device is not a TTY 原因是后台linux执行的时候没有终端设备一般来说我们启动容器后要与容器进行交互操作,这是,就要加上"-it"这个参数,而在重启过重中或定时任务中,如果让脚本在后台运行,就没有可交互的终端,这就会引发如题所示错误,解决办法就是去掉“-it”这个参数
    docker exec mysql mysqldump -h m y s q l h o s t − P mysql_host -P mysqlhostPmysql_port -u m y s q l u s e r − p mysql_user -p mysqluserpmysql_password -B $mysql_database > b a c k u p d i r / backup_dir/ backupdir/mysql_database_backup_file

2、执行脚本

chmod +x mysql_backup_edevp-nacos.sh
./mysql_backup_edevp-nacos.sh

在这里插入图片描述

三、定时执行

1、crond和crontab

crond和crontab是密不可分的

  • crond

crond 是 Linux 系统下用来周期性地执行某种任务或等待处理某些事件的一个守护进程。当安装完成操作系统后,默认会安装此服务工具,并且会自动启动 crond 进程,crond 进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。

  • crontab

linux提供给使用者自己定义任务,crontab依赖crond进程,crond进程每分钟回去扫描crontab中的定时任务

查看crond进程的状态,默认是根据系统自启动的

2、新建任务

  • 00 02 * * * 每天凌晨两点执行一次
#新建定时任务命令
crontab -e

00 11 * * * cd /usr/local/mysql;sh mysql_backup_edevp-nacos.sh >> back_task.log 2>>back_task.log

3、查看任务

#查看定时任务命令
crontab -l

4、删除所有任务

crontab -r 之间删除任务,没有提示,谨慎操作

#删除所有定时任务命令
crontab -r
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
docker mysql 定时备份脚本可以通过在Docker容器运行CRON任务来实现。在提供的引用内容,并没有直接包含docker mysql定时备份脚本的详细说明。但是,我们可以根据提供的资源包含了MySQL的配置文件和一些其他脚本文件,来组合实现定时备份脚本。 下面是一种可能的实现方法: 1. 首先,进入Docker容器MySQL配置文件目录,并修改my.cnf文件来启用MySQL的binlog。在binlog记录的操作日志可以用于恢复数据库到指定的时间点。 2. 接下来,创建一个备份脚本文件,将其保存为backup.sh或者其他指定名称。该脚本文件将执行MySQL备份的操作。脚本内容大致如下: ``` #!/bin/bash # 设置备份目录 BACKUP_DIR=/path/to/backup # 设置备份文件名 BACKUP_FILE=mysql_backup_$(date +%Y%m%d%H%M%S).sql # 执行备份命令 mysqldump -u <username> -p<password> -h <host> --all-databases > $BACKUP_DIR/$BACKUP_FILE ``` 3. 接下来,创建一个定时任务脚本文件,将其保存为cron.sh或者其他指定名称。该脚本文件将设置定时任务,并执行备份脚本。脚本内容大致如下: ``` #!/bin/bash # 设置定时任务执行频率,例如每天凌晨3点执行备份 CRON_SCHEDULE="0 3 * * *" # 设置备份脚本文件路径 BACKUP_SCRIPT=/path/to/backup.sh # 添加定时任务 echo "$CRON_SCHEDULE root $BACKUP_SCRIPT" >> /etc/crontab # 重新加载cron服务 service cron reload ``` 4. 最后,通过在Docker容器运行cron.sh脚本,即可设置定时任务并执行备份操作。 ``` $ sh cron.sh ``` 需要注意的是,以上脚本内容仅为示例,具体的配置和操作需要根据实际情况进行调整。 参考资料: 提供的资源包含的Spark集群配置文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值