Linux MySQL 5.7 主从复制配置

Eave 2016.01.26 15:16

一、环境说明

两台安装在CentOS 6.7的MySQL 5.7.10服务器:master 和 slave

Master服务器:

IP:192.168.1.7

Port:3306

Slave 服务器:

IP:192.168.1.8

Port:3306

二、Master服务器

1、修改master的my.cnf配置文件,在[mysqld]下添加如下配置:

log-bin = mysql-bin
log-bin-index = mysql-bin.index
server-id = 1
binlog-do-db=openapi # 需要同步的数据库

说明:

log-bin 配置的是开启二进制日志,并将日志写在配置的路径上。记录的日志将以mysql-bin.000001 的方式进行记录

log-bin-index 配置的是二进制日志记录文件的目录。该文件中每一行都是二进制日志文件的路径

server-id是该MySQL服务器的服务ID,用于区分在主从配置中的其他服务器

配置成功后,重启mysqld服务

注意:如果不定义log-bin的文件名,则会以hostname主机名命名,一旦主机名修改,则会因为找不见二进制文件报错。所以最好还是显示指定文件名

三、Slave服务器

2、修改slave的my.cnf配置文件,在[mysqld]下添加如下配置:

server-id = 2
relay-log = relay-bin
relay-log-index = relay-bin.index
log-slave-updates

server-id和master意义一样,用于区分不同的mysql服务器

relay-log用以记录收到的中继二进制日志。relay-log-index用以保存收到的日志路径索引。如果不显示指定文件名,则以hostname值命名

保存后可以重启mysqld服务

四、连接Master服务器

1、在slave上启动slave与master的连接。

在slave上登录到mysql,在mysql>:下进行操作

mysql> stop slave; // 停止slave。
mysql> change master to master_host = '192.168.10.7', master_user='root', master_password='123456', master_log_file='mysql-bin.000001', master_log_pos=1;
mysql> start slave;

2、检查是否配置成功与排错

mysql> show slave status\G;

在打印出来的状态下,查看以下两个参数的值:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

如果这两个参数的值都是yes,则运行正常,可以在master数据库上添加一个数据库或者添加一张表,检查slave数据库上是否存在

如果 这两个参数有任何一个不是 Yes,则说明存在问题。可以查看slave上的数据库错误日志文件查看错误原因

因为binlog也记录了mysql库的日志,导致同步总是报错,在[mysqld]中配资binlog-ignore-db=mysql


常见的错误原因

1、server-id一致

2、用户权限不够。需要的权限包括:

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO USER@'IP_ADDR' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

3、数据库UUID一致,如果mysql安装时是通过批量复制安装的,则有可能数据库的UUID一致,进入数据库的datadir目录,修改auto.cnf。随意修改下uuid中的值,重启mysqld服务即可

4、Master数据库端口被防火墙阻挡

5、提示Could not initialize master info structure for ''; more error messages can be found in the MariaDB error log错误,删除master.info、multi-master.info文件