加入收藏 | 设为首页 | 会员中心 | 我要投稿 拼字网 - 核心网 (https://www.hexinwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

Linux环境下使用crontab实现mysql定时备份

发布时间:2022-09-21 15:00:49 所属栏目:MySql教程 来源:
导读:  在Linux服务器环境维护中,通常会mysqldump命令来备份数据库,通常命令如下

  mysqldump -uusername -ppassword --databases databasename > dumpfilename
  基于上述命令,我们可以将导出的sql文件进
  在Linux服务器环境维护中,通常会mysqldump命令来备份数据库,通常命令如下
 
  mysqldump -uusername -ppassword --databases databasename  > dumpfilename
  基于上述命令,我们可以将导出的sql文件进行压缩和管理,编写为shell脚本后,整体shell脚本如下
 
  BakDir=/opt/mysql-back/database-back
  LogFile=/opt/mysql-back/mysql_buckup.log
  Date=`date +%Y%m%d`
  Begin=`date +"%Y年%m月%d日 %H:%M:%S"`
  cd $BakDir
  DB=test
  DumpFile=$DB$Date.sql
  GZDumpFile=$DB-$Date.sql.tar.gz
  # 检查备份目录是否存在
  if [ -d "$BakDir" ]
  then  echo "[INFO]开始执行数据库备份程序....."
  else  mkdir $BakDir
  fi
  # 进入指定目录开始执行备份逻辑 -- 在使用crontab执行命令时,会因为绝对路径问题导致导出数据为null,需在mysql绝对路径下执行
  # 下面的/opt/mysql/bin为我这边的mysql安装目录的bin目录
  # 执行备份命令
  echo "[INFO] /opt/mysql/bin/mysqldump -uroot -p123456 --databases $DB  > $DumpFile" >> $LogFile
  /opt/mysql/bin/mysqldump -uroot -p123456 --databases $DB  > $DumpFile
  mv $DumpFile $BakDir
  cd $BakDir
  # 对备份数据进行压缩
  echo "[INFO] tar czvf $GZDumpFile $DumpFile" >> $LogFile
  tar czvf $GZDumpFile $DumpFile
  # 删除备份的sql文件
  echo "[INFO] rm $DumpFile" >> $LogFile
  rm $DumpFile
  # 备份 备份的sql文件到指定目录
  echo "[INFO] mv $GZDumpFile $BakDir" >> $LogFile
  mv $GZDumpFile $BakDir
  Last=`date +"%Y年%m月%d日 %H:%M:%S"`
  echo 开始:$Begin 结束:$Last $GZDumpFile 执行成功 >> $LogFile
  #清理备份,保留30天的备份
  find $BakDir/* -mtime +30 -exec rm {} \;
  echo "[INFO]备份任务执行结束....."
  上述脚本大概分为以下几个部分:
 
  1、首先我们通过mysqldump命令将数据库备份下来,按照当前日期进行命名;
 
  2、然后将数据库备份文件移动到指定位置
 
  3、对数据库备份文件进行文件压缩并删除备份文件
 
  4、清理一个月前的备份文件,任务执行结束;
 
  就这样,shell脚本就编写完成了,直接使用sh命令去执行,数据库成功备份并压缩到指定目录;
 
  接下来我们就需要使用定时任务,让定时任务去执行备份数据库的脚本;这里呢,采用crontab来指定这个定时任务,cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业。
 
  查看cron表达式的一些基本命令
 
  service crond start    //启动服务
  service crond stop     //关闭服务
  service crond restart  //重启服务
  service crond reload   //重新载入配置
  service crond status   //查看服务状态
  我们需要确保服务是开启的,如果不是,开启一下即可;查看crontab配置方式命令如下:vim /etc/crontab 可以看到如下:
 
  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
  如上,cron表达式的一些简单说明,基于这里,我们可以实现一些简单的cron表达式(稍微复杂一点的我不会...)
 
  1 3 * * * /opt/mysql-back/mysql_buckup.sh
  上面这个表达式的意思是,每天凌晨3点零1分执行脚本mysql_buckup.sh;
 
  了解了cron表达式后,我们开始添加一个cron执行计划;命令如下
 
  crontab -e
  # 按a进行编辑,输入
  1 3 * * * /opt/mysql-back/mysql_buckup.sh
  # 然后wq保存,可以通过crontab -l查看已配置的定时任务
  crontab -l
  完成crontab任务计划配置后mysql备份,我们这边只需要重新加载一下配置文件即可,命令是service crond reload;
 
  这样就可以实现定时执行任务了;下图为我这边近几日的执行结果
 
  在这个过程中,有遇到一些坑,那就是使用crontab执行定时任务,导出的sql文件内容为空;后来改成了在mysql安装的路径的bin目录下执行的,解决这个问题;另外,还可以通过配置mysql的全局环境变量,也可以解决这个问题;
 

(编辑:拼字网 - 核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!