[转帖]带从服务器的MySql主主复制之一_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2632 | 回复: 0   主题: [转帖]带从服务器的MySql主主复制之一        下一篇 
曹先丰
注册用户
等级:中士
经验:208
发帖:72
精华:0
注册:2012-1-9
状态:离线
发送短消息息给曹先丰 加好友    发送短消息息给曹先丰 发消息
发表于: IP:您无权察看 2014-11-20 11:32:29 | [全部帖] [楼主帖] 楼主

本篇简单的介绍一下MySql主动-主动模式下的主主复制,虽然这种模式的复制会出现很多问题,最明显的就是自增主键的冲突问题,但是在某些特定的环境下,还是会用到这种复制模式。

假设我们的主从主从复制结构是由4台服务器构成,2台master,2台slave。
master服务器1:192.168.0.100 slave服务器1:192.168.0.101
master服务器2:192.168.0.200 slave服务器2:192.168.0.201
构成的结构图如下:

首先,分别在4台机器上安装MySql,并使用MySql自带的my-medium.cnf作为初始配置文件,在4台服务器里分别执行如下命令。

[root@m/s/m/s ~]# \cp -f /usr/share/doc/mysql-server-*/my-medium.cnf /etc/my.cnf


第一步,配置2台主(Master)服务器配置文件,此步分别在2台主(Master)里操作。
1.在192.168.0.100的/etc/my.cnf的[mysqld]域后里添加

server_id                = 100
log_bin                  = mysql-bin
log_bin_index            = mysql-bin.index
log_slave_updates        = 1
relay_log                = mysql-relay-bin
relay_log_index          = mysql-relay-bin.index
sync_binlog              = 1
max_binlog_size          = 200M
auto_increment_increment = 2
auto_increment_offset    = 1
slave-skip-errors        = 1062,1053


2.在192.168.0.200的/etc/my.cnf的[mysqld]域后里添加

server_id                = 200
log_bin                  = mysql-bin
log_bin_index            = mysql-bin.index
log_slave_updates        = 1
relay_log                = mysql-relay-bin
relay_log_index          = mysql-relay-bin.index
sync_binlog              = 1
max_binlog_size          = 200M
auto_increment_increment = 2
auto_increment_offset    = 2
slave-skip-errors        = 1062,1053


为了解决我前面提到的同时插入数据时的自增主键冲突问题,我们加了

auto_increment_offset    定义AUTO_INCREMENT的起点值

两个参数的配置,这样就解决了这个冲突问题,但是如果某一方写入频繁,某一方写入很少,会造成大量的键空间浪费,而且这不能解决所有主动模式下的主主复制的其他问题,所有没有特殊需要,我推荐你尽量不要用这种复制模式,在下篇我将介绍一种更好的结构->主动被动模式下的主主复制。

第二步,配置2台从(Slave)服务器配置文件,此步分别在2台从(Slave)里操作。
1.在192.168.0.101的/etc/my.cnf的[mysqld]域后追加

server_id           = 101
log_bin             = mysql-bin
log_bin_index       = mysql-bin.index
log_slave_updates   = 1
relay_log           = mysql-relay-bin
relay_log_index     = mysql-relay-bin.index
max_binlog_size     = 200M
read_only           = 1
slave-skip-errors   = 1062,1053
skip_slave_start    = 1


2.在192.168.0.201的/etc/my.cnf的[mysqld]域后追加

server_id           = 201
log_bin             = mysql-bin
log_bin_index       = mysql-bin.index
log_slave_updates   = 1
relay_log           = mysql-relay-bin
relay_log_index     = mysql-relay-bin.index
max_binlog_size     = 200M
read_only           = 1
slave-skip-errors   = 1062,1053
skip_slave_start    = 1


*注意:以上的设置参数,如果设定文件/etc/my.cnf里本身就有的话,就先给删掉,再追加我们的设置。

第三步,启动MySql,为root用户设置密码,并创建复制账户,在4台服务器里分别执行:

[root@m/s/m/s ~]# /usr/bin/mysqladmin -u root password 'rootpassword'
[root@m/s/m/s ~]# mysql -uroot -p
Enter password:
mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repluser'@'192.168.
0.%' IDENTIFIED BY 'replpass';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)


第四步,启动复制:
对于主服务器2(192.168.0.200)来说,主服务器1和从服务器2都是它的从服务器,因此在主服务器1(192.168.0.100)和从服务器2(192.168.0.201)里分别执行:

-> MASTER_PASSWORD='replpass',
-> MASTER_LOG_FILE='mysql-bin.000001',
-> MASTER_LOG_POS=0;
Query OK, 0 rows affected (0.20 sec)
mysql> START SLAVE;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW SLAVE STATUS\G


同理在主服务器2(192.168.0.200)和从服务器1(192.168.0.101)里分别执行:

-> MASTER_PASSWORD='replpass',
-> MASTER_LOG_FILE='mysql-bin.000001',
-> MASTER_LOG_POS=0;
Query OK, 0 rows affected (0.20 sec)
mysql> START SLAVE;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW SLAVE STATUS\G


到此为止,配置完成,你可以在主服务器里分别插入并删除一些数据做测试了,如果上面SHOW SLAVE STATUS\G也正常,
可是从服务器并未从主服务复制数据,那么你在相对于该服务器的从服务器的MySql里执行一下:

如果还是不行,那么你就要检查你的设置并查看MySql的日志文件了。

--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论