目录
1. MySQL 复制 12-4
复制是 MySQL 的一项功能,它使服务器能够将更改从一个实例复
制到另一个实例
• 主服务器 (master) 将所有数据和结构更改记录到二进制日志中
二进制日志格式是基于语句的、基于行的或混合的
• 从属服务器 (slave) 从主服务器请求二进制日志并在本地应用其
内容
它记录所有接收和应用的事件的状态,以便在服务器重启或
网络故障后可以从停止的位置恢复
2. 复制主服务器和从属服务器 12-5
• 一个中继从属服务器可以用作另一个从属服务器的主服务器• 更改会传播到更多的从属服务器
3. 复杂拓扑 12-7
可以使用更复杂的拓扑:• 双向 ( bi-directional ) 拓扑具有两个主服务器,每个主服务器是另一个主服务器的从属服务器• 循环 ( circular ) 拓扑具有任意数量的服务器每个服务器是一个主服务器并且是另一个主服务器的从属服务器对任何主服务器的更改将复制到所有主服务器并非每个从属服务器都必须是主服务器• 多源 ( Multisource ) 复制允许一个从属服务器接收来自多个主服务器的事务
4. 复制冲突 12-10
在包括多个主服务器的所有拓扑中都可能发生冲突• 如果两个客户机几乎同时写入两个主服务器上的同一行,则会无法预测从属服务器上该行的最终值• 最终值取决于中继从属服务器上的事件顺序– 在分层复制中,该行在从属服务器上的最终值由分层结构确定:如果某个中间主服务器更改了行,则从属服务器与主服务器的值不同– 在循环复制中,如果发生冲突,行的最终值在各服务器之间不一致该值取决于每个主服务器上应用事件的顺序
5. 复制用例 12-14
常见用例:• 水平横向扩展 :在多个从属服务器中分布查询工作负荷• 商业智能和分析 : 在从属服务器上运行开销昂贵的报表和分析,使主服务器集中处理生产应用程序• 地理数据分布 : 使用本地应用程序为本地用户提供服务,并将业务智能数据复制到企业服务器。• 高可用性 :在多台服务器之间提供冗余,并实施受控切换或滚动升级。
水平横向扩展复制
• 跨多个服务器分配客户机查询负载:– 客户机将写操作发送到复制主服务器– 客户机将读取操作分布在从属服务器之间使用提供负载均衡的负载均衡器或连接器实现• 由于只有一台服务器接受写操作,因此不会发生冲突– 如果应用程序写入一个值并立即尝试再次读取它,则可能会出现不一致• 横向扩展不透明,必须将客户端修改为:– 写操作在主服务器上进行– 读取操作在一组配置负载均衡的从属服务器间进行– 要处理发生在主服务器到从属服务器的复制延迟而导致的潜在不一致
商业智能和分析复制
• 商业智能工作负载通常对事务数据有不同的性能要求– 由于从多个表中读取许多行,因此吞吐量高– 使用聚合和汇总的长时间运行的查询• 通过将商业智能数据复制到专用于分析的从属服务器,就避免锁定事务工作负载– 为不同的业务单位使用多个从属服务器– 在每个从属服务器上配置索引和存储引擎以针对不同的分析需求进行优化使用复制过滤器或 BLACKHOLE 存储引擎来避免复制不需要存储在每个从属服务器上的表数据
地理数据分布复制
• 将地理相关数据存储在位于主要用户附近的服务器上– 在每个位置使用横向扩展复制来增加更大的本地用户群的潜在吞吐量。• 将部分或全部数据复制到其他位置– 将与位置无关的数据复制到所有位置如用户、产品、类别、活动记录– 将汇总复制到总部企业服务器如销售总量、活动结果、活动分值
使用 BLACKHOLE 存储引擎进行复制
• BLACKHOLE 存储引擎无提示地放弃所有数据更改,而不发出警告– 即使没有任何匹配的数据,它也能接受插入或更新数据的 DML 请求– 它没有任何更多的功能• 二进制日志继续成功记录这些更改• 当中继从属服务器将所有更改复制到深一层的从属服务器,但是自身不需要将数据存储在特定表中时,就可将 BLACKHOLE 用于这些表。
高可用性复制
复制允许各种高可用性用例• 受控切换: 在硬件或系统升级期间使用副本来代替生产服务器。• 服务器冗余: 在系统故障时执行故障转移到副本服务器• 联机模式更改: 在具有多个服务器的环境中执行滚动升级来避免整个系统故障。• 软件升级: 在环境升级过程中在不同版本的 MySQL 之间进行复制。– 从属服务器运行的版本必须比主服务器新– 在升级过程中发出的查询必须受升级过程中使用的所有版本的支持
6. 配置复制主服务器 11-21
• 启用 TCP/IP 网络– 复制不能使用 UNIX 套接字文件• 启用二进制日志– 在复制过程中,每个主服务器将其日志内容发送到每个从属服务器• 创建具有 REPLICATION SLAVE 权限的用户– 每个从属服务器必须登录到主服务器中才能从中进行复制– 在有多个从属服务器的主服务器上,在主机名中指定通配符可以匹配所有从站,或者创建多个用户• 备份主数据库作为从属服务器开始复制的起点• 如果不使用 GTID ,则记录日志坐标– 如果使用 mysqldump 执行备份,就要使用 --master-data 选项
7. 配置复制从属服务器 11-22
• 从主服务器备份恢复– 如果使用 GTID,则验证是否设置了 gtid_purged 变量• 在每个从属服务器上发出 CHANGE MASTER TO 语句,包含:– 主服务器的网络位置MASTER_HOST 和 MASTER_PORT 值或者,在复制期间使用 MASTER_SSL 和相关选项来加密主从服务器之间的网络流量– 复制帐户用户名和口令(具有 REPLICATION SLAVE 权限)MASTER_USER 和 MASTER_PASSWORD 值– 开始复制的二进制日志坐标(如果不使用 GTID)MASTER_LOG_FILE 和 MASTER_LOG_POS 值存储从属服务器开始复制的二进制日志位置如果使用 GTID ,则指定 MASTER_AUTO_POSITION=1