dump DB脚本
一共用了两个脚本文件,mysql_back_dump.sh用来写通用的dump命令 ,需要dump哪个数据库的文件时,可以将库名当参数传入这个脚本。 另一个mysql_all_dump.sh 内容即为需要dump的几个数据库。
- 1)mysql_back_dump.sh
#!/bin/bash
#保存备份个数,删掉较早的
number=3
#将要备份的数据库,$1表示取脚本执行时,携带的第一个参数。
database_name=$1
#备份保存路径
backup_dir=/hrsy/mysqlbackup/$database_name
#日期
dd=`date +%Y-%m-%d-%H-%M-%S`
#用户名
username=root
#密码
password=123456
#如果文件夹不存在则创建
if [ ! -d $backup_dir ];
then
mkdir -p $backup_dir;
fi
#简单写法 mysqldump -u root -p123456 users > /root/mysqlbackup/users-$filename.sql
mysqldump -u$username -p$password $database_name > $backup_dir/$database_name-$dd.sql
#写创建备份日志
echo "create $backup_dir/$database_name-$dd.dupm" >> $backup_dir/log.txt
#找出需要删除的备份
delfile=`ls -l -crt $backup_dir/*.sql | awk '{print $9 }' | head -1`
#判断现在的备份数量是否大于$number
count=`ls -l -crt $backup_dir/*.sql | awk '{print $9 }' | wc -l`
if [ $count -gt $number ]
then
#删除最早生成的备份,只保留number数量的备份
rm $delfile
#写删除文件日志
echo "delete $delfile" >> $backup_dir/log.txt
fi
我的mysql装在了 docker里面,所以使用的是以下命令:
docker exec a6ac21869a48 mysqldump -u$username -p$password $database_name > $backup_dir/$database_name-$dd.sql
- 2)mysql_all_dump.sh
#!/bin/bash
/hrsy/mysqlbackup/mysql_back_dump.sh user_center;
sleep 30;
/hrsy/mysqlbackup/mysql_back_dump.sh trade_center;
sleep 30;
/hrsy/mysqlbackup/mysql_back_dump.sh xxl_job;
sleep 30;
mysql_all_dump.sh执行的时候,会分别备份user_center、trade_center、xxl_job三个数据库的所有表。
crontab
这是linux自带的定时任务。会定期执行/var/spool/cron/ 文件夹下的 root.cron脚本文件。(这是以root账号登录后,创建脚本生成的。不同的登录人员,创建脚本后对应的名称不同,这个没测试。)
命令
- 查看当前crontab状态
service crond status
- 启动与停止
centos6:
service crond start # 启动
service crond stop #停止服务
service crond restart #重启加载
service crond reload #重新加载
centos7:
systemctl start crond.service //启动服务
systemctl stop crond.service //关闭服务
systemctl restart crond.service //重启服务
systemctl reload crond.service //重新载入配置
systemctl status crond.service //查看状态
//或者
crond start
crond stop
crond restart
crond reload
crond status
- 打开当前定时任务脚本,编辑完后wq保存,脚本自动生效。
crontab -e
- 定时任务说明:
0 10 * * 1 /cc/mysqlbackup/mysql_all_dump.sh >> /cc/mysqlbackup/logs/log.text 2>&1
- 1) 0 10 * * 1 表示每周一10点0分执行。
(分,时,日,月,星期 ),
* 表示全匹配
具体定时规则,可以参照下下面这个老哥的文章
https://juejin.cn/post/6844903853972783117#comment
- 2)/cc/mysqlbackup/mysql_all_dump.sh 需要实行定时任务的脚本文件位置(我的是dump数据库文件位置),用绝对路径,不要用相对路径,避免麻烦
- 3)>> /cc/mysqlbackup/logs/log.text 2>&1 重定向定时任务的日志文件。