MySQL的binlog的格式及优缺点介绍

本文介绍了MySQL的Binlog日志的三种格式:Statement、Mixed和Row。详细解释了它们各自的优缺点,以及在不同场景下的应用情况。
MySQL binlog日志有三种格式,分别为Statement,MiXED和ROW.

1.Statement:每一条会修改数据的sql都会记录在binlog中。
优点:
binlog文件较小
日志是包含用户执行的原始SQL,方便统计和审计
出现最早,兼容较好
缺点:
存在安全隐患,可能导致主从不一致
对一些系统函数不能准确复制或是不能复制

2.ROW不记录sql语句上下文相关信息,仅保存哪条记录被修改。
优点:
相比statement更加安全的复制格式
在某些情况下复制速度更快(SQL复杂,表有主键)
系统的特殊函数也可以复制
更少的锁
更新和删除语句检查是否有主键,如果有则直接执行,如果没有,看是否有二级索引,如再没有,则全表扫描
缺点:
binlog比较大(myql5.6支持binlog_row_image)
单语句更新(删除)表的行数过多,会形成大量binlog
无法从binlog看见用户执行SQL(5.6中增加binlog_row_query_log_events记录用户的query)

3.Mixed: 是以上两种level的混合使用,一般的语句修改使用statment格式保存binlog,如一些函数,statement无法完成主从复制的操作,则采用row格式保存binlog,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在Statement和Row之间选择一种.新版本的MySQL中队row level模式也被做了优化,并不是所有的修改都会以row level来记录,像遇到表结构变更的时候就会以statement模式来记录。至于update或者delete等修改数据的语句,还是会记录所有行的变更。
优点:
混合使用row和statement格式,对于DDL记录statument,对于table里的行操作记录为row格式。
如果使用innodb表,事务级别使用了READ_COMMITTED or READ_UMCOMMITTED日志级别只能使用row格式。
但是使用ROW格式中DDL语句还是会记录成statement格式。
缺点:
mixed模式中,那么在以下几种情况下自动将binlog模式由SBR模式改成RBR模式。
当DML语句更新一个NDB表
当函数中包含UUID时
2个及以上auto_increment字段的表被更新时
行任何insert delayed语句时
用UDF时
视图中必须要求使用RBR时,例如创建视图使用了UUID()函数

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15498/viewspace-2132115/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/15498/viewspace-2132115/

### mysqldump备份与binlog备份的优缺点对比 #### 一、mysqldump备份的优点 1. **灵活性高** `mysqldump` 支持多种粒度的备份操作,可以从整个数据库实例到单个表甚至特定条件下的记录。通过 `-w/--where` 参数,可以仅导出满足某些条件的数据[^4]。 2. **易于使用和理解** `mysqldump` 是一种逻辑备份工具,生成的是 SQL 脚本文件,可以直接用于查看或编辑。这种脚本形式便于开发者理解和调试[^5]。 3. **跨平台兼容性强** 由于其输出为纯文本 SQL 文件,因此可以在不同的 MySQL 版本之间迁移数据,适合异构环境中的数据传输[^1]。 4. **支持自定义选项** 用户可以通过各种参数(如 `--ignore-table`, `--single-transaction` 等)定制化备份需求,从而优化性能并减少资源消耗[^3]。 --- #### 二、mysqldump备份的缺点 1. **速度较慢** 当处理大规模数据库时,`mysqldump` 需要逐条读取数据并转换成 SQL 插入语句,这可能导致较长的时间开销[^4]。 2. **占用大量磁盘空间** 导出的结果通常是以明文存储的 SQL 文件,相比原始数据可能更加臃肿,尤其是在包含大字段的情况下[^1]。 3. **锁表风险** 如果未启用事务隔离级别(例如 InnoDB 表),可能会因锁定部分表格而导致并发访问受限[^3]。 4. **不适用于实时场景** 它无法捕捉两次全量备份之间的变更情况,因而不适合高频更新业务的需求[^4]。 --- #### 三、binlog备份的优点 1. **高效性** 基于二进制日志 (`binlog`) 的增量备份能够快速捕获最近发生的修改事件,而无需重新执行完整的数据库扫描[^2]。 2. **低延迟特性** 利用 `binlog` 进行时间点恢复 (Point-in-Time Recovery),可精确回滚至任意历史时刻的状态,这对于灾难恢复尤为重要[^4]。 3. **节省存储成本** 相对于频繁做完全备份而言,基于 `binlog` 的增量策略显著降低了所需的硬盘容量以及网络带宽压力[^2]。 4. **持续保护能力** 只要服务器启用了 `binlog` 功能,则每次写入都会被自动记录下来作为后续分析依据或者应急措施的一部分[^5]。 --- #### 四、binlog备份的缺点 1. **复杂程度较高** 设置和管理 `binlog` 备份流程相对繁琐一些,尤其是当涉及到多个节点同步或多线程复制架构下更显得棘手[^4]。 2. **依赖配置正确性** 若主库上的 `expire_logs_days` 或其他相关设置不当,有可能丢失重要的交易信息,进而影响最终一致性验证过程。 3. **难以直接解读内容** 不像 `mysqldump` 输出那样直观易懂,`binlog` 文件本身是由一系列复杂的内部结构组成,解析起来较为困难。 4. **潜在安全隐患** 如果权限控制不够严格的话,敏感的操作命令也可能暴露在外,增加泄密的风险[^1]。 --- ```bash # 示例:如何利用 mysqlbinlog 工具提取指定范围内的 binlog 数据 mysqlbinlog --start-position=245 --stop-position=451 /var/lib/mysql/mysql-bin.000008 > incremental_backup.sql ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值