搞定MySQL双机备份
为了数据的安全,客户有两台机器作为互相备份,当一台机器出现故障时,自 动切换到另外一台服务器。大部分的软件我们是通过LifeKeeper来实现的,但是MySQL的双机备份在LifeKeeper里没有实现,看来,只有 我手动来实现MySQL的双机备份了哦。
先说说环境

QUOTE:

操作系 统:windows 2003 server
MySQL版本:v4.1
互备数据库:bbs
Server1:10.2.2.3
Server2:10.2.2.4

其实,MySQL的双机备份有一个很简单的第三方软件可以实现,那就是SQLyog ( http://www.webyog.com/ ),他有一个功能叫 sja(SQLyog Job Agent , http://www.webyog.com/sqlyog/sja.html ),可以轻松实现,但 是却有一个不足,那就是MySQL表里必须有一个primary key,如果没有,则此表不能用sja来实现。我查看了一下,我们需要互备的数据中就有两三个表没有primary key,看来要放弃这个方法了。



第二种方法就是用 MySQL自身的Replication机制来实现了。据说MySQL 3.23以上的版本都有此功能。下面来说说具体的步骤。



1)先在每台服务器上各 安装好mysql,保证正常运行,在Mysql的安装目录里各建立一个目录logs,如F:Mysql4.1logs,供后面步骤使用。

2)将要互备的初始化数 据在每台服务器上各导入一份,且保持两台服务器要互备的初始化数据一致。这个步骤很重要。

3)在每个server 上各增加一个备份用户,且赋予一定的权限。

3.1)在Server1上

QUOTE:

GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO backup@'10.2.2.4' IDENTIFIED BY '123456';

之后立即在Server2上用如下命令来测试backup用户是否能连接上Server1

QUOTE:

F:Mysql4.1binmysql.exe -h10.2.2.3 -ubackup -p123456

如果能连接上,表明互备帐户增加OK!

3.2)重复上述动作,在Server2上

QUOTE:

GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO backup@'10.2.2.3' IDENTIFIED BY '123456';

之后立即在Server1上用如下命令来测试backup用户是否能连接 上Server2

QUOTE:

F:Mysql4.1binmysql.exe -h10.2.2.4 -ubackup -p123456

如果能连接上,表明互备帐户增加OK!

4)修改mysql配置 文件,增加互备参数配置。

4.1)停掉server1的mysql,修改my.ini,在[mysqld]区域内增加如下信息:

QUOTE:

#####################################################
#MySQL的双机备 份,by longware,2006-05-26

server-id=1 
 log-bin=F:/MySQL4.1/logs/sync 
 
 master-host=10.2.2.4 
 master-user=backup 
 master-password=123456 
 master-port=3306 
 master-connect-retry=60 
 replicate-do-db=bbs


#####################################################

保存并关闭my.ini文件,重启mysql服务,观察logs目录下面有没有类似sync.000001、sync.index的 文件生成,观察data目录里有没有*.info、*-relay-bin.000001、*-relay-bin.index的文件生成,如果两个目录 都有,说明互备参数配置正确。

4.2)停掉server2的mysql,修改my.ini,在[mysqld]区域内增加如下信息:

QUOTE:

#####################################################
#MySQL的双机备 份,by longware,2006-05-26

server-id=2 
 log-bin=F:/MySQL4.1/logs/sync 
 
 master-host=10.2.2.3 
 master-user=backup 
 master-password=123456 
 master-port=3306 
 master-connect-retry=60 
 replicate-do-db=bbs


#####################################################

保存并关闭my.ini文件,重启mysql服务,观察logs目录下面有没有类似sync.000001、sync.index的 文件生成,观察data目录里有没有*.info、*-relay-bin.000001、*-relay-bin.index的文件生成,如果两个目录 都有,说明互备参数配置正确。

4.3)如果没有看到上步中说的文件,说明配置文件没有起作用,请检查mysql配置文件的位置,很可能在c:windows下面,也可能 在C:Documents and SettingsAdministratorwindows下面,还可能在F:Mysql4.1下面,具体要看您的mysql服务的启动参数,您可以去 windows的“开始-控制面板-管理工具-服务”中,双击mysql的服务名称,查看”可执行文件的路径“项的值,如果是

QUOTE:

F:/mysql4.1/bin/mysqld-nt.exe

则my.ini可能就在 c:windows下面,如果是

QUOTE:

"F:MySQL4.1binmysqld-nt" --defaults-file="F:MySQL4.1my.ini" MySQL

则my.ini就在F:MySQL4.1下面。我的一个朋友就 因为没有搞清楚my.ini的位置,折腾了大半天也每搞定。

5)分别停掉两台机器的mysql服务,再次确保两台机器的要互备的初始化数据一致,删除logs下面的文 件,删除data下面的非目录文件,确保网络畅通,再分别启动server1和server2的mysql服务,mysql双机互备成功了。

6)互备测试,在 server1里的bbs数据库里建一张表,插几条数据,再登陆到server2里,看看数据是否存在,存在表明OK。

7)注意:两台机器的 mysql互备的初始化数据要相同。如果要单向备份,将其中的一台服务器的my.ini的互备配置注释掉重启即可。

8)官方参考资料:
http://dev.mysql.com/doc/refman/5.1/en/ndbcluster.html
http://dev.mysql.com/doc/refman/ ... er-replication.html