Mysql5.6 Master+Master

Mysql5.6 Master+Master
 

 
环境:
 
操作系统:rehat 6.0
 
MySQL版本:5.6
 
主服务器IP:192.168.0.250
 
从服务器IP:192.168.0.252
 
实现目标:主从两台机器MySQL数据双向同步
 
 
 
数据库准备工作
 
分别A,B在两台服务器上执行锁表操作:
 
mysql>FLUSH TABLES WITH READ LOCK"
 
A点
将需要配置同步的数据库Dump出来:
 
shell>mysqldump -uroot -p mysql > /tmp/mysql.sql
 
将dump出来的文件拷贝到另外一台服务器上,方法随意。我用scp
 
shell>scp -P 22000 /tmp/mysql.sql [email protected]:/data

B


如果这台服务器已经建好库了,那么可以直接导数据:
 
shell>mysql -uroot -p  mysql < /data/mysql.sql
 
如果还没有该库,那么再导数据之前我们需要先建库。
 CREATE DATABASE "databasename
 
最后我们需要在两台服务器上别分创建一个账号,用来同步数据。
 
shell>mysql -u root -p
A点
mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT, SUPER ON *.* TO ‘BEIFEN‘@‘192.168.0.252‘ IDENTIFIED BY ‘123456‘ WITH GRANT OPTION;
 
mysql>FLUSH PRIVILEGES;

B点
 
mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT, SUPER ON *.* TO ‘BEIFEN‘@‘192.168.0.250‘ IDENTIFIED BY ‘123456‘ WITH GRANT OPTION;
 
mysql>FLUSH PRIVILEGES;
 
修改my.cnf
 
首先,我们需求修改bind-address选项。保证mysql监听在一个可以被对方访问到的网口上,当然如果你监听在0.0.0.0上就不会有这个问题了,但是这么做通常会带来一些安全问题。我一般会让它监听内网地址
 
 bind-address = 192.168.0.250(主服务器)
 
 bind-address = 192.168.0.252(从服务器)
 
 
 A点
将以下内容加到主服务器的my.cnf里
server-id = 250
log_bin = /data/mysql-bin.log
relay-log = mysql-relay
log_slave_updates = 1
binlog-ignore-db = mysql,information_schema
binlog_format = mixed
auto-increment-increment = 2
auto-increment-offset = 1
server-id服务器标识,我们必须给两台机器分配不同的server-id.
 
log-bin,开启mysql的binlog(二进制日志).开启后mysql会将所有的修改操作记录到binlog中,可以用mysqlbinlog工具查看,里面都是一条一条的sql语句。slave I/O会读取主机的binlog,然后把读取到的内容在slave上执行,这就是mysql主从同步的基本原理。
 
binlog-do-db,设置哪些数据库写binlog。
 
binlog-ingore-db,设置哪些数据库不写binlog。
 
通过这两个选项我们就可以设置哪些库同步哪些库不同步。
 
auto-increment-incrment和auto-increment-offset这两个选项的设置是为了防止2台服务器互相复制产生关键字段的冲突。如果他们用不同的便宜,比如一个按照1,3,5,7增加而另外一台按照那个2,4,6,8增加。auto-incrment-increment=2自动增加的字段每次步进是2,auto-increment-offset=1自动增加的字段的初始值是1
 
 
 B点
将以下内容添加到从服务器
server-id = 252
log_bin = /data/mysql-bin.log
relay-log = mysql-relay
log_slave_updates = 1
binlog-ignore-db = mysql,information_schema
binlog_format = mixed
auto-increment-increment = 2
auto-increment-offset = 2 
注意这里auto_increment_offset选项的值跟主服务器上不一样。
 
 
 
分别重启A,B mysql服务
 
[root@hisdg1 ~]# service mysql restart
 
或者
 
shell>mysql -u root -p -e "RESET MASTER"
 
 
  A点
配置主机到从机同步
 
记录主机的master状态
 
mysql> show master status\G
 
*************************** 1. row ***************************
 
            File: log-bin.log.000002
 
        Position: 2842
 
    Binlog_Do_DB:
 
Binlog_Ignore_DB: mysql,test
 
1 row in set (0.00 sec)
 
根据主机显示结果在从机上配置master参数
 
mysql>CHANGE MASTER TO MASTER_HOST=‘192.168.0.252‘,MASTER_USER=‘BEIFEN‘,MASTER_PASSWORD=‘123456‘,MASTER_LOG_FILE=‘mysql-bin.000002‘,MASTER_LOG_POS=2842;
 
其中MASTER_HOST、MASTER_USER、MASTER_PASSWORD这些参数可以在my.cnf里。但是我个人更喜欢在mysql里配置,一方面安全点,另一方面MASTER_LOG_FILE和MASTER_LOG_POS这些参数还是得在mysql里面配置,不如一块在myql里配置来的方便。
 
 
 B点
配置从机到主机同步(上一节的步骤反过来执行一遍)。
 
记录从机上的master状态
 
mysql> show master status\G
 
*************************** 1. row ***************************
 
            File: log-bin.log.000008
 
        Position: 12131228
 
    Binlog_Do_DB: databasename
 
Binlog_Ignore_DB: mysql,test
 
1 row in set (0.00 sec)
 
根据从机显示的结果在主机上配置master参数
 
mysql>CHANGE MASTER TO MASTER_HOST=‘192.168.0.250‘,MASTER_USER=‘rsync‘,MASTER_PASSWORD=‘123456‘,MASTER_LOG_FILE=‘mysql-bin.000008‘,MASTER_LOG_POS=12131228;
 
 
分别开启A,B slave线程
 
mysql>start slave;
 
 
 
解锁
 
mysql>unlock tables;

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。