写在最前面:首先两个服务器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
配置完后重启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;
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_group
mysql -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_log
mysql -uroot -p
mysql> show variables like '%slave_para%';
mysql> show variables like '%relay_log%';
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
查看
这样就完成配置了
验证的话可以在master新建库和表及数据,在slave观察同步情况,以及在日志里查看采用了那种同步。