写在最前面:首先两个服务器master和slave,都按照好mysql

mysql主从部署 mysql5.7主从_mysql

一、主从同步配置

  1. master配置
    1)配置my.cnf文件
cd /etc
vim my.cnf

新增

log_bin=mysql-bin
server-id=1
sync-binlog=1
binlog-ignore-db=performance_schema
binlog-ignore-db=information_schema
binlog-ignore-db=sys

mysql主从部署 mysql5.7主从_mysql主从部署_02


配置完后重启mysql

service mysql restart

2)授权

mysql -uroot -p
mysql> grant replication slave on *.* to 'root'@'%' identified by 'root';
mysql> grant all privileges on *.* to 'root'@'%' identified by 'root';
mysql> flush privileges;

查看:

mysql> show master status;

mysql主从部署 mysql5.7主从_mysql_03


FILE和Position后续配置要用到

  1. slave配置
    1)配置my.cnf文件
cd /etc
vim my.cnf

新增

server-id=2
relay_log=mysql-relay-bin
read_only=1

配置完后重启mysql

service mysql restart

确认:

mysql -uroot -p
mysql> show slave status;

返回无即可,已存在要停止

mysql主从部署 mysql5.7主从_mysql_04


2)初始化

mysql> change master to master_host='192.168.200.128',master_port=3306,master_user='root',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=869;
mysql> start slave;

其中master_log_file和master_log_pos就是master status里的FILE和Position
检查:

mysql> show slave status \G;

mysql主从部署 mysql5.7主从_重启_05


这样主从同步就配置好了

二、半同步复制

为了提升数据安全,MySQL让Master在某一个时间点等待Slave节点的 ACK(Acknowledge character)消息,接收到ACK消息后才进行事务提交,这也是半同步复制的基础,MySQL从5.5版本开 始引入了半同步复制机制来降低数据丢失的概率。

mysql主从部署 mysql5.7主从_mysql_06

  1. master安装插件SEMI
    1)查看是否支持插件
mysql -uroot -p

查看是否支持插件安装

mysql> select @@have_dynamic_loading;

mysql主从部署 mysql5.7主从_重启_07


2)查看当前插件

mysql> show plugins;

mysql主从部署 mysql5.7主从_MySQL_08


3)安装

mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';

查看:

mysql> show variables like '%semi%';

mysql主从部署 mysql5.7主从_mysql_09


4)开启

mysql> set global rpl_semi_sync_master_enabled=1;
mysql> set global rpl_semi_sync_master_timeout=1000;

查看:mysql> show variables like ‘%semi%’;

mysql主从部署 mysql5.7主从_重启_10

  1. slave安装插件SEMI
    1)安装
mysql -uroot -p
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';

查看:

show variables like '%semi%';

mysql主从部署 mysql5.7主从_mysql主从部署_11


2)开启

mysql> set global rpl_semi_sync_slave_enabled=1;

mysql主从部署 mysql5.7主从_mysql主从部署_12

三、并行复制

MySQL的主从复制延迟一直是受开发者最为关注的问题之一,MySQL从5.6版本开始追加了并行复制功能,目的就是为了改善复制延迟问题,并行复制称为enhanced multi-threaded slave(简称MTS)

在从库中有两个线程IO Thread和SQL Thread,都是单线程模式工作,因此有了延迟问题,可以采用多线程机制来加强,减少从库复制延迟。(IO Thread多线程意义不大,主要指的是SQL Thread多线 程)

在MySQL的5.6、5.7、8.0版本上,都是基于上述SQL Thread多线程思想,不断优化,减少复制延迟

为了兼容MySQL 5.6基于库的并行复制,5.7引入了新的变量slave-parallel-type,其可以配置的值有: DATABASE(默认值,基于库的并行复制方式)、LOGICAL_CLOCK(基于组提交的并行复制方式)

  1. master配置
    1)查看binlog_group
mysql -uroot -p
mysql> show variables like '%binlog_group%';

mysql主从部署 mysql5.7主从_重启_13


2)参数设置

mysql> set global binlog_group_commit_sync_delay=1000;
mysql> set global binlog_group_commit_sync_no_delay_count=100;

查看:

mysql> show variables like '%binlog_group%';

mysql主从部署 mysql5.7主从_mysql主从部署_14

  1. slave配置
    1)查看slave_parallel_type和relay_log
mysql -uroot -p
mysql> show variables like '%slave_para%';
mysql> show variables like '%relay_log%';

mysql主从部署 mysql5.7主从_重启_15


mysql主从部署 mysql5.7主从_mysql_16


2)修改slave_parallel_type和relay_log

mysql> set global relay_log_recovery=1;

提示:ERROR 1238 (HY000): Variable ‘relay_log_recovery’ is a read only variable
所以直接在配置文件里修改

vim /etc/my.cnf

进入配置文件,添加:

slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=8
master_info_repository=TABLE
relay_log_recovery=1
relay_log_info_repository=TABLE

重启

service mysql restart

查看

mysql主从部署 mysql5.7主从_MySQL_17


mysql主从部署 mysql5.7主从_MySQL_18


这样就完成配置了

验证的话可以在master新建库和表及数据,在slave观察同步情况,以及在日志里查看采用了那种同步。