- 编写shell脚本
#! /bin/bash
# mysql数据库用户和密码
user=root
pass=123456
port=3306
# 需要定时备份的数据表列表
dbNames=(innovate_admin innovate_all training)
# 每次的备份数据以日期创建文件夹存放,同时删除过期备份
# 此处以保留1个月的备份数据为例
DATE=`date -d "now" +%Y%m%d%H`
ODATE=`date -d "-1 month" +%Y%m%d%H`
newdir=/home/backup/$DATE
olddir=/home/backup/$ODATE
welcome_msg="Welcome to use MySQL backup tools! -- by luo"
# 判断mysql实例是否正常运行
mysql_ps=`ps -ef |grep mysql |wc -l`
mysql_listen=`netstat -an |grep LISTEN |grep $port|wc -l`
if [ [$mysql_ps == 0] -o [$mysql_listen == 0] ]; then
echo "ERROR:MySQL is not running! backup stop!"
exit
else
echo $welcome_msg
fi
# 删除过期备份数据
if [ -d $olddir ];
then
rm -rf $olddir
echo "Expired backup data delete complete!"
fi
# 创建新备份文件夹
mkdir $newdir
# 对备份数据库列表的所有数据库备份
for dbName in ${dbNames[*]}
do
dumpFile=$dbName-$DATE.sql.gz
mysqldump -u$user -p$pass $dbName | gzip > $newdir/$dumpFile
# 如mysql运行在容器中则用如下命令替换上一行
docker exec -i {docker_name} mysqldump -u$user -p$pass $dbName | gzip > $newdir/$dumpFile
done
- 新增调度任务,可用两种方法:
1)在命令行输入:crontab -e
然后添加相应的任务,wq存盘退出。
2)直接编辑/etc/crontab 文件,即vi /etc/crontab
,添加相应的任务。
crontab -e
配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务
我这里直接crontab -e
并添加如下命令(# 每天凌晨1点执行,同时输出日志)
0 1 * * * cd /home/mysql/;sh mysql_backup.sh >> log.txt 2>&1
检查crontab是否开机自启动:
systemctl is-enabled crond
设置开机自动启动crond服务:chkconfig crond on
关闭开机自动启动crond服务:chkconfig crond off
ps:docker中-i以及-t的作用: