一、架构规划
一主多从可以缓解读的压力,但是如果主宕机了,所有从都不能写了,因此我们配置双主双从。
1、规划图
master1和master2互为主从关系,slave1是master1的从,slave2是master2的从。
2、环境准备
准备四台机器,其中两台为主(master1和master2),两台为从(slave1和slave2)
主master1 | 192.168.198.140 |
主master2 | 192.168.198.141 |
从slave1 | 192.168.198.100 |
从slave2 | 192.168.198.101 |
二、修改配置
1、主库配置
1.1配置master1
修改配置文件/etc/my.cnf
1.2配置master2
同样和master1一样的修改操作,但是注意server-id可以随便设置,但是必须唯一(不能相同)
2、从库配置
2.1配置slave1
2.2配置slave2
3、重启服务
四台机器都要重启MySQL服务,并检查状态
systemctl restart mysqldsystemctl status mysqld
三、建立同步账号
1、master1上建立
进入mysql,设置同步账号名为rep,密码为Rep@123456,并授权
grant replication slave on *.* to 'rep'@'192.168.198.%' identified by 'Rep@123456';
然后查看状态,并记录下File和Position的值
至此,就不要再操作master1的mysql了,不然的话,这两个值就会发生变化
2、master2上建立
也是同样的方法,并且也要看到File和Position这两个关键值
四、配置主从关系
方法就是在从机上配置需要复制的主机,复制主机的命令如下:
change master to
MASTER_HOST='被从机复制的主机master的ip',
MASTER_USER='同步账号名',
MASTER_PASSWORD='同步账号的密码',
MASTER_LOG_FILE='记录的File的值',
MASTER_LOG_POS= 记录的Position的值 ;
1、配置从服务器slave1
1.1slave1复制master1
在从机slave1上操作,复制对象是master1
由主库master1的状态表可知,从库上的MASTER_LOG_FILE参数的值就是mysql-bin.000043,MASTER_LOG_POS参数的值是448
1.2启动slave1的复制功能
在slave1上使用命令start slave
发现报错:ERROR 1872 (HY000): Replica failed to initialize applier metadata structure from the repository
这是因为数据库以前配置过,生成过中继日志,所以slave中还记录着旧日志,所以需要用命令reset slave去重置,注意reset之后,再重新配置主从关系,然后再启动就可以了
既然成功启动,那我们可以查看从库状态
Slave_IO_Running和Slave_SQL_Running这两个参数必须同时为Yes,即IO线程和SQL线程启动成功
2、配置从服务器slave2
2.1slave2复制master2
在从机slave2上操作,复制对象是master2
由主库master2的状态表可知,从库上的MASTER_LOG_FILE参数的值就是mysql-bin.000008,MASTER_LOG_POS参数的值是448
2.2启动slave2的复制功能
在slave2上使用命令start slave;
然后检查状态是否为双Yes,这样就成功了
3、配置两主服务器互为主从
要实现互为主从的方式很简单,即master2复制master1,master1复制master2。因此同样地去建立主从关系即可
3.1 master2复制master1
在master2上操作
注:IO线程第一次没起来,查看报错日志/var/log/mysqld.log之后,我重启了master1,因此master1的File和Position的值变化了,一定要重新查看状态
回头再看了,发现就是自己设置日志文件的时候多加了个小数点,,,,
既然已经重启了,就只能重新查看状态再设置了
然后在master2上重新建立主从
这下才成功
3.2 master1复制master2
在master1上同样的操作思路,双Yes就没问题
最后就完成配置了,可以自己测试一下