MySQL 5.6 Replication 复制 FAQ
原文请参照MySQL官方文档Reference Manual,版本5.6.10。
复制功能使得数据可以从一个MySQL数据库(master主库)复制到另一个或多个MySQL数据库(slave从库)。缺省情况下,复制是异步的,slave无需保持持久的连接来从master获得更新。这意味着更新能工作在远程连接,甚至是临时间断性的连接上,比如拨号连接服务。根据不同的配置,你能复制master上所有的数据库,或指定的数据库,甚至某一数据库中指定的数据表。
下面是关于复制功能,新手经常问到的问题。
1. slave必须要持久连接到master吗?
不需要。slave可以关机或失去连接几小时甚至几天,然后重新连接获取更新。举例来说,你能在拨号连接网络上建立复制,而该拨号网络只有不定时或短时间的连接。这也意味着,在任何给定时间点,slave不能保证和master保持完全一致,除非你采取某些特别的措施。
为了保证能获取在slave失去连接时的更新,你不能从master上移除包含未完成复制内容的binary二进制日志文件。异步复制能维持工作的条件:slave能从最后一次读取事件的点继续读取binary二进制日志。
2. 复制必须要在master和slave上开启网络功能吗?
是的,必须要在master和slave上开启网络功能。如果网络没有连接,slave就无法连接到master传输binary二进制日志。在每个服务器上检查配置文件,skip-networking选项没有被开启。
3. 如何知道slave比master落后更新了多久?或者说,如何知道slave最后一次更新的日期?
检查 SHOW SLAVE STATUS 输出中的 Seconds_Behind_Master 列。 当slave的SQL线程执行一个从master的读事件,它修改自己的时间为该事件的时间点Timestamp。(这就是为什么TIMESTAMP可以被很好的复制。)在 SHOW PROCESSLIST 输出中的 Time 列,显示的是slave的SQL线程最后一次复制事件中的时间点timestamp和slave服务器的真实时间之间的秒数差。(这一句翻译得好辛苦。) 你能利用这个数值来确定上次复制事件的日期。如果你的slave已经和master断开连接1小时,然后重新连接,你可以在 SHOW PROCESSLIST 输出中的 Time 列立刻看到大的时间数值,如3600。这是因为slave正在执行超过1小时前的语句。
4. 如何强制master阻止更新,直到slave能跟上来?
在master上执行:
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
记录下SHOW语句输出中的复制坐标的值。(当前的binary二进制日志文件的文件名和位置)
在slave执行:(参数使用上一步获得的值)
mysql> SELECT MASTER_POS_WAIT('log_name', log_pos);
这个SELECT语句会保持运行,直到slave根据指定的日志文件和位置完成和master的同步,然后该SELECT语句返回。
在master执行:(解除更新限制)
mysql> UNLOCK TABLES;
5. 设置双向复制,我需要了解什么问题?
MySQL复制当前不支持master和slave之间的任何锁定协议来保证跨服务器分发更新的原子性。(原子性:作为事务一部分的所有步骤或者都发生,或者都不发生。) 举例来说,客户端A在master1上作了一个更新,与此同时,在这个更新传播到master2前,客户端B在master2上也作了一个与客户端A不同的更新,因此,当客户端A的更新到达master2,它要处理的表数据将不同于在master1上的,master2上的更新传播到master1上,也会面临同样的问题。这意味着,除非你确定你的更新与次序无关,或者在客户端代码中采取某些方法处理无序的更新,否则你不能把两个服务器连在一起做成双向复制。
你还应该知道双向复制实际上不能改善更多的性能,每一个服务器都需要作同样数量的更新,就像你只有一个服务器时一样。唯一的区别是可以减少一点锁竞争,原因是来自另一个服务器的更新在slave是顺序进行的。即使如此,这点好处还可能会被网络延迟所抵消。
6. 如何利用复制改善系统的性能?
设置一个服务器作为master,所有的写操作都在它上面完成。然后在预算和机架容量范围内设置尽可能多的slave服务器,把读操作分摊在master和slave服务器上。你还可以以下述参数启动slave,在slave端获得速度上的提升。slave使用非事务性的MyISAM表取代InnoDB表,消除事务的开销来获得更高的速度。
--skip-innodb
--low-priority-updates
--delay-key-write=ALL
7. 如何在我的应用内编写客户端代码使用性能增强的复制?
参考“应用复制于横向扩展”,下面这张图不错。

8. MySQL复制在什么时候,多大程度上能改善我的系统的性能?
MySQL复制能在这样的系统中发挥最大的效能:频繁的读操作,不频繁的写操作。从原理上说,使用单master和多slave方案,你能通过增加slave来扩展系统直到超出网络的带宽,或者你的master不能承受更新的负载增长。
为了确定你在获得的好处能稳定下来前要使用多少slave,确定你的站点能获得多少性能改善,你必须清楚你的查询模式,然后凭经验测定典型master和slave上读和写的总量。(后面一大段举例的内容就不翻译了,偷懒 ... ^_^)
9. 如何利用复制提供冗余或高可用?
如何实现冗余完全取决于你的应用和应用环境设置。高可用方案(故障转移)要求主动的监控,使用自定义的脚本或第三方的工具为MySQL提供故障时转移到slave的支持。
手动处理这一过程,你应该能从一个故障的master切换到一个预先配制好的slave,修改DNS设置,使你的应用连接新的服务器。
10. 如何设置master使用基于语句 statement-based 还是使用基于数据行 row-based 的二进制binary日志格式?
检查 binlog_format 系统变量:
mysql> SHOW VARIABLES LIKE 'binlog_format';
显示的值可能是 STATEMENT, ROW, MIXED 中之一。MIXED模式使用基于行row-based的复制,但是会在特定条件下自动切换到基于语句statement-based的日志。
11. 如何设置slave使用基于行row-based的复制?
slave会自动获知应该使用哪种格式。
12. 如何避免 GRANT 和 REVOKE 语句被复制到slave服务器?
启动服务器使用 --replicate-wild-ignore-table=mysql.% 选项 忽略复制mysql数据库中的数据表。
13. 复制可以工作在跨平台吗?(如master运行在Linux,而slaves运行在Mac OS X或Windows)
是的!(这一点我喜欢)
14. 复制可以工作在不同的硬件架构上吗?(如master运行在64位平台,而slaves运行在32位平台)
是的!(这一点我就更喜欢了)
MySQL 5.6 Replication 复制 FAQ的更多相关文章
- 浅谈MySQL Replication(复制)基本原理
1.MySQL Replication复制进程MySQL的复制(replication)是一个异步的复制,从一个MySQL instace(称之为Master)复制到另一个MySQL instance ...
- MySQL 数据库双向同步复制
MySQL 复制问题的最后一篇,关于双向同步复制架构设计的一些设计要点与制约. 问题和制约 数据库的双主双写并双向同步场景,主要考虑数据完整性.一致性和避免冲突.对于同一个库,同一张表,同一个记录中的 ...
- [MySQL Reference Manual] 18 复制
18 复制 18 复制 18.1 复制配置 18.1.1 基于Binary Log的数据库复制配置 18.1.2 配置基于Binary log的复制 18.1.2.1 设置复制master的配置 18 ...
- 高性能Mysql主从架构的复制原理及配置详解
温习<高性能MySQL>的复制篇. 1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台 ...
- MySQL 5.7 Replication 相关新功能说明
背景: MySQL5.7在主从复制上面相对之前版本多了一些新特性,包括多源复制.基于组提交的并行复制.在线修改Replication Filter.GTID增强.半同步复制增强等.因为都是和复制相关, ...
- MySQL 数据库事务与复制
好久没有写技术文章了,因为一直在思考 「后端分布式」这个系列到底怎么写才合适. 最近基本想清楚了,「后端分布式」包括「分布式存储」和 「分布式计算」两大类. 结合实际工作中碰到的问题,以寻找答案的方式 ...
- MySQL 5.7 并行复制实现原理与调优
MySQL 5.7并行复制时代 众所周知,MySQL的复制延迟是一直被诟病的问题之一,然而在Inside君之前的两篇博客中(1,2)中都已经提到了MySQL 5.7版本已经支持“真正”的并行复制功能, ...
- Mysql主从同步(复制)
目录: mysql主从同步定义 主从同步机制 配置主从同步 配置主服务器 配置从服务器 使用主从同步来备份 使用mysqldump来备份 备份原始文件 ...
- 转:高性能Mysql主从架构的复制原理及配置详解
温习<高性能MySQL>的复制篇. 1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台 ...
随机推荐
- week9:个人博客作业
团队作业(5) 以下内容多数是网上的内容,只是做了整合的过程. 要求 在PM 带领下, 每个团队深入分析下面行业的App, 找到行业的Top 5 (从下面的三个备选中,任选一个行业即可) 英语学习/词 ...
- 作业C#程序分析
阅读下面程序,请回答如下问题: 问题1:这个程序要找的是符合什么条件的数? 问题2:这样的数存在么?符合这一条件的最小的数是什么? 问题3:在电脑上运行这一程序,你估计多长时间才能输出第一个结果?时间 ...
- VS2013安装及测试
一.Visual Studio的安装 首先是Visual Studio英文版的安装,安装完成后,为了用的时候方便,我从官网下载Visual Studio 2013的语言包并安装. 二.进行单元测试. ...
- java 封装,继承,多态基础
什么是封装? 1,对象数据和在.操作该对象的指令都是对象自身的一部分,能够实现尽可能对外部隐藏数据. 2,实际项目开发中,使用封装最多的就是实体类. 什么是继承? 1,继承是面向对象程序设计能提高效率 ...
- Linux 基础一(系统分区、格式化与挂载)
1.Linux 基础之系统分区与格式化 讲分区之前,先说一下硬盘结构:硬盘(机械)的横截面是一个圆,并且被分成等大小的扇区,每个扇区的大小是 512Byte,其中有 446Byte 被用来存储启动信息 ...
- 11th 回忆整个学期——告学弟学妹
告诉后来的学弟学妹,不要因为艰难而却步,坚持下去才知道,山的对面是什么.很多东西或许一开始看起来是无用,甚至无意义的,但是努力去做,你才知道价值所在.不要等一切结束了,才懂得自己错过了什么.
- Codeforces 600E Lomsat gelral(dsu on tree)
dsu on tree板子题.这个trick保证均摊O(nlogn)的复杂度,要求资瓷O(1)将一个元素插入集合,清空集合时每个元素O(1)删除.(当然log的话就变成log^2了) 具体的,每次先遍 ...
- mininet invalid literal for int() with base 10: 'cpu.cfs_period_us:'
问题产生原因:内核编译时没有加入 CONFIG_CFS_BANDWIDTH 选项 http://www.haifux.org/lectures/299/netLec7.pdf https://mail ...
- AtCoder Grand Contest 006
AtCoder Grand Contest 006 吐槽 这套题要改个名字,叫神仙结论题大赛 A - Prefix and Suffix 翻译 给定两个串,求满足前缀是\(S\),后缀是\(T\),并 ...
- 【Luogu P4074】[WC2013]糖果公园(树上带修改莫队)
题目描述 Candyland 有一座糖果公园,公园里不仅有美丽的风景.好玩的游乐项目,还有许多免费糖果的发放点,这引来了许多贪吃的小朋友来糖果公园游玩. 糖果公园的结构十分奇特,它由 \(n\) 个游 ...