一、什么是主从复制
将一个数据库节点的数据拷贝到一个或多个数据库节点(主节点—>从节点)
二、主从复制的原理
【简述】:将主节点上的变更操作存储到binlog,从节点建立了到主节点的复制关系后,会发起两个线程:IO thread和SQL thread,IO线程负责和主节点建立关系(长连接),将主节点的binlog异步实时保存到relay-log,接着SQL线程实时读取从节点的relay-log,如果relay-log有更新则根据日志内容在从节点上做数据操作。
(1)binlog日志格式:statement /row/mixed,mysql5.7.7之后,row是默认的日志格式
三、主从复制的用途
1、实时灾备,用于故障切换
2、读写分离,从库提供查询服务
3、从库上做备份,避免业务影响
4、主从复制的一些模式:其中,mysql5.7开始支持多主一从
四、主从复制的搭建
1、必要条件:开启log-bin参数、主从server-id不同、relay-log、从库服务器可以连通主库
五、主从复制的问题
1、主机宕机后,数据可能丢失
2、从库只有一个SQL thread,主库写压力大,复制很可能延迟
【解决方案——半同步复制】
(1)半同步复制在5.5集成到mysql,以插件的形式存在,需要单独安装;
(2)确保事务提交后,binlog至少传输到一个从库
(3)不保证从库应用完这个事务的binlog
(4)性能有一定的降低,响应时间会更长;
(5)网络异常或从库宕机,卡住主库,直到超时半同步等待时长或者从库恢复;
【解决方案——并行复制】
(1)并行复制是指:从库多线程apply binlog(多个SQL线程)
(2)在社区版5.6中新增
(3)库级别并行应用binlog,同一个库数据更改还是串行。
(4)mysql5.7版本的并行复制是基于事务组的