mysql主从复制存在的问题:
1.主库宕机后,数据可能丢失
2.从库只有一个SQL Thread,主库写压力大,复制很可能延时
解决方法:
半同步复制—解决数据丢失的问题
并行复制----解决从库复制延迟的问题
半同步复制
主库执行
select @@have_dynamic_loading; #查看是否支持动态安装插件
show plugins;
install plugin rpl_semi_sync_master soname 'semisync_master.so'; #半同步复制需要该插件,并重命名
show variables like '%semi%';
set global rpl_semi_sync_master_enabled=1; #发现插件未开启,执行命令开启
从库执行
install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
show variables like '%semi%';
set global rpl_semi_sync_slave_enabled=1;
stop slave;
start slave;
验证: 主库执行相应操作后,查看 /var/log/mysqld.log
Semi-sync replication initialized for transactions
Semi-sync replication enabled on the master
Start semi-sync binlog_dump to slave 即可说明半同步复制生效了
并行复制
主库执行
show variables like '%binlog_group%';
set global binlog_group_commit_sync_delay=1000;
set global binlog_group_commit_sync_no_delay_count=100;
从库执行
stop slave;
show variables like '%slave_parallel%';
set global slave_parallel_type='LOGICAL_CLOCK';
set global slave_parallel_workers=8;
show variables like '%relay_log%';
set global relay_log_recovery=1;#这里提示只读项,无法修改.只能到/my.cnf中配置[mysqld]下增加配置relay_log_recovery=1
set global relay_log_info_repository='TABLE'; #FILE改TABLE是因为TABLE效率更高
重启mysql
验证:主库执行相应操作后, 查看日志表replication_applier_status_by_worker;
从库执行
use performance_schema;
select * from replication_applier_status_by_worker;
查到相应的信息,即代表并行复制已经工作了