linux下基于crontab 实现定时备份数据库数据

543 阅读2分钟

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账号登录后,创建脚本生成的。不同的登录人员,创建脚本后对应的名称不同,这个没测试。)

image.png

命令

  1. 查看当前crontab状态
service crond status 

image.png

  1. 启动与停止
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


  1. 打开当前定时任务脚本,编辑完后wq保存,脚本自动生效。
crontab -e

image.png

  1. 定时任务说明:

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 重定向定时任务的日志文件。