写在最前面:首先两个服务器master和slave,都按照好mysql
一、主从同步配置
-
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
配置完后重启mysqlservice 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;
FILE和Position后续配置要用到 -
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;
返回无即可,已存在要停止
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让Master在某一个时间点等待Slave节点的 ACK(Acknowledge character)消息,接收到ACK消息后才进行事务提交,这也是半同步复制的基础,MySQL从5.5版本开 始引入了半同步复制机制来降低数据丢失的概率。
-
master安装插件SEMI
1)查看是否支持插件mysql -uroot -p
查看是否支持插件安装
mysql> select @@have_dynamic_loading;
2)查看当前插件mysql> show plugins;
3)安装mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
查看:
mysql> show variables like '%semi%';
4)开启mysql> set global rpl_semi_sync_master_enabled=1; mysql> set global rpl_semi_sync_master_timeout=1000;
查看:mysql> show variables like ‘%semi%’;
-
slave安装插件SEMI
1)安装mysql -uroot -p mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
查看:
show variables like '%semi%';
2)开启mysql> set global rpl_semi_sync_slave_enabled=1;
三、并行复制
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(基于组提交的并行复制方式)
-
master配置
1)查看binlog_groupmysql -uroot -p mysql> show variables like '%binlog_group%';
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%';
-
slave配置
1)查看slave_parallel_type和relay_logmysql -uroot -p mysql> show variables like '%slave_para%'; mysql> show variables like '%relay_log%';
2)修改slave_parallel_type和relay_logmysql> 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
查看
这样就完成配置了
验证的话可以在master新建库和表及数据,在slave观察同步情况,以及在日志里查看采用了那种同步。