主从复制多半是用来读写分离的,当然用作数据库备份也是可以的。
模式:
1.日志模式,以日志偏移量读取。
2.GTID模式,以全局事务ID读取,获取没有在从库执行的ID。
第一种没啥优点也没啥缺点,支持多库并行,第二种的话适用单库的多线程并行,可以减少主从的延时。
配置的流程:
主库配置开启主从,创建从库复制权限账号,从库配置开启主从,从库启动。
执行流程:
从库启动命令后,生成意义上的两个线程,IO线程和sql线程,其中IO线程发送命令给主库,主库启动binlog dump线程,用于推送事件消息给从库,此时当主库生成日志时将推送同步消息给从库的IO线程,IO线程读取主库上的日志,同时生成relay log,sql线程获取到relay log后,进行重放。
从上面看出,基本上都是从库的IO线程在进行操作,实际上IO线程共分为日志线程,读线程,写线程,在相应操作时启动。
优化:
日志写入的优化,从刷入磁盘sync_binlog,这个没得选,默认就可以。日志文件的格式,这个也是不用选,默认的mixed。
接下来是网络传输,这个没办法,如果是局域网还行,公网的话,要么加带宽,要么就这样了。
传到从库后,进行重放,默认都是单线程执行。5.7以前的版本按照库来进行并行复制,5.7则可以按照组来并行,在从库设置slave-parallel-type=LOGICAL_CLOCK,也可以关闭从库的日志来减少IO,GTID模式下必须开启。
单主从和单主多从配置都是一样的。