1、说明:
MySQL版本:5.7
Master服务器IP:10.10.12.224,账号为root,密码root
Slave服务器IP:10.10.12.225,账号为root,密码root
2、Master服务器配置
· 找到Master服务器MySQL配置文件my.ini,用记事本打开,在[mysqld]下添加主服务相关内容;
log-bin=mysql-bin
log-bin-index=mysql-bin.index
server-id=224 --服务Id,和slave 的server-id不一样
sync_binlog=224
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使用的账号
本次使用的是一主两从,所以执行两条命令分别给两台slave授权:
GRANT REPLICATION SLAVEON*.*TO ’root’@’10.10.12.225’ IDENTIFIED BY ‘root’;
GRANT REPLICATION SLAVEON*.*TO ’root’@’10.10.12.230’ IDENTIFIED BY ‘root’;
· 在Master端,使用以下命令查看Master端状态,需要记住状态的File,和Position参数,在Slave配置中会用到。
登录mysql,然后输入命令:show master status \G;然后就可以看到file和position的值。
3、Slave服务器(10.10.12.225)配置
· 修改配置:在Slave服务器中找到MySQL的配置文件my.ini,用记事本打开,在[mysqld]下新增以下内容:
server-id=225 --服务Id,和master 的server-id不一样
log-bin = mysql-bin
· 重启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;
//master_host_name:master:服务器IP
//replication_user_name:用户名(上面授权)
//replication_password:密码
//recorded_log_file_name:文件名(查看状态得到)
//recorded_log_position:开始位置
· 重启Slave MySQL服务;
· 启动Slave,输入以下命令;
startslave;
在命令行中输入以下命令:show slave status \G;
若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 \G;
3.到slave服务器上执行手动同步:
change master to
master_host='10.10.12.224',
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