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

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的断点,进行数据的不救。

时间: 2024-12-12 16:46:32

MySQL传统的同步复制的概念和要点的相关文章

MySQL主从复制半同步复制原理及搭建

在MySQL5.5之前的版本中,MySQL的复制是异步复制,主库和从库的数据之间存在一定的延迟,比如网络故障等各种原因,这样子容易存在隐患就是:当在主库写入一个事务成功后并提交了,但是由于从库延迟没有及时得到主库推送的Binlog日志时,主库突然宕机了,那么此时从库就可能损失这个事务,从而造成主从不一致的状况. 因此我们MySQL5.5版本之后引入了半同步复制的概念 半同步复制的原理: 半同步复制时,为了保证主库上的每一个Binlog事务都能够被可靠的复制到从库上,主库在每次事务成功提交时,并不

为什么要对MySQL做主从同步复制

为什么要对MySQL做主从同步复制 一.MySQL主从方案主要作用 1.读写分离,使数据库能支撑更大的并发 在报表中尤其重要.由于部分报表sql语句非常的慢,导致锁表,影响前台服务.如果前台使用master,报表使用slave,那么报表sql将不会造成前台锁,保证了前台速度. 2.发扬不同表引擎的优点 目前Myisam表的查询速度比innodb略快,而写入并发innodb比myIsam要好.那么,我们可以使用innodb作为master,处理高并发写入,使用master作为slave,接受查询.

MariaDB(MySQL):半同步复制+ssl+复制过滤

一.半同步复制   1.mysql的复制 通过记录主服务器的二进制日志,并在从服务器上进行重放(replay)完成复制,默认都是异步进行的. 2.半同步复制 半同步复制是google贡献给MySQL的一个补丁,在MySQL 5.5之后就支持了,MariaDB都是支持的. MySQL的插件,一般在MySQL安装目录下; 半同步复制插件默认没有启用,需要自己安装,/usr/local/mysql/lib/plugin可以看到semisync_master.so和semisync_slave.so和其

后端分布式系列:分布式存储-MySQL 数据库双向同步复制

MySQL 复制问题的最后一篇,关于双向同步复制架构设计的一些设计要点与制约. 问题和制约 数据库的双主双写并双向同步场景,主要考虑数据完整性.一致性和避免冲突.对于同一个库,同一张表,同一个记录中的同一字段的两地变更,会引发数据一致性判断冲突,尽可能通过业务场景设计规避.双主双写并同步复制可能引发主键冲突,需避免使用数据库自增类主键方案.另外,双向同步潜在可能引发循环同步的问题,需要做回环控制. 如上图所示,复制程序写入时也会产生 binlog,如何识别由复制程序产生的 binlog 并将其过

MySQL数据库半同步复制

半同步复制,是有一个从节点或者一部分从节点与主节点之间是同步复制的,其他的从节点仍是异步复制 半同步复制是谷歌公司贡献给MySQL的一个插件,默认在MySQL中没有此插件,所以要实现主从的版同步复制需要安装此插件 rpm -ql mariadb-server| grep semi #找到需要安装的插件,以so结尾 SHOW PLUGINS; #查看当前支持的插件,此处也能看到myisam和innodb也是插件类型 下面开始介绍如何配置主从版同步复制: 1.创建传统的主从复制功能的mysql,请参

mysql GTID 半同步复制

1)什么是GTID GTID(Global Transaction ID)是对于一个已提交事务的编号,并且是一个全局唯一的编号.GTID实际上是由UUID+TID组成的.其中UUID是一个MySQL实例的唯一标 识,保存在mysql数据目录下的auto.cnf文件里.TID代表了该实例上已经提交的事务数量,并且随着事务提交单调递增.下面是一个GTID的具 体形式:3E11FA47-71CA-11E1-9E33-C80AA9429562:23.2)GTID的作用 根据GTID可以知道事务最初是在哪

MySQL的半同步复制

1>半同步复制的出现: 默认情况下,复制是异步的,就是客户端提交事务给主库,主库将事务写入到存储引擎和binlog中后会立即返回给客户端告诉其事务执行成功.如果此时该事务还未来得及复制到从库上,如果主库在此时发生崩溃或者服务器宕机,会导致主从切换,此时客户端访问新选举的主库时,就会看不到刚提交的数据. 2>半同步复制的原理: mysql5.5开始通过插件的方式支持半同步复制,主库执行完客户端提交的事务后不会立即返回给客户端,而是等待至少一个从库接收到该事务后才返回给客户端. 半同步复制是全同步

烂泥:学习mysql数据库主从同步复制原理

本文由秀依林枫提供友情赞助,首发于烂泥行天下. 说明本篇文章部分转载自互联网. MySQL的Replication(英文为复制)是一个多MySQL数据库做主从同步的方案,特点是异步复制,广泛用在各种对MySQL有更高性能.更高可靠性要求的场合.与之对应的是另一个同步技术是MySQL Cluster,但因为MySQL Cluster配置比较复杂,所以使用者较少. MySQL的Replication是一个异步复制的过程(mysql5.1.7以上版本分为异步复制和半同步两种模式),它是从一个Mysql

mysql数据库主从同步复制原理

MySQL的Replication(英文为复制)是一个多MySQL数据库做主从同步的方案,特点是异步复制,广泛用在各种对MySQL有更高性能.更高可靠性要求的场合.与之对应的是另一个同步技术是MySQL Cluster,但因为MySQL Cluster配置比较复杂,所以使用者较少. MySQL的Replication是一个异步复制的过程(mysql5.1.7以上版本分为异步复制和半同步两种模式),它是从一个Mysql instance(instance英文为实例)(我们称之为Master)复制到