《高性能MySQL》の复制
2016-04-26 00:00
316 查看
0x00前言
本书讲述到定稿前的MySQL5.5版,所以下面内容的适用范围止步于MySQL5.5。本文仅仅强调书中讲述的重中之重,以便快速查阅,详细的内容还请认真阅读书本和MySQL的官方文档。
0x01简介
本章阐述所有与复制相关的内容简要介绍复制如何工作
讨论基本的复制服务搭建
与复制相关的配置
如何管理和优化复制服务器
0x02复制概述
MySQL支持两种复制方式:基于行的复制和基于语句的复制。都是通过主库上记录二进制日志,虽然有开销,但是不会很大。
同一时间点备库上的数据可能与主库存在不一致性,并无法保证主备之间的延迟。
通过复制可以将读操作指向备库来获得更好地读扩展。
目前备库只能串行化执行。
复制解决的问题
数据分布负载均衡
备份
高可用性和故障切换
MySQL升级
复制如何工作
主库把数据更改记录到二进制日志中。备库将主库上的日志复制到自己的中继日志中。
备库读取中继日志中的事件,将其重放到备库数据之上。
<!-- more -->
0x03配置复制(略)
0x04复制的原理
现在一般使用基于行的复制更佳。基于语句的复制(逻辑复制)
优点
实现相当简单不用太多带宽
容易理解
缺点
很多情况无法正确复制,如使用了now()等函数若使用了触发器或者存储过程也最好不要使用
基于行的复制
优点
减少锁的使用,更高效地复制数据占用更少的CPU
解决数据不一致的情况
缺点
无法知道服务器正在做什么无法处理诸如在备库修改表的schema的情况
带宽较高
0x05复制拓扑(往后补充图)
MySQL的复制有一个限制:每个备库只能有一个主库,但是可以用一些其他方法来解决这样的限制。一主库多备库(多用于备份和读写分离)
备库之间根本没有交互。有以下用途:为不同的角色使用不同的备库
可把一个备库当做代用的主库
把备库放在远程数据中心,用作灾难恢复
备份,培训,开发,测试
主动-主动模式下的主-主复制
用于两个处于不同地理位置的办公室,并且都需要一份可写的数据拷贝。弊大于利。主动-被动模式下的主-主复制
切换主动被动服务器很方便。拥有备库的主-主结构(用于增加冗余)
环形复制(要避免成环)
主库、分发主库以及备库
当备库足够多时。会对主库造成很大的负载,于是需要采用blackhole存储引擎的分发主库。不一定只使用一个分发主库。
blackhole表没有任何数据,但是目前有bug
树或金字塔形
定制的复制方案
选择复制性分离功能(分离OLTP和OLAP)
数据归档
将备库用作全文索引
只读备库
模拟多主库复制
创建没有数据的日志服务器
0x06复制和容量规划
主备库的模式下,并不是增加备库就能线性增加读写功能。并且在开启复制功能时,要考虑监控延时,可用性。0x07 MySQL复制的高级特性
半同步复制
可以帮助确保备库拥有主库数据的拷贝,减少潜在的数据丢失危机。有助于备库提供更好地冗余度和持久性。半同步复制在提交过程中增加一个延迟:当提交事务时,在客户端接收到查询结束反馈前必须保证二进制日志已经传输
到至少一台备库上。
在主库上已经完成事务提交,只有通知客户端被延迟了。
备库在接收到事务后发送反馈而非(备库)完成事务后发送。
如果备库一直没有回应已收到事件,会超时并转化为正常的异步复制模式。
复制心跳
保持备库一直与主库相联系,避免悄无声息地断开连接。0x08小结
KISS原则(Keep It Simple Stupid),用简单的就好。监控,监控,监控,重要的事情说三遍。
理解复制的异步本质,且设计你的应用避免或容忍从备库读取脏数据。
在一个复制拓扑中不要写入多于一个服务器,把备库配置为只读,并降低权限以阻止对数据的改变。
打开本章锁讨论的明智且安全的设置。(往后补充)
引用
《高性能MySQL · 第三版》相关文章推荐
- Mysql基本语句
- MySql 1030 Error
- mysql 建立procedure总是报错
- mysql的数据库的备份与恢复
- mysql innodb启动失败无法重启的处理方法
- mysql 中的时间类型的小总结
- MySql5.6 Window超详细安装教程
- MySQL zip格式安装
- MySql语句大全:创建、授权、查询、修改等
- MySQL 1130...is not allowed to connect to this MySql server
- mysql-5.6.28源码安装 整个安装过程详细教程,详解
- mysql
- MySQL的表分区详解
- MySQL操作命令及运算符
- mysql数据库导入导出
- mysql的存储过程,视图的创建
- 数据库 --> MySQL存储引擎介绍
- mysql 数据库问题com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
- 未能加载文件或程序集“MySql.Data, Version=6.9.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d”或它的某一个依赖项
- MySQL查询一小时之内的数据