前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql复制系列2-复制的格式

mysql复制系列2-复制的格式

原创
作者头像
wangwei-dba
修改2021-05-10 18:11:13
5920
修改2021-05-10 18:11:13
举报
文章被收录于专栏:mysql-dba

mysql 复制是基于binlog日志的,binlog日志中根据事件类型,事件以不同的格式被记录到二进制日志中,复制的格式由系统变量binlog_format控制,mysql支持三种格式的binlog日志格式设置,各有优缺点:如下

1.基于语句的格式 SBR

主库将sql语句文本记录到二进制日志,在从库上回放时执行sql语句

优点:

<1>技术成熟

<2>写入日志文件数据较少,节省存储空间

<3>日志文件中包含数据变更的原始语句,可用于数据库审计

缺点:

<1>一些执行结果不确定的DML语句,不能使用基于statement格式的复制,会造成主从库数据不一致

<2>UDF用户自定义函数和存储过程执行结果也不确定会导致主从数据不一致

<3>一些内置函数可能无法复制

<4>未使用索引的update语句需要进行全表扫描,基于语句的复制可能比基于行复制锁定的行数多

注意基于语句的复制在隔离级别为read-committed,执行DML操作报错

代码语言:javascript
复制
mysql>  show global variables like '%isolation%';
+-----------------------+----------------+
| Variable_name         | Value          |
+-----------------------+----------------+
| transaction_isolation | READ-COMMITTED |
| tx_isolation          | READ-COMMITTED |
+-----------------------+----------------+

mysql> insert into test1(name) values('xxx');
ERROR 1665 (HY000): Cannot execute statement: impossible to write to binary log since 
BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to 
row-based logging. InnoDB is limited to row-logging when transaction isolation level 
is READ COMMITTED or READ UNCOMMITTED.
mysql> 
mysql> 
mysql> exit;

2.基于行的复制 RBR

主库将产生的事件(每种DML操作对应一组事件)写入到二进制日志中,以事件来表示数据变更,将这些变更事件复制到从库并在从库引用这些事件

优点:

<1>可以正确复制所有数据变更,最安全的复制模式

<2>DML从库需要行锁可能更少(二进制日志记录的是逐行数据变更)

缺点:

<1>生成更多的二进制日志,每行变更都会写到日志,利用二进制日志进行备份恢复时间也就越长

<2>解析二进制日志看不到具体的sql语句(可以通过添加binlog_rows_query_log_events参数来记录原始的sql语句)

3.混合模式的格式(mixed)MBR

主库使用混合格式statement和row记录二进制日志,具体根据二进制日志内容,安全语句按照statement格式记录,不安全语句按照row格式记录

参考 1,2

注意:

代码语言:javascript
复制
使用row格式的二进制日志时,如果从库在更新非事务表时停止了复制线程,则从库可能发生数据不一致,非事务表数据无法
回滚,因此建议使用基于row复制时,所有的表都使用事务存储引擎innodb,在复制环境中关闭数据库前,最好先停止从库的
复制stop slave

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档