《高性能MySQL》の复制
2019独角兽企业重金招聘Python工程师标准>>>
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 · 第三版》
转载于:https://my.oschina.net/joshuashaw/blog/666674
《高性能MySQL》の复制相关推荐
- mysql 星 拓扑,高性能MySQL:复制拓扑
可以在任意个主库和备库之间建立复制,只有一个限制:每一个备库只能有一个主库,有很多复杂的拓扑结构,但即使是最简单的也可能会非常灵活.一种拓扑可以有多种用途.关于使用复制的不同方式可以很轻易地写一本书. ...
- 高性能Mysql主从架构的复制原理及配置详解
1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重 ...
- 高性能mysql学习笔记--复制
高性能mysql 十:复制 1,复制的概述 复制解决的基本问题是让一台服务器的数据与其他服务器要保持同步. 两种方式:基于行的复制和基于语句的复制,都是通过在主库上记录二进制日志,在备库上重放日志来实 ...
- 企业级高性能MYSQL的用法---------(二)----------半同步复制 和 全同步复制(组复制)
企业级高性能MYSQL的用法---------(二)----------半同步复制 和 全同步复制(组复制) 1.基于GDIT的半同步复制 为什么要实现mysqI的复制 1.实现服务器负载均衡 2.通 ...
- MySQL复制经常使用拓扑结构具体解释
复制的体系结构有下面一些基本原则: (1) 每一个slave仅仅能有一个master: (2) 每一个slave仅仅能有一个唯一的serverID: (3) 每一个master能够有 ...
- 高性能mysql主存架构
高性能mysql主存架构 MySQL Replication(Master与Slave基本原理及配置) 主从mysql工作原理: 1:过程: (1)Mysql的复制(replication)是一个异步 ...
- 关于不同的MySQL复制解决方案概述
我在解决方案团队工作多年,发现数据库复制总是被误解,甚至有些人根本完全不理解,所以本文将来回顾一下MySQL环境中的复制概念,并且澄清一些大家对于复制的误解. 什么是复制? 复制:保证信息被复制并有目 ...
- 理解MySQL——复制(Replication)
1.复制概述 1.1.复制解决的问题 数据复制技术有以下一些特点: (1) 数据分布 (2) 负载平衡(load balancing) (3) 备份 (4) 高可用性(high ...
- MySQL复制常用拓扑结构详解
复制的体系结构有以下一些基本原则: (1) 每个slave只能有一个master: (2) 每个slave只能有一个唯一的服务器ID: (3) 每个master可以有很多slave: ...
最新文章
- 寻找两个正序数组的中位数——冒泡排序(归并排序)
- Flask搭建二进制音频传送接口
- retinaface人脸姿态
- Android中Activity总结
- MessagePack:一种高效二进制序列化格式
- Win8Metro(C#)数字图像处理--2.33图像非线性变换
- 配置vim在源代码中自动添加作者信息
- .NET微服务方案调查
- ASP.NET Core 添加统一模型验证处理机制
- 17、java中的集合(4)
- php oci8 11,Linux下PHP5.2 Oracle客户端扩展(OCI8)安装
- centos PIL 安装
- Vertically aligning HTML
- ftp 批量上传文件命令
- 网站性能测试工具--MS Web Application Stress Tool
- 美团云的网络架构演进之路
- 如何判断对象是否存活/死去
- css样式,层叠顺序属性z-index
- C语言自学之路三(循环、选择、函数、数组)
- autorunner测试java_AutoRunner自动化测试工具
热门文章
- jquery技巧总结 学习
- GLUT键盘控制(glutKeyboardFunc和glutSpecialFunc)
- 【python初识】数据和对象
- 香港科技园公司“牵手”腾讯 共推香港金融科技发展
- spawn-fcgi启动的一些报错问题
- video标签 在微信浏览器打开,不弹出大的独立窗口 而是直接播放。
- Swift - 使用CollectionView实现图片Gallery画廊效果(左右滑动浏览图片)
- scalikejdbc 学习笔记(4)
- Linux学习总结(9)——Linux 新手必知必会的 10 条 Linux 基本命令
- 开源jar包导入查看源码