一主多从,可以缓解读的压力,但是一旦主宕机了,就不能写了,所以我们可以采用双主双从架构来改进它的不足。
A、在MySQL主服务器3307配置文件my.cnf里面加入
log-bin=mysql-bin
server-id=3307
B、在MySQL主服务器3308配置文件my.cnf里面加入
log-bin=mysql-bin
server-id=3308
C、在MySQL从服务器3309配置文件my.cnf里面加入
server-id=3309
D、在MySQL从服务器3310配置文件my.cnf里面加入
server-id=3310
E、在第一台主服务器3307的my.cnf文件增加如下配置
auto_increment_increment=2
auto_increment_offset=1 #不一样的点 相当于起始值
log-slave-updates
sync_binlog=1
F、在第二台主服务器3308的my.cnf文件增加如下配置
auto_increment_increment=2
auto_increment_offset=2 #不一样的点 相当于起始值
log-slave-updates
sync_binlog=1
G、配置项说明
auto_increment_increment
控制主键自增的自增步长,用于防止 Master 与 Master 之间复制出现重复自增字段值,通常auto_increment_increment=n,有多少台主服务器,n 就设置为多少
auto_increment_offset=1
设置自增起始值,这里设置为1,这样 Master 的 auto_increment 字段产生的数值是:1, 3, 5, 7, …等奇数ID
注意 auto_increment_offset 的设置,不同的 master 设置不应该一样,否则就容易引起主键冲突,比如 master1 的 offset=1,则 master2 的 offset=2,master3的 offset=3
log-slave-updates
在双主模式中,log-slave-updates 配置项一定要配置,否则在master1(3307)上进行了更新数据,在 master (3308) 和 slave1 (3309) 上会更新,但是在 slave2 (3310) 上不会更新
sync_binlog
表示每几次事务提交,MySQL把binlog缓存刷进日志文件中,默认是0,最安全的是设置为1。sync_binlog=0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。
注意
进入 /usr/local/mysql-5.7.24/bin 目录,重启四个 MySQL 服务,启动时指定配置文件
./mysqld_safe --defaults-file=/usr/local/mysql-5.7.24/data/3307/my.cnf &
./mysqld_safe --defaults-file=/usr/local/mysql-5.7.24/data/3308/my.cnf &
./mysqld_safe --defaults-file=/usr/local/mysql-5.7.24/data/3309/my.cnf &
./mysqld_safe --defaults-file=/usr/local/mysql-5.7.24/data/3310/my.cnf &
A、主服务器(3307|3308)设置
需要登录到主服务器 3307|3308 的客户端
在 /usr/local/mysql-5.7.24/bin 目录下执行 ./mysql -uroot -p -P3307|3308 -h127.0.0.1
(1) 在两台主服务器 (3307|3308) 上创建复制数据的账号并授权 3307 已经做过,只需要在 3308 上执行即可
grant replication slave on *.* to 'copy'@'%' identified by '123456';
(2) 在两台主服务器 (3307|3308) 上停止复制并重置服务器状态
show master status;
mysql主服务器默认初始值:
File:mysql-bin.000001
Position:154
(3) 如果主服务状态不是初始状态,需要重置状态
执行命令:reset master;
(4) 因为之前 3308 机器设置过从,所以该 3308 机器应该执行
stop slave;
reset slave;
B、从服务器 (3307|3308|3309|3310) 设置
需要登录到主服务器 3308|3309|3310 的客户端
在 /usr/local/mysql-5.7.24/bin 目录下执行
./mysql -uroot -p -P3308|3309|3310 -h127.0.0.1
(1) 在从服务器上 (3309、3310) 停止复制并重置服务器状态:
stop slave;
reset slave;
(2) 设置从服务器的 master (相当于是4台都需要设置)
注意:这里的IP和端口要根据自己的实际情况修改
①设置从服务器3308、3309的主,他们的主均为3307
即从服务器3308和3309客户端上执行如下操作
change master to master_host='192.168.235.128',master_user='copy',master_port=3307,master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=154;
②设置从服务器3307、3310的主,他们的主均为3308
即从服务器3307和3310客户端上执行如下操作
change master to master_host='192.168.235.128',master_user='copy',master_port=3308,master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=154;
(3) 在从机器上执行开始复制命令(4台MySQL上都执行)
start slave;
(4) 至此双主双从就搭建好了
检查从服务器复制功能状态
在从服务器的客户端执行以下命令:
show slave status \G;
\G 表示格式化输出
如果Slave_IO_Running和Slave_SQL_Running均为 YES,则表示主从关系正常
在主服务器上操作测试数据的复制和同步情况