定时备份mysql数据库

以mysql为例。

1.备份网站数据库
mysqldump -root(数据库用户名) -pwd(数据库密码) --default-character-set=utf8 dev(数据库名) > dev_bak.sql(保存的数据库文件格式)  

可以写成sh文件

#Funciont: Backup website and mysql database
#IMPORTANT!!!Please Setting the following Values!
######~Set MySQL UserName and password~######
MYSQL_UserName=root  
MYSQL_PassWord=xxxx  
######~Set MySQL Database you want to backup~######
Backup_Database_Name=ghost-blog  
#####~Set date
RQ=`date +%Y%m%d`  
#Values Setting END!
/usr/bin/mysqldump -u$MYSQL_UserName -p$MYSQL_PassWord $Backup_Database_Name|gzip > /opt/backup/db_$Backup_Database_Name-$RQ.gz

或者

/usr/bin/mysqldump --defaults-extra-file=/etc/my.cnf ghost-blog-new | gzip > /opt/backup/db_ghost-blog-new-$(date +%Y%m%d_%H%M%S).sql.gz

后者需要在 /etc/my.cnf 文件中: [client] 部分添加脚本(指定用户、密码):

host=localhost  
user=数据库用户  
password='数据库密码'  
2.还原备份的数据库
mysql -root -pwd dev < dev_bak.sql  
3.设置定时备份

打开crontab -e

0 3 * * * /opt/sherlock/bin/backup_db.sh  

添加上面的定时脚本,每天凌晨3点进行执行备份。我们可以先执行脚本看看是否可以正常进行,如果可以正常进行在设置定时。如果我们的网站数据不大,更新频率不是太多,我们手工备份也可以,没有必要每天的都备份。

设置/修改完之后记得重启下 crond 服务

service crond restart  

加入开机启动

echo "service crond restart" >> /etc/rc.d/rc.local  
4.crontab命令详解

1).命令格式:

crontab [-u user] file  
crontab [-u user] [ -e | -l | -r ]  

2).命令功能:
通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常设合周期性的日志分析或数据备份等工作。

3).命令参数:
-u user:用来设定某个用户的crontab服务,例如,“-u ixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。

file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。

-e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。

-l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。

-r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。

-i:在删除用户的crontab文件时给确认提示。

4). 列出crontab文件

$ crontab -l

可以使用这种方法在$HOME目录中对crontab文件做一备份:

$ crontab -l > $HOME/mycron

这样,一旦不小心误删了crontab文件,可以迅速恢复。

5). 编辑crontab文件

$ crontab -e

6).使用实例
实例1:每1分钟执行一次command

* * * * * command

实例2:每小时的第3和第15分钟执行

3,15 * * * * command  

实例3:在上午8点到11点的第3和第15分钟执行

3,15 8-11 * * * command  

实例4:每隔两天的上午8点到11点的第3和第15分钟执行

3,15 8-11 */2 * * command  

实例5:每个星期一的上午8点到11点的第3和第15分钟执行

3,15 8-11 * * 1 command  

实例6:每晚的21:30重启smb

30 21 * * * /etc/init.d/smb restart  

实例7:每月1、10、22日的4 : 45重启smb

45 4 1,10,22 * * /etc/init.d/smb restart  

实例8:每周六、周日的1 : 10重启smb

10 1 * * 6,0 /etc/init.d/smb restart  

实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb

0,30 18-23 * * * /etc/init.d/smb restart  

实例10:每星期六的晚上11 : 00 pm重启smb

0 23 * * 6 /etc/init.d/smb restart  

实例11:每一小时重启smb

* */1 * * * /etc/init.d/smb restart

实例12:晚上11点到早上7点之间,每隔一小时重启smb

* 23-7/1 * * * /etc/init.d/smb restart

实例13:每月的4号与每周一到周三的11点重启smb

0 11 4 * mon-wed /etc/init.d/smb restart  

实例14:一月一号的4点重启smb

0 4 1 jan * /etc/init.d/smb restart  

实例15:每小时执行/etc/cron.hourly目录内的脚本

01 * * * * root run-parts /etc/cron.hourly  

说明: run-parts这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是目录名了