|
      
- 帖子
- 2379
- 主题
- 17
- 精华
- 8
- 积分
- 4933
- 疯狂金币
- 1875
- 疯狂水晶
- 11
- 在线时间
- 759 小时
  
|
由于系统使用到了MySQL数据库,所以每天的工作,就设计到了MySQL数据库的备份问题.但如果每天手工来做MySQL数据库的定时备份,工作量不说,时间还不准确,有时候还会忘记做备份,哪一天忙起来忘记了,数据库出了问题,就不好搞了.所以,将MySQL数据库的备份,做成系统定时执行的,就很有必要.
一般情况下,我们手工备份MySQL数据库,会使用下面的命令:
- mysqldump --opt --add-locks -u root --password=xxxx db_name> x:/db_backup/db_name.sql
复制代码
这是我们在命令行模式下备份数据库的常用命令.但现在要让系统自动执行,就不能这样了.
1.在windows下定时备份MySQL数据库.
使用editplus建立 db_bak.bat文件,也就是windows下常用的批处理文件.
内容为:
- @echo
- 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)
- <?xml version="1.0" encoding="UTF-8"?>
- <project name="xxxx" basedir=".">
- <property name="db-bak-dir" value="x:/db_backup"/>
- <target name="db-bak">
- <exec dir="${basedir}" executable="cmd.exe">
- <arg line="/c db-bak.bat" />
- </exec>
- </target>
- <target name="bak" depends="db-bak">
- <tstamp prefix="source.">
- <format property="TimeSign" pattern="yyyy-MM-dd HH.mm.ss" />
- </tstamp>
- <mkdir dir="${db-bak-dir}/${source.TimeSign}"/>
- <zip destfile="${db-bak-dir}/${source.TimeSign}/db-bak.zip">
- <zipfileset dir="${db-bak-dir}" includes="*.sql"/>
- </zip>
- <antcall target="clean"/>
- </target>
- <target name="clean">
- <delete file="${db-bak-dir}/db_name.sql"/>
- </target>
- </project>
复制代码
上面的ant配置文件的意思,就是说,让ant调用windows的MySQL数据库备份.bat文件并执行.
对数据库进行备份,然后,以当前日期,作为压缩文件名,对MySQL数据库备份文件进行压缩.
那既然我们是让 ant来调用了MySQL数据库备份命令文件,就没有理由再让windows 定时任务调用 MySQL数据库备份命令文件了,所以,我们对window的定时任务做一修改,让window定时执行ant脚本,再写一个.bat文件.
内容如下:
- @echo
- ant -f x:/db-target.xml bak
- 文件命名为:db-target.bat.
复制代码
以上三个文件在同一文件夹下.接下来就是将文件传输到其它服务器了,由于个人喜欢ant ,所以,在这里,还是使用ant 脚本来实现文件的远程传输,在这里,需要使用linux ssh命令,所以,需要一个额外的.jar包,传输不在本文讨论之列,下次再行讨论,
在linux下的文件传输,会很方便,给出一个小的示例.
1.压缩备份文件:
- tar -zcvf /db_bak/db_name.tar.gz /db_bak/db_name.sql
复制代码
2.文件传输:
- scp /db_bak/db_name.tar.gz ip:port /dir/xxx
复制代码
这样,就实现了MySQL数据库的完没备份
[ 本帖最后由 heyitang 于 2010-4-22 08:35 编辑 ] |
|