说明:
MySQL版本:5.7
Master服务器IP:10.10.31.4
Slave服务器IP:10.10.31.12
Master服务器配置
- 找到Master服务器MySQL配置文件my.ini,用记事本打开,在[mysqld]下添加主服务相关内容;
log-bin=mysql-bin
log-bin-index=mysql-bin.index
server-id = 1 --服务Id,和slave 的server-id不一样
sync_binlog=1
binlog_format=mixed
binlog-do-db = testdb --做主从同步的数据库名
binlog-ignore-db = mysql
binlog-ignore-db = performance_schema
binlog-ignore-db = information_schema
- 配置完毕重启MySQL服务;
- 授权:授权slave同步数据的账号密码。
GRANT REPLICATION SLAVE ON *.*TO '账号'@'Slave地址' IDENTIFIED BY '密码';//账号为slave使用的账号
- 在Master端,使用以下命令查看Master端状态,需要记住状态的File,和Position参数,在Sla配置中会用到。
show master status;
Slave服务器配置
- 修改配置:在Sla服务器中找到MySQL的配置文件my.ini,用记事本打开,在[mysqld]下新增以下内容:
server-id=2 --服务Id,和master 的server-id不一样
log-bin = mysql-bin
relay-log-index = slave-relay-bin.index
relay-log = slave-relay-bin
sync_master_info = 1
sync_relay_log = 1
sync_relay_log_info = 1
- 重启Slave MySQL服务;
- Slave关联Master:在MySQL命令行中执行以下命令;
CHANGE MASTER TO
MASTER_HOST='master_host_name',
MASTER_USER='replication_user_name',
MASTER_PASSWORD='replication_password',
MASTER_LOG_FILE='recorded_log_file_name',
MASTER_LOG_POS=recorded_log_position;
GRANT REPLICATION SLAVE ON *.* TO 'rep'@'192.168.%' IDENTIFIED BY '123456';
//master_host_name:master:服务器IP
//replication_user_name:用户名(上面授权)
//replication_password:密码
//recorded_log_file_name:文件名(查看状态得到)
//recorded_log_position:开始位置
- 重启Slave MySQL服务;
- 启动Slave,输入以下命令;
start slave;
- 在命令行中输入以下命令:
show slave status;
若Slave_IO_Running与Slave_SQL_Running都为YES,则读写分离配置成功。
说明
若Slave_IO_Running与Slave_SQL_Running有一个为NO,则读写分离配置不成功。
- Slave_IO_Running为NO:
首先查看Master和Slave的server-id是否一致,若一致,需要修改,然后重启slave(start slave)。
show GLOBAL VARIABLES like '%server_id%';//查看server_id
set GLOBAL server_id=2;//重新设置server_id
- Slave_SQL_Running为NO:
原因:程序可能在slave上进行了写操作 ,也可能是slave机器重起后,事务回滚造成的。
解决方法:
1.首先停掉Slave服务:slave stop
2.到主服务器上查看主机状态,记录File和Position对应的值:show master status
3.到slave服务器上执行手动同步:
change master to
master_host='10.10.31.4',
master_user='root',
master_password='root',
master_port=3306,
master_log_file='mysql-bin.000003',
master_log_pos=207448;
4.重启Slave:slave start
5.再次查看slave状态发现:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes