一)为什么要有Mysql主从复制?
因为单台的数据库服务器需要承载客户端的读取和写入操作的请求,那么若客户端请求过多,那么服务器就会崩溃导致宕机、那么可以选择Mysql数据库集群的方式来增加Mysql服务处理数据的效率。
二)主从复制原理?
1、在每个事务更新之前,master再二进制文件中记录这些改变,写入二进制文件完成后,master通知存储引擎提交事务;
2、slave开启一个I/O线程,I/O线程再master的binlog中读取事件,如过已经跟上master,他会睡眠等待master产生新的事件,I/O线程将产生的新事件写入到中继日志中。(中继日志一般存放在os的缓存,所以开销比较小)
3、slave中的sql线程在中继日志中读取事件,并重放其中事件而更新slave的数据,使其与master中的数据保持一致;
复制类型:
1、基于语句的复制
2、基于行的复制
3、混合类型的复制
主从复制方式:
基于二进制文件:二进制日志文件;
基于GTID方式:在5.6版本开启的新的方式
工作过程:
1、master更新数据时,会在事务前产生GTID,一同记录到binlog日志中。
2、slave端的I/O 线程将变更的binlog,写入到本地的relay log中。
3、sql线程从relay log中获取GTID,然后对比slave端的binlog是否有记录。
4、如果有记录,说明该GTID的事务已经执行,slave会忽略。
5、如果没有记录,slave就会从relay log中执行该GTID的事务,并记录到binlog。
6、在解析过程中会判断是否有主键,如果有就用二级索引,如果没有就用全部扫描。
优势:
1、更简单的实现failover,不用以前那样在需要找二进制日志文件log_file和位置值log_pos。
2、比传统的复制更加安全可靠。
3、GTID是连续的没有空洞的,保证数据的一致性,零丢失。
4、slave无需知道master的pos值和日志文件值,只需要知道master的ip、用户名、密码即可;