在一次惨痛的 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" [email]l4nneret@163.com[/email] < 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 |