CentOS计划任务备份数据库

数据库的自动备份是日常服务运维非常重要的操作之一。恐龙为什么灭绝,就是因为没有留下备份。

 

1、首先建立sh文件

vi /usr/sbin/mysqlbak.sh

[codesyntax lang=”php”]

cd /home/db_bak/
dateDIR=`date +"%Y%m%d%H%M%S"`
mkdir -p db_$dateDIR
for i in `/home/local/mysql/bin/mysql -uroot -proot -e "show databases"  | grep -v "Database" | grep -v "performance_schema" | grep -v "mysql" | grep -v "information_schema"`
do
  /home/local/mysql/bin/mysqldump -uroot -proot $i> /home/db_bak/db_$dateDIR/${i}_${dateDIR}.sql
done

[/codesyntax]

 

2、给sh文件权限,也可以直接给777权限

chmod +x /usr/sbin/mysqlbak.sh

 

3、设置计划任务

crontab -e

24 10 * * * root /usr/sbin/mysqlbak.sh

这里有个问题,经我测试,虚拟机下需要root用户,而在服务器上,反而不需要,加了反而不起任何作用,所以也有可能是这样写的

24 10 * * * /usr/sbin/mysqlbak.sh

至与是为什么,我还没有弄明白。

 

======诡异问题的分隔线======

有些情况当我们以记事本的方式在windows的电脑上创建了上述的.sh文件后,上传上去并不能成功,会报一些奇怪的错误。这主要是因为“文件换行格式”的问题,在windows下是PC格式,而CentOS下是Unix格式,解决方法很简单,用诸如Editplus的工具打开,改变文件称行格式即可。

 

======更加诡异问题的分隔线======

在有些更为特殊的情况下,比如不知道为什么计划任务会报错,那么系统就会调用sendmail来发送邮件,但如果并没有配置sendmail的话,那么进程就会越来越多而不释放,最后的结果就是有大量的sendmail进程占用了资源,导致系统无法正常运行了;解决办法是,在计划任务中,加上一个结束的代码 ,就可能阻止发送邮件;

1、crontab -e

2、在后面加上:&>/dev/null

如: */1 */1 * * * /www/xxxx/xxxxx/bin/php /www/xxx/xxx/xxxx/xxxxx.xxxxx 10 &>/dev/null

这样,就解决了;

 

关于这个问题的更详细说明,附上几篇文章

http://blog.csdn.net/smstong/article/details/8920808

http://www.cnblogs.com/dkblog/archive/2011/03/11/1980556.html

http://www.51ou.com/browse/xitongguanli/37981.html

发表评论