辛辛苦苦的写blog, 不管写得如何,都是自己的心血。要是不小心丢了,那就郁闷了。前几天,我就说过使用电脑的关键就是备份,备份,再备份。 简单的通过复制来备份,当真的出现问题的时候,也会有很多麻烦。假设,你总是只有一份备份,是当前的最新备份。可是你发现,你曾经误写了其中一个或多个文 件,你需要找回你前面某天的文件,这时候这个文件,无论是在工作目录,还是在备份中都已经被修改了。所以,安全的备份应该是incremental的备 份。你要有办法恢复到原来某天的状态。当然,从实践上来说,保持过去一周的备份,基本上就足够了。另外,如果你是在作一个project, 光是备份是不够的,你需要做source version control,比如用cvs或者subversion等 等。靠简单的备份来管理一个project而不使用version control是极度危险的。如果连备份都不做,那就是愚蠢的。理想的做法,是用version control来管理project, 然后在对version control的respository进行incremental的备份。
扯远了。今天来介绍一个备份 MySQL数据库的简单方法。我主要用这个方法来备份我的WordPress Blog和Gallery的后台MySQL数据库。如果只是简单的备份,用户可以通过mysqldump来获取当前的数据库备份。而WordPress也 提供了一个备份插件,相当于mysqldump的前台。不过,如我前面所说,这样的备份,是意义不大的(不是没有意义),而且不够自动化,每次都需要人为 操作。我用的是如下方法
- 下载一个叫做Automatic MySQL Backup的script。这个script将是我用来备份的核心工具。我将它重命名为wp-back.sh,放在/home/zeal/tools/下面 (zeal是我的用户名,/home/zeal是我的home目录)
- 配 置:用任何你喜欢的编辑器,编辑这个script, 在文件的开头部分,提供一些必须的参数,比如数据库名称(DBNAMES),数据库用户名(USERNAME),密码(PASSWORD),还有host name (DBHOST)。这就完成了绝大部分的基本配置。然后指定备份存放的路径,我用的是/home/zeal/backups/wp。下面还有一点有 用的配置,就是让这个script在执行的时候,发一封email到你指定的信箱。发送什么内容呢?这可以通过指定MAILCONTENT参数来决定。我 指定的是”files”,这样在这个脚本执行的时候,它会发送一封email给我, 这封email的正文是执行脚本的log, 然后附带有一个attachment,是你要备份的数据库文件。也就是说,我一执行这个脚本,我首先得到一个在本地文件系统的备份,同时我也得到了一个在 我email信箱的备份。好了,gmail的大信箱,这个时候就有用武之地了。:P
- 将 脚本的权限改我可执行,然后手工执行一次脚本。这时候,第一次执行的脚本在我的/home/zeal/backups/wp下面产生了3个目录: daily, weekly, monthly。没错,这个脚本自动完成这些工作。自动提供了daily,weekly和monthly的backup。同时,我发现我的email信箱 也收到了备份。Great!
- 手工执行脚本,太累太麻烦。我们需要自动执行。我利用的是unix/linux的cron功能。用crontab来编辑我需要让系统替我自动执行 的任务。在shell 下用命令执行“crontab -e”,一个默认编辑器会被唤起(由环境变量EDITOR控制),如果这是第一次加cron job,那么应该是一个空文件。在这个空文件里写入一行”45 8 * * * /home/zeal/tools/wp-backup.sh”。含义是每天早上8点45分执行wp-backup.sh这个脚本。(具体格式含 义,man crontab)。保存,退出。这时候这个cron job就会被载入系统的daemon。如果你想执行多个cron job,每个job都需要写一行描述。你可以用”crontab -l”来看你已设定的cron job。
好了,大功告成。从今以后,我将有daily的backup, 既有本地的也有远程的。在硬盘空间允许的情况下,我可以轻易的找回从今以后任何一天的mysql数据库备份, 想恢复到那一天的就能恢复到。除非我特别倒霉,否则,我很难丢失我的MySQL数据库的内容。
Tags:backup Blog mysql