scribble

守望的麦子

About Projects Tool Guestbook

29 Dec 2007
实现MySQL数据库的简单自动异地备份

免费的数据库软件mySQL数据库简单、高效、灵活,而且它的OpenSource的特性使得其在各平台上都能被广泛支持。所以用户数量也越来越大。

不管是什么数据库,备份总是一件很烦人的事。对于一个软件或者系统来说,数据才是真正的生命。程序被破坏了,或者系统中的软件丢失了,最多重新安装一下就可以了,但是如果数据丢了,那就再也找不回来了。

MySQL的备份,其实很简单。手动的备份可以使用mysqldump或者phpmyadmin等工具来实现,如何让系统自动备份呢?下面总结一下。

  1. Master-Slave 模式。MySQL从4.0开始就提供了类似Oracle的Data Guard的功能——Master-Slave模式。一个数据库作为Master 数据库提供服务,所有的更新都将通过Binary Log同步到Slave DB。

所有的设定,都在my.cnf中设定就可以实现了。

在Master DB的my.cnf的mysqld标签段添加

打开Binary log

log-bin
#服务器号
server-id = 1

在Slave DB的my.cnf的mysqld标签段添加

server-id = 2
master-host = master-port = master-user = master-password = #打开Binary log,对于Slave DB是可选项,但是建议打开 log-bin

这样就ok了,Master DB的数据就会被同步到Slave DB(有一个Binary Log的时差)

2.备份的远程传递
可以使用mysqldump定时生成备份文件,然后传送到其他服务器

2-a,UNIX 使用脚本
很简单,例如要每小时备份一次
在cronjob中设置一个shell脚本,
脚本的内容如下:

#

# Script for Backup Database#
#####################################
# Written by : WellsWang#
# Date : 2004-09-03 #
#####################################

/usr/local/bin/mysqldump -C 数据库名 -r database.sql -u 用户名 -p密码
/bin/rm -rf database.sql.gz
/usr/bin/gzip -9 database.sql

/usr/bin/ftp -i -n FTP服务器名 « EOF user 用户名 密码 bin put database.sql.gz bye 使用类似的脚本,就能定时传送备份的文件了:) 上面的脚本适用于备份服务器打开FTP的情况。 2-b, Windows使用同步软件 在服务器上同样使用脚本定时通过mysqldump备份数据库, 脚本如下: REM ##################################### REM # Script for Backup Database# REM ##################################### REM # Written by : WellsWang# REM # Date : 2004-09-03 # REM ##################################### c:mysqklbinmysqldump -C 数据库名 -r database.sql -u 用户名 -p密码 REM 如果你有gzip for windows,同样可以使用Gzip压缩备份出的数据,以减少网络传送时间 REM del database.sql.gz REM gzip -9 database.sql 很明显,脚本仅缺少了gzip压缩和FTP传送,这里我们使用软件来完成传送。 推荐使用Super Flexible File Synchronizer这个软件,这个软件可以图形化的设定Schedule来进行当前服务器和备份服务器之间的文件同步。可以通过Windows网络共享或者FTP来实现同步。 因此,这个方案适用于备份服务器不打开FTP服务的情况 FROM: http://www.elaguan.net/show-324-1.html

Til next time,
Jason at 00:00

scribble

About Projects Tool Guestbook