曲径通幽论坛

标题: 定时备份数据库并发送往邮箱 [打印本页]

作者: beyes    时间: 2011-10-30 16:41
标题: 定时备份数据库并发送往邮箱
在一次惨痛的 VPS 故障中,我丢失了一个 2 年的博客,数据全毁(正好恰逢自己的 PC 机在更换硬盘之际),原因正是没有及时将数据库及时备份到一个安全的地方。

下面这个简单的脚本和 crontab 配合便可实现简单的自动备份数据库并发往指定的邮箱中,这个邮箱最好是可以接收大附件的,否则你还需要将大文件分割为多个小文件再添加到附件中,分割文件使用 split 命令,组成多个分割文件可使用 cat 命令。

脚本如下:
[Bash shell] 纯文本查看 复制代码


#!/bin/sh
time=`date +%m%d`      #此处为了标识备份文件的时间,这里每天备份一次


mysqldump -uroot -p123456 pw87 > ~/pw87$time.sql      #比如这里备份 Mysql 里一个名为 pw87 的数据库


#可以进一步将生成的 SQL 文件打包压缩,如 tar 包,gzip 压缩的 gz 包:tar -czvp -f yourname.tar.gz pw87$time.sql
#选项 z 的意思是用 gzip 来压缩,选项 p 是保持文件的原先属性


echo "backup time is $time" > pw$time.txt     #邮件的内容,随便写点


mutt -s "pw87$time" l4nneret@163.com < pw$time.txt -a /root/pw87$time.sql      # mutt 是一个好用的命令行邮件客户端

脚本可以放在任意一个地方。接着用 crontab -e 命令设置一下定时执行脚本的时间,比如:
30 3 * * * (/var/www/html/pw87/backsql.sh)
上面命令的意思是在每天的凌晨 3 点 30 分时执行上面的那个备份脚本。

如果要备份整个数据库的话可以使用命令:mysqldump -u root -p123456 --all-databases > backup.sql

如果哪天需要还原数据库了可以使用命令:mysql -u root -p123456 pw87 < backup.sql

如果什么时候不想要这个计划任务了,就执行 crontab -r 来将其清除,如果有多个计划任务可执行 crontab -l 命令来查看。

mutt 命令可参考:http://www.groad.net/bbs/read.php?tid-5114.html

split命令可参考:http://www.groad.net/bbs/read.php?tid-2682.html




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2