日期:2014-05-16  浏览次数:21063 次

MySQL双主机双Master方案测试

必须避免系统中任何一处出现单点故障。?

?

如果主MySQL所在的物理机器出现硬件故障,就是一个单点故障,虽然可以迅速的用一台从属机(Slave)升级为主机(Master). 但是也会比较慢。 最好的方法还是用双Master方案避免出现单点故障。

?

此试验预计花费时间 2天。?

?

?

需要解决下面二个问题

?

1.实现二台主数据库的循环同步,即A库有变化,B库同步;同理B库有变化,A库同步;

?

2.当A库发生故障后,及时报警,同时B库替换为A库为主库,与所有slave服务器通讯正常;

?

?

准备工作

写道
一般来说,master机与slave机的mysql版本尽量一致,或者master比slave高.但我们这里是双master,即互为主从,所以mysql的版本要保持一致;

打算用我自己的机器与192.168.0.8的机器来做测试;

A:192.168.0.219(本机)
B:192.168.0.8

查看一下版本
A:$ mysql -V
mysql Ver 14.14 Distrib 5.1.62, for debian-linux-gnu (i486) using readline 6.1

B:$ mysql -V
mysql Ver 14.14 Distrib 5.5.13, for FreeBSD8.1 (amd64) using 5.2

?

升级mysql

将本机的mysql升级到5.5版本

?

创建同步帐号

因为服务器A及服务器B互为主从,所以要分别为其建立同步帐号,都授予REPLIATION SLAVE权限.

A:
mysql>grant replication slave on *.* to 'replicate'@'192.168.0.8' identified by '123456';
mysql>flush privileges;

B:
mysql>grant replication slave on *.* to 'replicate'@'192.168.0.219' identified by '123456';
mysql>flush privileges;

如果不行直接进phpmyadmin去创建也一样;

测试一下.
A:
mysql -h192.168.0.8 -ureplicate -p123456  能进入mysql> OK!!
B:
mysql -h192.168.0.219 -ureplicate -p123456  能进入mysql> OK!!

?

修改配置文件my.cnf

A:
[mysqld]
    server-id        = 1
    log-bin          = mysql-bin
    binlog-do-db     = test-xf
    binlog-ignore-db = mysql
    #主-主需要多添加的部分
    replicate-do-db = test-xf  
    replicate-ignore-db = mysql,information_schema
    log-slave-updates  #如果一个master挂掉,另一个马上接管
    #下面3句,服务器频繁的刷新日志,这个保证了在其中一台挂掉的话,日志刷新到另外一台,从而保证了数据的同步. 
    sync-binlog = 1   
    auto_increment_offset = 1
    auto_increment_increment = 2

重启mysql服务: sudo /etc/init.d/mysql restart
查看master状态
mysql> show master status\G;
*************************** 1. row ***************************
            File: mysql-bin.000006
        Position: 977
    Binlog_Do_DB: test-xf
Binlog_Ignore_DB: mysql
1 row in set (0.00 sec)

ERROR: 
No query specified


B:
[mysqld]
    server-id        = 2
    log-bin          = mysql-bin
    binlog-do-db     = test-xf
    binlog-ignore-db = mysql
    #主-主需要多添加的部分
    replicate-do-db = test-xf
    replicate-ignore-db = mysql,information_schema
    log-slave-updates  #如果一个master挂掉,另一个马上接管
    #下面3句,服务器频繁的刷新日志,这个保证了在其中一台挂掉的话,日志刷新到另外一台,从而保证了数据的同步. 
    sync-binlog = 1   
    auto_increment_offset = 2
    auto_increment_increment = 2

重启mysql服务: sudo /usr/local/etc/rc.d/mysql-server restart
查看master状态:
mysql> show master status\G;
*************************** 1. row ***************************
            File: mysql-bin.000005
        Position: 348
    Binlog_Do_DB: test-xf
Binlog_Ignore_DB: mysql
1 row in set (0.00 sec)

ERROR: 
No query specified

?

指定同步位置

?

A:
mysql> change master to
    -> master_host = '192.168.0.8',
    -> master_user = 'replicate',
    -> master_password = '123456',
    -> master_log_file = 'mysql-bin.000005',
    -> master_log_pos = 348;
Query OK, 0 rows affected (0.44 sec)

B:
mysql> change master to
    -> master_host = '192.168.0.219',
    -> master_user = 'replicate',
    -> master_password = '123456',
    -> master_log_file = 'mysql-bin.000006',
    -> master_log_pos = 977;
Query OK, 0 rows affected (0.05 sec)

?

?

?

重启A,B服务器上的从服务线程

A:
mysql> start slave;
Query OK, 0 rows affected (0.03 sec)

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to se