返回列表 发帖

[数据库] MySQL数据库定时备份[转]

由于系统使用到了MySQL数据库,所以每天的工作,就设计到了MySQL数据库的备份问题.但如果每天手工来做MySQL数据库的定时备份,工作量不说,时间还不准确,有时候还会忘记做备份,哪一天忙起来忘记了,数据库出了问题,就不好搞了.所以,将MySQL数据库的备份,做成系统定时执行的,就很有必要.
一般情况下,我们手工备份MySQL数据库,会使用下面的命令:
  1. mysqldump --opt --add-locks -u root --password=xxxx db_name> x:/db_backup/db_name.sql
复制代码

这是我们在命令行模式下备份数据库的常用命令.但现在要让系统自动执行,就不能这样了.
1.在windows下定时备份MySQL数据库.
使用editplus建立 db_bak.bat文件,也就是windows下常用的批处理文件.
内容为:
  1. @echo
  2. mysqldump --opt --add-locks -u root --password=xxxx db_name> x:/db_backup/db_name.sql
复制代码

然后保存,接下来在window 的定时任务中,定义windows的定时任务,每天备份多少次都可以.
2.在linux下定时备份MySQL数据库.
命令跟上面的类似,不过这里要使用linux下的定时任务了.
说到这里,可能大伙都感觉数据库的备份工作已经完成了,其实不然,我们备份数据库,不单要应对数据库坏掉或被误删除的问题,同时,还需要应对服务器损坏,硬盘损坏或是服务器遭遇未可预知的灾难的问题.
所以,我们就不能把数据库仅仅备份到本机,我们同时,需要将备份好的数据库,同步传输到其它至少一台服务器上,这样,才可以保证我们数据的绝对安全,在进行数据传输之前,为了减少数据的传输量,提高传输速度,需要对数据库备份文件进行压缩.在linux下,可以使用系统自带的命令进行压缩,但在windows下,我不太喜欢使用window自带的命令进行压缩.在这里,我借助ant对MySQL数据库备份文件进行压缩,ant的build.xml 文件定义如下(文件命名为:db_target.xml)
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project name="xxxx" basedir=".">
  3. <property name="db-bak-dir" value="x:/db_backup"/>
  4. <target name="db-bak">
  5.   <exec dir="${basedir}" executable="cmd.exe">
  6.    <arg line="/c db-bak.bat" />
  7.   </exec>
  8. </target>
  9. <target name="bak" depends="db-bak">
  10.      <tstamp prefix="source.">
  11.    <format property="TimeSign" pattern="yyyy-MM-dd HH.mm.ss" />
  12.     </tstamp>
  13.     <mkdir dir="${db-bak-dir}/${source.TimeSign}"/>
  14.     <zip destfile="${db-bak-dir}/${source.TimeSign}/db-bak.zip">
  15.       <zipfileset dir="${db-bak-dir}" includes="*.sql"/>
  16.        </zip>
  17.        <antcall target="clean"/>
  18. </target>
  19. <target name="clean">
  20.     <delete file="${db-bak-dir}/db_name.sql"/>
  21. </target>
  22. </project>
复制代码

上面的ant配置文件的意思,就是说,让ant调用windows的MySQL数据库备份.bat文件并执行.
对数据库进行备份,然后,以当前日期,作为压缩文件名,对MySQL数据库备份文件进行压缩.
那既然我们是让 ant来调用了MySQL数据库备份命令文件,就没有理由再让windows 定时任务调用 MySQL数据库备份命令文件了,所以,我们对window的定时任务做一修改,让window定时执行ant脚本,再写一个.bat文件.
内容如下:
  1. @echo
  2. ant -f x:/db-target.xml bak
  3. 文件命名为:db-target.bat.
复制代码

以上三个文件在同一文件夹下.接下来就是将文件传输到其它服务器了,由于个人喜欢ant ,所以,在这里,还是使用ant 脚本来实现文件的远程传输,在这里,需要使用linux ssh命令,所以,需要一个额外的.jar包,传输不在本文讨论之列,下次再行讨论,
linux下的文件传输,会很方便,给出一个小的示例.
1.压缩备份文件:
  1. tar -zcvf /db_bak/db_name.tar.gz /db_bak/db_name.sql
复制代码

2.文件传输:
  1. scp /db_bak/db_name.tar.gz ip:port /dir/xxx
复制代码

这样,就实现了MySQL数据库的完没备份

[ 本帖最后由 heyitang 于 2010-4-22 08:35 编辑 ]
倚楼听风雨,笑看江湖路。。。

返回列表