1 什么是复制
同它字面的意思一样,复制要解决的问题就是让一台服务器的数据同其他服务器保持同步,同文件copy等的意思相同,就是将修改的数据从一台数据库服务器拷贝到另外一台或者多台数据库服务器。
2 为何要有这玩意
解决高并发和系统的水平伸缩通常需要采用读写分离架构,通过将主库产生的数据同步到多个备库,然后将读操作分担到备库中,这个同步就需要使用复制技术。
为了保障系统的高可用性需要将数据做冗余备份,复制是备份的基础,后面专门介绍二者的不同之处。
3 复制原理
复制是通过在主库中记录二进制日志,然后在备库上重放日志的方式实现的。
复制的架构如下图所示:
[img]http://dl2.iteye.com/upload/attachment/0104/3029/8220e61f-5d4f-3d6f-bac2-dd0e397ddb6f.jpg[/img]
1)主库将数据修改记录到二进制日志中,也称为bin log。
2)备库IO线程将主库的日志复制到备库的中继日志中,也称为relay log。
3)备库的SQL线程重放中继日志,将数据同步。
4 行复制和语句复制,各自的优缺点
MySQL支持基于行的复制和基于语句的复制,两种复制方式。
4.1 基于语句的复制
这种方式是主库记录下数据修改的语句,备库上将这些语句再重放一遍。
优点:
1)实现简单。
2)占用的带宽小。例如如果更新一个大表 update tbl set col='两种复制的优缺点',如果基于语句复制,仅仅需要重放一个SQL语句,但如果基于行的复制,则需要重放所有的数据修改。
缺点:
1)如果语句中含有时间戳等函数,则复制后会有差异。
2)更新必须是串行的,否则并发情况下可能会出现问题。
3)如果存在触发器或者存储过程,经常会有问题。
4.2 基于行的复制
这种方式下主库记录的是实际修改的数据,备库上重放这些修改。
优点:
1)可以正确的复制每一行。
2)无需重放用于更新的查询,开销小。例如将一个大表的数据做汇总,然后汇入到小表中,这种方式下如果采用基于语句的复制,则对于大表的汇总需要在备库上重新统计一遍,而基于行的复制,则只需要重放更新到汇总表的少量记录即可。
要尽量避免此类语句采取基于语句的复制,这样会在备库消耗很多的CPU,加大备库的延迟,可以考虑将此类语句移到应用中,在应用中解决。
缺点:
1)无法判断主库上执行了哪些SQL语句
MySQL在两者之间进行动态切换,默认采用基于语句的复制,如果发现语句如果无法被正确的复制,则切换成基于行的复制。
5复制和备份的区别
举个例子,如果在主库上误执行了drop table tbl 操作,复制会将备库的这个表也干掉,而备份可以帮助您从错误的操作中恢复回来。
关于这个主题,还有很多东东,笔者非DBA,我觉得知道这些就差不多了。
《高性能MySQL》
io线程 mysql主从复制 mysql 主从复制原理
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
mysql异步复制和主从复制 mysql 主从复制 io线程中断
现今大部分MySQL集群都是以主从复制为基础,如MHA、MGR、第三方中间件等,一旦主从复制出现异常,整体集群都会受到影响,主从复制出现异常分为两类:IO线程异常与SQL线程异常。IO线程异常,常见有:复制用户或密码错误网络不稳定复制心跳时间大于slave_net_timeout参数,IO线程空闲被终断SQL线程异常,常见有:复制点指定错误主键或唯一键冲突记录不存在表结构不一致今天所讲案例便是SQ
mysql异步复制和主从复制 mysql 主从 mysql 主从复制 mysql 修改字段长度 mysql 时间转换 -
mysql主从复制原理 mysql主从复制实现原理
MySQL 数据库的高可用性架构: 集群,读写分离,主备。而后面两种都是通过复制来实现的。下面将简单介绍复制的原理及配置,以及一些常见的问题。 【优点】
mysql主从复制原理 数据库 服务器 MySQL 数据