一、mysql出现主从同步延迟原因是什么?如何解决?
简答:
原因:master/slave负载过高、网络延迟、机器性能低、MySQL配置不合理
主从延时排查方法:
1、通过监控 show slave status 命令输出的Seconds_Behind_Master参数的值来判断:
2、通过主从中的show processlist命令输出参数状态判断
解决方案:
1、半同步复制
从MySQL5.5开始,MySQL已经支持半同步复制了,半同步复制介于异步复制和同步复制之间,主库在执行完事务后不立刻返回结果给客户端,需要等待至少一个从库接收到并写到relay log中才返回结果给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一个TCP/IP往返耗时的延迟。
2、主库配置
sync_binlog=1,innodb_flush_log_at_trx_commit=1
sync_binlog的默认值是0,MySQL不会将binlog同步到磁盘,其值表示每写多少binlog同步一次磁盘。
innodb_flush_log_at_trx_commit为1表示每一次事务提交或事务外的指令都需要把日志flush到磁盘。
3、服务的基础架构在业务和mysql之间加入memcache或者redis的cache层。降低mysql的读压力。
4、硬件强劲,延迟自然会变小。一句话,缩小延迟的解决方案就是花钱和花时间。
注:
半同步复制mysql semi-sync(半同步复制)半同步复制:
● 5.5集成到mysql,以插件的形式存在,需要单独安装
● 确保事务提交后binlog至少传输到一个从库
● 不保证从库应用完这个事务的binlog
● 性能有一定的降低,响应时间会更长
● 网络异常或从库宕机,卡主主库,直到超时或从库恢复
2、数据库的读写分离软件,MySQL-proxy,amoedb(了解有这两个软件)
3、mysql-mmm 高可用软件
4、MySQL半同步应用
5、MySQL+heartbeat_drbd
6、Xtrabackup物理备份
高可用目的:持续提供服务
集群目的:解决高并发
innodb cluster(MySQL 8.0)
修改配置文件
gtid_mode=on
enforce_gtid_consistency=1
数据库操作-链状
server_1: reset master;
server_2:reset master; change master to master_anto_postion=1; start slave user='repl' password='oracle';
server_3:reset master; change master to master_anto_postion=1; start slave user='repl' password='oracle';
数据库操作-环状
server_1:change master to master_host='123.0.0.1',master_port=3313,master_anto_postion=1;
server_1:start slave user='repl' password='oracle';
查看主从复制架构的监控指标
master: binlog dump thread(发送数据的线程)
slave: I/O thread(接收数据的线程)
single-threaded slaves
multi_threaded slaves




