1.主从复制:
1.1 它是什么?
主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库,主数据库一般是准实时的业务数据库。您看,像在mysql数据库中,支持单项、异步赋值。在赋值过程中,一个服务器充当主服务器,而另外一台服务器充当从服务器。此时主服务器会将更新信息写入到一个特定的二进制文件中。并会维护文件的一个索引用来跟踪日志循环。这个日志可以记录并发送到从服务器的更新中去。当一台从服务器连接到主服务器时,从服务器会通知主服务器从服务器的日志文件中读取最后一次成功更新的位置。然后从服务器会接收从哪个时刻起发生的任何更新,然后锁住并等到主服务器通知新的更新!
1.2 原理图:
1.3步骤:
2.基本原则:
3.最大的问题:
就是主于从的延时! 主库宕机后,数据可能丢失 从库只有一个sql Thread,主库写压力大,复制很可能延时 解决方法:
半同步复制—解决数据丢失的问题 并行复制—-解决从库复制延迟的问题
4.主从复制的好处:
复制的目的让一台服务器的数据与其他服务器保持同步,一台主库的数据可以同步到多台备库上,备库本身也可以配置为另一台服务器的主库。主库备库之间可以用多种不同的组合方式。 MySQL支持的复制方式有两种:
(1)基于行的复制。MySQL5.1版本才加入进来。这种方式会将实际数据记录在二进制日志中,最大的好处是可以正确地复制每一行。一些语句可以被更加有效地复制。这种模式在备库上的开销会小很多,更加高效。因为每一行的数据都会被记录到二进制日志中,使得二进制日志事件相当庞大,而且会给主库上记录日志和复制增加额外的复制,更慢的日志记录会降低并发度。
(2)基于语句的复制。称为逻辑复制,从MySQL3.23版本开始就存在。主库会记录那些造成数据更改的查询,当备库读取并重放这些事件的时候,实际上只是把执行过的SQL再执行一遍。优点是实现相简单,不会使用太多带宽,因为二进制日志的事件更加紧凑。但可能会存在一些无法被正确复制的SQL,还有就是更新必须是串行的,意味着需要更多的锁。
没有哪种模式是完美的,MySQL能够在这两种复制模式间动态切换。 默认情况下使用的是基于语句的复制方式,但如果发现语句无法被正确地复制,就切换到基于行的复制模式。
相同点:
两种复制方式都是通过在主库上面记录二进制日志,在备库上面重放日志的方式实现异步的数据复制。所以,同一时刻备库的数据可能会与主库不一致的,并且无法保证主从之间的延迟。 MySQL的复制大部分是向后兼容,新版本的服务器可以作为老版本服务器的备库,但是老版本不能作为新版本的备库。原因是老版本的服务器可能没办法解析新版本服务器用的新特性或语法,另外所使用的二进制文件格式也可能不同。 复制解决的问题:数据的分布、负载均衡、备份、高可用和故障切换、MySQL升级测试。
|