mysql容器定时备份

需求

通过shell脚本定期备份docker容器部署的mysql

编写脚本

#!/bin/bash

#Shell Command For Backup MySQL Database Everyday Automatically By Crontab
#Author : HASIK
#Date : 2021-07-21
#将以下代码保存到: /usr/sbin/DataBackup 
#文件名随意,只要不跟系统原有的命令同名即可;
#为脚本添加可执行权限: sudo chmod +x /usr/sbin/DataBackup/backup.sh 
#执行脚本: sudo sh /usr/sbin/DataBackup/backup.sh 
#如果需要定时执行备份命令的,只需将下面这段代码放到crontab 文件(sudo vim /etc/crontab)中去就可以了: 
#01 3 * * * root run-parts /usr/sbin/DataBackup #它代表着将于每天3点执行DataBackup文件下的所有脚本

#配置参数
source /etc/profile #加载环境变量
HOST=127.0.0.1 #数据库IP
PORT=3306 #数据库端口
CONTAINER=zhao #docker容器名称/容器id
USER=root #数据库用户名
PASSWORD=123 #数据库用户密码
DATABASE=cloud_service #数据库名称
WEBMASTER=YASUO@qq.com #管理员邮箱地址,用以发送备份失败消息提醒
BACKUP_DIR=/data/mysqlBackup/ #备份文件存储路径
LOGFILE=/data/mysqlBackup/logs/data_backup.log #日记文件路径
DATE=`date '+%Y%m%d-%H%M'` #日期格式(作为文件名)
DUMPFILE=$DATE.sql #备份文件名
ARCHIVE=$DATE.sql.tgz #压缩文件名
#OPTIONS="-u$USER -p$PASSWORD –opt –extended-insert=false –triggers=false -R –hex-blob –flush-logs –delete-master-logs -B $DATABASE" #mysqldump 参数 详情见帮助 mysqldump -help
OPTIONS="-h$HOST -P$PORT -u$USER -p$PASSWORD $DATABASE"
#判断备份文件存储目录是否存在,否则创建该目录
if [ ! -d $BACKUP_DIR ] ;
then
mkdir -p "$BACKUP_DIR"
fi

#开始备份之前,将备份信息头写入日记文件
echo " " >> $LOGFILE
echo " " >> $LOGFILE
echo "———————————————–" >> $LOGFILE
echo "BACKUP DATE:" $(date +"%y-%m-%d %H:%M:%S") >> $LOGFILE
echo "———————————————– " >> $LOGFILE

#切换至备份目录
cd $BACKUP_DIR
#使用mysqldump 命令备份制定数据库,并以格式化的时间戳命名备份文件
docker exec $CONTAINER mysqldump $OPTIONS > $DUMPFILE
#判断数据库备份是否成功
if [[ $? == 0 ]]; then
#创建备份文件的压缩包
tar czvf $ARCHIVE $DUMPFILE >> $LOGFILE 2>&1
#输入备份成功的消息到日记文件
echo "[$ARCHIVE] Backup Successful!" >> $LOGFILE
#删除原始备份文件,只需保 留数据库备份文件的压缩包即可
rm -f $DUMPFILE
else
echo "Database Backup Fail!" >> $LOGFILE

#备份失败后向网站管理者发送邮件提醒,需要mailutils或者类似终端下发送邮件工具的支持
#mail -s "Database:$DATABASE Daily Backup Fail" $WEBMASTER
fi
#输出备份过程结束的提醒消息
echo "Backup Process Done"

注意:定时任务执行docker exec -it 要去掉 -it 否则脚本执行会失败

定时任务crontab

编辑 /etc/crontab 文件在文件末尾追加任务

*/1 * * * * root run-parts /usr/sbin/DataBackup

参数说明:

*/1 * * * * : 每分钟执行一次
root : 执行用户
run-parts /usr/sbin/DataBackup : 执行该文件下的所有脚本

注意run-parts这个参数,如果去掉这个参数的话,后面写要运行的某个脚本名,而不是文件夹名了。

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
#每分钟执行/usr/sbin/DataBackup文件下的所有shell脚本
*/1 * * * * root run-parts /usr/sbin/DataBackup
#每分钟执行/usr/sbin/DataBackup/backup.sh脚本
#*/1 * * * * root /usr/sbin/DataBackup/backup.sh

编辑/var/spool/cron下的用户文件
以root用户为例
在/var/spool/cron文件下新建root文件夹
并在root文件中写入定时任务,每分钟执行

*/1 * * * * sh /usr/sbin/DataBackup/backup.sh

touch /var/spool/cron/root
#使用vi命令追加任务,cron表达式、执行命令行
*/1 * * * * sh /usr/sbin/DataBackup/backup.sh

注意:定时任务不会加载系统变量、要么在脚本加上一句source /etc/profile #加载环境变量要么命令使用绝对路径
补充:脚本编写头部添加如下内容加载系统变量更保险

#!/bin/bash
. /etc/profile
. ~/.bash_profile    #某些系统上没有这个文件,不过加上也没关系

验证

在这里插入图片描述

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、付费专栏及课程。

余额充值