作项目有时候要备份数据库,手动备份太麻烦,因此找了一下定时备份数据库的方法mysql
Linux里有一个 crontab 命令被用来提交和管理用户的须要周期性执行的任务,就像Windows里的定时任务同样,用这个就能够设置定时任务去执行相应的操做。sql
因此,咱们经过建立一个shell文件,把执行的命令放在里面,而后再用crontab去定时执行就能够达到咱们想要的效果了。shell
接下来咱们一步一步作。数据库
Linux系统里,home文件夹通常空间比较充足,能够用来存放咱们的备份文件bash
cd /home
mkdir backup
假设为 bk_mydatabase.sh测试
vi bk_mydatabase.sh
注意:-u和-p后面接上你的mysql用户名和密码,不要带空格,数据库名就填你要备份的数据库名称spa
这里备份的名称就是你的 数据库名称_备份的时间.sql ,方便查看是何时备份的code
crontab执行命令必须加上命令的全路径写全,好比我就加上了 “/usr/local/mysql/bin/” ,这里是我踩过的坑,没加全路径导出来的文件都是0KB,踩过就记住了crontab
#!/bin/bash /usr/local/mysql/bin/mysqldump -u用户名 -p密码 数据库名 > /home/backup/数据库名_$(date +%Y%m%d_%H%M%S).sql
若是你要备份成压缩文件的话,能够写成下面这个命令ip
#!/bin/bash /usr/local/mysql/bin/mysqldump -u用户名 -p密码 数据库名 | gzip > /home/backup/数据库名_$(date +%Y%m%d_%H%M%S).sql.gz
添加好后记得保存
chmod u+x bk_数据库名.sh
./bk_数据库名.sh
执行后去backup文件夹里看看,是否有导出来的文件
先看看crontab是否安装了,通常都是安装好的,若是没安装,就先安装一下呗,安装命令以下(已安装的就不用管了)
安装: yum -y install vixie-cron yum -y install crontabs CentOS中添加开机自动启动: chkconfig --level 345 crond on
输入如下命令进入crontab任务设置
crontab -e
在里面添加如下命令
59 23 * * * /home/bk_数据库名.sh
保存后,你的shell文件就会被定时执行了
解释一下刚才添加的命令
“ 59 23 * * * ”是crontab的时间规则,即执行周期,我写的这句解析后就是天天的 23:59 执行一次 home目录下的那个bk_数据库名.sh文件
执行周期能够按照本身的需求来设定
到此,咱们就完成了天天23:59备份一次数据库到咱们的home下的backup文件夹中的操做
它的格式共分为六个字段,前五个字段是时间设定段,第六段是要执行的命令段,格式以下:
minute hour day month week command 按顺序分别为:分 时 日 月 周
minute: 表示分钟,能够是从0到59之间的任意整数。
hour:表示小时,能够是从0到23之间的任意整数。
day:表示日期,能够是从1到31之间的任意整数。
month:表示月份,能够是从1到12之间的任意整数。
week:表示星期几,能够是从0到7之间的任意整数,这里的0或7表明星期日。
command:表示要执行的命令,能够是系统命令,也能够是本身编写的脚本文件。
在以上的各个字段中,还可使用如下几个特殊字符:
星号(*):表明全部可能的值,例如month字段若是是星号,则表示在知足其它字段的条件后每月都执行该命令操做。
逗号(,):用逗号隔开的值指定一个列表范围,例如,“1,3,5,7”。
中杠(-):用整数之间的中杠表示一个整数范围,例如“3-7”表示“3,4,5,6,7”。
正斜线(/):用正斜线指定时间的间隔频率,例如“0-23/5”表示每五小时执行一次。
同时正斜线能够和星号一块儿使用,例如*/1,若是用在minute字段,表示每分钟执行一次。
举几个栗子:
1. 每分钟执行一次home下的set.sh命令
* * * * * /home/set.sh
2. 每一个星期日的上午6点到10点的第10和第30分钟执行一次home下的set.sh命令
10,30 6-10 * * 0 /home/set.sh
3. 每周一,周三,周五,周日的上午6点到10点的第10和第30分钟执行一次home下的set.sh命令
10,30 6-10 * 1,3,5,7 0 /home/set.sh