高性能MYSQL(复制)

复制概述
复制解决的基本问题是让一个服务器的数据与其他服务器保持同步。一台主库的数据可以同步到多台备库上,备库本身也可以被配置成另外一台服务器的主库。
复制方法:基于行的复制;基于语句的复制。
实现:在主库上记录二进制日志,在备库重放日志的方式来实现异步数据复制。会出现数据不一致,并且无法保证主备之间的延迟。

复制解决的问题:
1)数据分布:mysql通常不会对带宽造成较大的压力。基于行的复制开销大于语句。
2)复杂均衡:通过mysql复制可以将读操作分布到多个服务器上,实现对密集型应用的优化。
3)备份:不是备份操作,也不能取代备份
4)高可用和故障切换
5)mysql升级测试

配置复制
步骤:1. 在每台服务器上创建复制账号
创建用户账号:这里写图片描述
2. 配置主库和备库
3. 通知备库连接到主库并从主库复制数据。

复制原理
基于语句的复制
优点:实现简单灵活;二进制日志里面的事件更加紧凑
缺点:数据库执行会依赖于其他的一些因素;更新必须是串行的;可能不能正确复制(特别是存储过程)
基于行的复制
将实际数据记录在二进制日志文件中。
好处:可以正确地复制每一行,高效;可以适应任何情况
缺点:查询条件可能很高;语句没在日志里记录,因此无法判断执行了哪些sql语句。

复制拓扑
可以在任意主库和备库中建立复制,只有一个限制:每一个备库只能有一个主库。
复制原则:1)一个mysql备库实例只能有一个主库。2)每个备库必须有一个唯一的服务器ID。3)一个主库可以有多个备库。4)如果打开log_salve_updates选项,一个备库可以把其他主库上的数据变化传播到其他备库。

一主库多备库
使用情况:少量写大量读。
用途:1)为不同角色使用不同的备库
2)把一台备库当作待用的主库,粗略复制没有其他数据传输
3)将一台备库放到远程数据中心,用作灾难恢复。
4)延迟一个或多个备库,以备灾难恢复
5)使用其中一个备库,作为备份。培训、开发或者测试使用服务器。

主动-主动模式下的主-主复制
主-主复制(双主复制或者双向复制)包含两台服务器,每一个都被配置成对方的主库和备库。
使用情景:不同地理位置的办公室。
问题:如何解决两个服务器的写冲突,自动行插入冲突。

主动-被动模式下的主-主复制
主要区别:一台服务器是只读的被动服务器。反复切换主动和被动服务器非常方便。

拥有备库的主-主结构
有点:增加了冗余,对与不同地理位置的复杂拓扑,能够消除站点单点失效的问题。

环形复制
三个或三个以上的主库,每个服务器都是在它之前的服务器的备库,是在它之后的服务器的主库。
缺点:相互依赖,移除某个节点会导致循环,结构脆弱,尽量避免。

主库、分发主库以及备库
如果备库过多,会对主库造成压力,导致大量负载。这时需要从主库移除负载并使用分发主库。

树或金字塔形
优点:减轻主库的负担
缺点:中间层出现任何错误会影响到多个服务器,中间层次越多,处理故障更困难、更复杂。

定制的复制方案
选择性复制:利用访问局部性原理,将需要读的工作集留在内存中,可以复制少量数据到备库中。
分离功能:混合在线事物处理和在线数据分析的查询。
数据归档:在备库上实现数据归档,保留主库上删除过的数据。
备库用作全文索引

复制和容量规划
写操作是复制的瓶颈,很难使用复制来扩展写操作。

复制的问题和解决方案
数据损坏或丢失的错误:主库意外关闭:设置sync_binlog=1。
备库意外关闭

你可能感兴趣的:(数据库)