mysql互为主从复制

前要条件:同步两台服务器的时间

#同步香港时间
/usr/sbin/ntpdate stdtime.gov.hk

Master-1:172.16.160.35
Master-2:172.16.160.37
MySQL版本:mysql-5.7


1.mysql配置文件修改及说明

分别修改两个节点的mysql,此处修改配置文件为:/etc/my.cnf
修改Master-1如下:

server-id=1 #server的唯一标识
auto_increment_offset=1 #自增id起始值
auto_increment_increment=2 #每次自增数字

log-bin = mysql-bin #打开二进制功能,MASTER主服务器必须打开此项
max_binlog_size=1024M #binlog单文件最大值
binlog_format=mixed #指定mysql的binlog日志的格式,mixed是混合模式
relay-log=relay-bin #开启中继日志功能
relay-log-index=slave-relay-bin.index #中继日志清单

replicate-ignore-db = mysql #忽略不同步主从的数据库
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
replicate-ignore-db = test

修改Master-2如下:

server-id=2 #server的唯一标识
auto_increment_offset=2 #自增id起始值
auto_increment_increment=2 #每次自增数字

log-bin = mysql-bin #打开二进制功能,MASTER主服务器必须打开此项
max_binlog_size=1024M #binlog单文件最大值
binlog_format=mixed #指定mysql的binlog日志的格式,mixed是混合模式
relay-log=relay-bin #开启中继日志功能
relay-log-index=slave-relay-bin.index #中继日志清单

replicate-ignore-db = mysql #忽略不同步主从的数据库
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
replicate-ignore-db = test

注意:

  • Master-1和Master-2的server-id和auto-increment-offset配置不同,其他相同。
  • server-id:是服务器编号,所以,两台服务器上的值要设置的不一样,此处设置为1和2
  • auto-increment-offset:用来设定数据库中自动增长的值,为了在两台同时对外提供服务时,防止子增长的字段重复
  • 在my.cnf配置文件中,添加“binlog_do_db=数据库名”配置项(可以添加多个)来指定要同步的数据库。如果配置了这个配置项,却没添加在该配置项后面的数据库,则binlog不记录它的事件
2.重启mysql使配置文件生效

分别在两个节点上执行一下命令:

CENTOS6:service mysqld restart
CENTOS7:systemctl restart mysqld
3.添加主从同步账号

Master-1操作如下:

grant replication slave on *.* to ’m1slave’@‘172.16.160.37’ identified by ‘password’;

Master-2操作如下:

grant replication slave on *.* to ’m2slave’@‘172.16.160.35’ identified by ‘password’;

注意:

  • 上面SQL语句中的IP地址是对谁访问本机的设置,而非本机IP
  • 若允许任何IP使用此用户都可以访问时,只需将IP地址修改为百分号(%)即可
  • 若出现一下提示信息:ERROR 1819 (HY000): Your password does not satisfy the current policy requirement.说明密码过于简单
4.查看Master库的状态

分别在两个节点上执行一下命令:

show master status;

查看结果如下:
Master-1:

Master-2:

5.配置同步数据

Master-1操作如下:

change master to master_host=‘172.16.160.37’, master_port=3306, master_user=’m2slave’, master_password=‘password’, master_log_file=‘mysql-bin.000003’, master_log_pos=480;

Master-2操作如下:

change master to master_host=‘172.16.160.35’, master_port=3306, master_user=’m1slave’, master_password=‘password’, master_log_file=‘mysql-bin.000003’, master_log_pos=70476;

注意:

  • master_log_file和master_log_pos的配置是通过(第4步)中查询到的数据
  • master_user和master_password的配置是通过(第3步)中添加角色的账号、密码
6.运行Slave库

分别在两个节点上执行一下命令:

start slave;
7.查看Slave库的状态

分别在两个节点上执行一下命令:

show slave status\G;

如果查看结果如下图,说明正常


问题及解决方式:

  • 问题一:
    运行(第3步)查看结果如下:
Slave_IO_State : Connecting to master
Slave_IO_Running : Connecting
Slave_SQL_Running : Yes

通过结果中的Last_IO_Error属性或者追踪/var/log/mysqld.log文件,查看具体错误信息

  • 解决-问题一:
    出现此问题的方式存在许多种,此处我列举我发现的别的只能你们自己去探索了。
    a. 在(第3步)配置IP地址不是Slave的地址,在Slave启动之后因无权限访问出现此问题,赋予Slave权限即可
    b. 在(第5步)的注意点1中的两个属性配置错误也会出现此情况,停止Slave,重新配置(第5步)即可
    c. 防火墙为开启3306端口,关闭防火墙,或者放开3306端口的拦截即可

  • 问题二:
    运行(第3步)查看结果如下:

Slave_IO_State : 
Slave_IO_Running : No
Slave_SQL_Running : Yes

通过结果中的Last_IO_Error属性或者追踪/var/log/mysqld.log文件,查看具体错误信息

  • 解决-问题二:
    a. 通过查看集体错误信息,如下:
    The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
    是由于mysql data目录下auto.cnf文件中的UUID的值相同造成的,将UUID修改不相同即可
    b. 由于两个节点同时进行了写操作,造成日志冲突,或者节点中因事务回滚造成此问题
    执行一下命令即可解决:
stop slave; #停止Slave
set global SQL_SLAVE_SKIP_COUNTER=1;
start slave;

以上只代表我遇到的问题,及解决我的问题的方式,对于你遇到的问题是否可以解决不可保证,望见谅。

你可能感兴趣的:(mysql互为主从复制)