码迷,mamicode.com
首页 > 数据库 > 详细

MySQL传统的同步复制的概念和要点

时间:2015-01-21 21:45:45      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:

Mysql Classic Replication

一、传统复制的组成:

1、master server:

用户写数据。

生成binlog。

2、slave server:

接收master传来的binlog。

应用这些binlog从而达到重现master的用户操作。

 

二、传统复制的原理:

1、master跟新的数据,要写binlog。

2、slave在master注册一个i/o_thread进程,来捕获binlog日志的变更。

3、i/o_thread截取日志变更之后写入到本地的relay log里。

4、然后通过sql_thread到relay log 里进行解析执行到slave端。

5、在解析的过程中会判断是否存在主键,如果没有,在查看是否有二级索引,如果没有,就直接全表扫描。

 

 

三、binlog的主要作用:

1、记录master变更的日志文件。

2、记录的格式分为statement(SBR)、ROW(RBR)、MIXED格式。

3、Event是binlog的最小单位。

4、transaction是由多event组成。

5、binlog由两种文件组成:一种是binary log file;另一种是binary log index

 

 

四、binlog的三种日志格式:

1、STATEMENT:记录的是逻辑操作,即用户执行过的sql。

2、ROW:记录的是物理操作,即用户实际修改的数据。

3、MIXED:默认使用statement记录,当遇见不确定的数据时,自动幻化为ROW格式。

注意:

所有的DCL和DDL都是用statement格式记录。

statement是一个sql对应一个event。

row是一个sql对应多个event。

 

 

五、statement和row格式的优缺点:

(一)、statement格式:

优点:

1、binlog文件较小。

2、包含所有用户执行的原始sql,方便统计和审计。

3、可以认为听过binlog数据还原某些操作。

4、主从的binlog 版本协议兼容性较好。

 

缺点:

1、存在安全隐患,可能导致主从不一致。(非常严重了,一般不适用生产环境)

2、对一些特殊函数赋值不准确或者不能复制。

例如:

LOAD_FILE()

UUID()

USER()

FOUND_ROWS()SYSDATA()

 

 

(二)、row格式:

优点:

1、相比statement更加安全的复制格式。(选row模式的更大原因)

2、在某些情况下复制速度更快。(复杂sql,表有主键)

3、产生比statement更少的锁。

4、所有特殊函数都能复制。

 

缺点:

1、binlog文件较大。在MySQL-5.6新特性参数binlog_row_image解决此问题。

2、单sql全表更新会产生大量binlog。

3、无法从binlog看见用户执行的sql。MySQL-5.6新特性参数binlog_rows_query_log_event解决此问题。

4、由于binlog太大,容易造成主从复制端的延迟。

 

 

六、搭建传统方式必要的参数:(一个是数据file,一个是位置pos)

(一)、master端:

1、获取master当前的数据快照,并获取当前的binlog号和pos号。

2、数据快照可以通过mysqldump或者Xtrabackup获取。

3、也可以停机考配数据文件。(此功能在5.6已经不能使用)

 

(二)、slave端:

1、通过获取数据快照搭建一个mysql服务器。

2、然后通过快照的master的binlog文件和pos来开启复制。

 

 

七、传统复制日志补齐的方式:

问题:(一主两从结构)

当master1挂掉了,需要slave1专程master,但是发现slave1的binlog记录已经到了100,而slave2记录的binlog只到90,基于传统日志怎么样进行补齐?

 

解决方法:

1、如果没有用到mha,就会选择slave1作为主库。

2、并在slave1上做show master status得到master的log便宜量。

3、然后在slave2上执行change语句。挂在到slave1上。

 

注意:

1、按照传统的方式很容易出现数据不一致,因为slave2上的90~100之间的数据已经不能同步到slave2上了。

2、这个时候可以利用mha来补救之间的数据。

3、但是在GTID出现之后,MHA已经没有价值了,因为GTID会在master_auto_postion=1;然后自己去匹配GTID的断点,进行数据的不救。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MySQL传统的同步复制的概念和要点

标签:

原文地址:http://www.cnblogs.com/abobo/p/4239875.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!