首先linux(ubuntu)服务器定时任务执行就有一个命令~~~~>crontab
crontab 简介:
crond 是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。
crontab工作流程:
crontab是UNIX系统下定期执行任务的触发器。用户把要定期执行的任务记录在这个文件下面,然后crond定期的去检查这个定期执行列表,有要执行的工作时便自动执行。
备份Mysql有多种方法:我这里就使用~~~>mysqldump
mysqldump简介:
mysqldump是mysql用于转存储数据库的实用程序。它主要产生一个SQL脚本,其中包含从头重新创建数据库所必需的命令CREATE TABLE INSERT等。
mysqldump工作流程:
1.调用FTWRL(flush tables with read lock),全局禁止读写
2.开启快照读,获取此时的快照(仅对innodb表起作用)
3.备份非innodb表数据(*.frm,*.myi,*.myd等)
4.非innodb表备份完毕后,释放FTWRL锁
5.逐一备份innodb表数据
6.备份完成。
我的例子需求:
定时备份数据库,每1小时备份一次,并将当前时间作为文件夹名称,我的是分布式,分了3个库,所以我就将这三个库放在该文件夹目录下面,由此,解决需求。
实例如下:
一丶创建shell脚本:
#!/bin/sh
#将当前时间赋值给变量 datetimes
datetimes=$(date --date='0 days ago' "+%Y-%m-%d-%H:%M:%S")
#创建目录
sudo mkdir -p /sqlRepository/$datetimes
#并赋予该目录所有者权限
sudo chmod 777 $datetimes
#备份数据库
#命令介绍 用户名 密码 端口 数据库名 保存的文件路径 后缀为sql
sudo mysqldump -uroot -p123456 -P3306 mtqiushui.dispatching > /sqlRepository/$datetimes/mtqiushui.dispatching.sql
sudo mysqldump -uroot -p123456 -P3306 mtqiushui.auth > /sqlRepository/$datetimes/mtqiushui.auth.sql
sudo mysqldump -uroot -p123456 -P3306 mtqiushui.resources > /sqlRepository/$datetimes/mtqiushui.resources.sql
#自此后面的注释不用管,这是我之前写的,它的作用是每1小时创建新的备份,将老的备份删除
#if [ -f "/sqlRepository/mtqiushui.dispatching.sql" ]
#then
#sudo rm -rf /sqlRepository/mtqiushui.dispatching.sql
#mysqldump -uroot -p123456 -P3306 mtqiushui.dispatching > /sqlRepository/mtqiushui.dispatching.sql
#else
#sudo mysqldump -uroot -p123456 -P3306 mtqiushui.dispatching > /sqlRepository/mtqiushui.dispatching.sql
#fi
#if [ -f "/sqlRepository/mtqiushui.auth.sql" ]
#then
#sudo rm -rf /sqlRepository/mtqiushui.auth.sql
#mysqldump -uroot -p123456 -P3306 mtqiushui.auth > /sqlRepository/mtqiushui.auth.sql
#else
#sudo mysqldump -uroot -p123456 -P3306 mtqiushui.auth > /sqlRepository/mtqiushui.auth.sql
#fi
#if [ -f "/sqlRepository/mtqiushui.resources.sql" ]
#then
#sudo rm -rf /sqlRepository/mtqiushui.resources.sql
#mysqldump -uroot -p123456 -P3306 mtqiushui.resources > /sqlRepository/mtqiushui.resources.sql
#else
#sudo mysqldump -uroot -p123456 -P3306 mtqiushui.resources > /sqlRepository/mtqiushui.resources.sql
#fi
注意:这里首先你要先执行一下这个脚本,看是否报错。
如果报错,很可能是你编译该脚本时格式出错:
解决步骤:
1.sudo vim 脚本名称
2.按键盘的 i 键--然后Esc 终端左下角 :set ff
3.如果出现 dos (就说明你的脚本格式不正确)
4.修改格式 : set ff = unix 回车之后 继续 Esc :wq 保存
5.如果出现权限问题无法保存 就在 wq后面 加上 !
如果出现synix类似问题.很可能就是你的脚本里面语法有问题,自己检查解决
直至你的脚本运行没问题,再进行后面的步骤。
二丶书写定时配置:
去你的系统 /etc/目录下找到 crontab
1.编译
sudo vim crontab
2.书写定时配置
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#我这里是每1小时执行一次
#注意语法格式 后面脚本目录必须 绝对路径
*/60 * * * * root /sqlRepository/sry.sh
#
3.定时例子
每五分钟执行 */5 * * * *
每小时执行 0 * * * *
每天执行 0 0 * * *
每周执行 0 0 * * 0
每月执行 0 0 1 * *
每年执行 0 0 1 1 *
三丶根据你的系统可选
我的是Ubuntu 16.04版本,所以我的定时运行日志文件未打开,需要手动打开
另外 我的系统没有那个 service命令插件,需要另外命令进行操作
1.先打开日志,输入命令
sudo vim /etc/rsyslog.d/50-default.conf
2.找到 #cron.* /var/log/cron.log
将前面那个注释去掉,保存并退出
3.如果系统没有service命令插件,就用我的方式重启,开启,关闭cron服务
#停止
/etc/init.d/cron stop
#开启
/etc/init.d/cron start
#重启
sudo /etc/init.d/cron restart
4.切记,如果修改了crontab这个文件,一定要重启cron服务,否则无效
5.查看定时任务日志文件
tail -f /var/log/cron.log
由此,需求解决~~~~折腾了一天半,很好!又磨练了我的性子。
明知路南偏偏行:
我从来都不会对自己失去一点点信心,因为我就是明知路南偏偏行~
如果有任何问题,欢迎指出来,一块讨论,有疑问加Q:2509647976 微:x331191249