您的位置:首页 > 数据库 > MySQL

mysql主主关系配置

2016-04-27 17:30 363 查看
MySQL支持主主关系,是通过同步bin-log来实现数据同步,如mysqlA与mysqlB是主主关系,mysqlA的数据是通过同步mysqlA的bin-log来将数据同步到mysqlB,相反mysqlB的数据是通过同步mysqlB的bin-log来将数据同步到mysqlA。根据这一原理,如果双写mysqlA和mysqlB,可能产生数据冲突而造成数据不一致,因此在使用时需要避免双写造成的数据冲突问题。

对bin-log的了解可参照下面链接:
http://www.doc88.com/p-337769944580.html
好了,下面进行配置mysql主主关系。

例如有mysqlA(192.168.1.100)和mysqlB(192.168.1.101),需将它们配置主主关系。可以将一过程分解为两个子过程:(1)将mysqlA配成mysqlB的从库;(2)将mysqlB配成mysqlA的从库。可见,过程(2)是过程(1)的逆过程。

一、mysqlA配成mysqlB的从库

(1)登陆mysqlB(192.168.1.101)

(2)首先创建一个mysql账号作为同步用,然后赋与同步权限;

mysql>INSERT INTO mysql.user(Host,User,Password) VALUES("localhost","user_00",password("1234"));

mysql>GRANT REPLICATION SLAVE ON *.* TO 'user_00'@192.168.1.100 IDENTIFIED BY '1234'

mysql>FLUSH PRIVILEGES;

(3)编辑mysql的配置文件my.cnf(一般位置是/etc/my.cnf),添加下面项

log-bin=bin-log # 打开binlog

server-id = 1 # 标识mysqlB

auto_increment_increment = 2

auto_increment_offset = 1

binlog-do-db=discuz # 需要同步的DB

binlog-ignore-db=mysql # 不需要同步的DB

slave-skip-errors=all # 跳过错误,继续执行复制

上面其中auto_increment_increment = 2和auto_increment_offset = 1用于解决主主模式时自增加字段的数据冲突,它表示auto_increment字段产生的数值是:1, 3, 5, 7, …等奇数ID。

(4)重启mysqlB

#sudo service mysql restart

(5)查看master status

mysql>show master status;

+------------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000003 | 106 | discuz | |

+------------------+----------+--------------+------------------+

(6)登陆mysqlA(192.168.1.100)

(7)编辑mysqlA的配置文件my.cnf,添加下面项

server-id = 2 #标识mysqlA

auto_increment_increment = 2

auto_increment_offset = 2

replicate-ignore-db=mysql

replicate-do-db=discuz

(8)重启mysqlA

#sudo service mysql restart

(9)从机mysqlA指定需要同步的主机mysqlB位置和binlog位置(该信息由步骤(5)提供)

mysql>slave stop;

mysql>change master to master_host='192.168.1.101', master_user='user_00', master_password='1234', master_port=3366, master_log_file='mysql-bin.000003', master_log_pos=106;

mysql>slave start;

(10)查看slave的同步状态

mysql>show slave status;

如果显示信息中 Slave_IO_Running: Yes Slave_SQL_Running: Yes,都为Yes,则说明mysqlA成功为mysqlB的从库,即主从关系建立。

二、mysqlB配成mysqlA的从库

此过程是过程一的逆过程。因此将上面的过程里的mysqlA和mysqlB对换一下操作,并略改下(3)、(7)(9)步骤:

(3)改为:只添加下面项

log-bin=bin-log # 打开binlog

binlog-do-db=discuz # 需要同步的DB

binlog-ignore-db=mysql # 不需要同步的DB

slave-skip-errors=all # 跳过错误,继续执行复制
(7)改为:只添加下面项

replicate-ignore-db=mysql

replicate-do-db=discuz

(9)改为:(其中master_log_file和master_log_pos由步骤(5)显示的信息提供)

mysql>slave stop;

mysql>change master to master_host='192.168.1.100', master_user='user_00', master_password='1234', master_log_file='mysql-bin.000003', master_log_pos=106;

mysql>slave start;

最后查看slave状态,此时slave是mysqlB,即在mysqlB是输入如下命令:

mysql>show slave status;

同样如果显示信息中 Slave_IO_Running: Yes Slave_SQL_Running: Yes,都为Yes,则说明mysqlB成功为mysqlA的从库,即主从关系建立。

至此,mysqlA和mysqlB的主主关系建立完成。它们互相同步的DB是discuz。

转载于:http://blog.csdn.net/whycold/article/details/19420435
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: