开发者社区> 余二五> 正文

mysql-binlog格式详解

简介:
+关注继续查看
MySQL 5.1 中,在復制(Replication)方面的改進就是引進了新的複制技術:基於行的複制。 簡言之,這種新技術就是關注表中發生變化的記錄,而非以前的照抄 binlog 模式。 從 MySQL 5.1.12 開始,可以用以下三種模式來實現:基於SQL語句的複制(statement-based replication, SBR),基於行的複制(row-based replication, RBR),混合模式複制(mixed-based replication, MBR)。 相應地,binlog的格式也有三種:STATEMENT,ROW,MIXED。MBR 模式中,SBR 模式是默認的。
在運行時可以動態低改變binlog的格式,除了以下幾種情況:
1. 存儲過程或者觸發器中間
2. 啟用了NDB
3. 當前會話試用 RBR 模式,並且已打開了臨時表
如果binlog採用了 MIXED 模式,那麼在以下幾種情況下會自動將binlog的模式由 SBR 模式改成 RBR 模式。
1. 當DML語句更新一個NDB表時
2. 當函數中包含 UUID() 時
3. 2個及以上包含 AUTO_INCREMENT 字段的表被更新時
4. 行任何 INSERT DELAYED 語句時
5. 用 UDF 時
6. 視圖中必須要求使用 RBR 時,例如創建視圖是使用了 UUID() 函數
設定主從復制(Replication)模式的方法非常簡單,只要在以前設定複製配置的基礎上,再加一個參數:
binlog_format=’STATEMENT’
#binlog_format=’ROW’
#binlog_format=’MIXED’
當然了,也可以在運行時動態修改binlog的格式。 例如
mysql> SET SESSION binlog_format = ‘STATEMENT’;
mysql> SET SESSION binlog_format = ‘ROW’;
mysql> SET SESSION binlog_format = ‘MIXED’;
mysql> SET GLOBAL binlog_format = ‘STATEMENT’;
mysql> SET GLOBAL binlog_format = ‘ROW’;
mysql> SET GLOBAL binlog_format = ‘MIXED’;
現在來比較以下 SBR 和 RBR 2中模式各自的優缺點
SBR 的優點:
1. 歷史悠久,技術成熟
2. binlog文件較小
3. binlog中包含了所有資料庫更改信息,可以據此來審核資料庫的安全等情況
4. binlog可以用於實時的還原,而不僅僅用於復制(Replication)
5. 主從版本可以不一樣,從服務器版本可以比主服務器版本高
SBR 的缺點:
1. 不是所有的UPDATE語句都能被複製,尤其是包含不確定操作的時候。
2. 調用具有不確定因素的 UDF 時復制(Replication)也可能出問題
3. 使用以下函數的語句也無法被複製:
* LOAD_FILE()
* UUID()
* USER()
* FOUND_ROWS()
* SYSDATE() (除非啟動時啟用了 –sysdate-is-now 選項)
4. INSERT … SELECT 會產生比 RBR 更多的行級鎖
5. 複製需要進行全表掃描(WHERE 語句中沒有使用到索引)的 UPDATE 時,需要比 RBR 請求更多的行級鎖
6. 對於有 AUTO_INCREMENT 字段的 InnoDB表而言,INSERT 語句會阻塞其他 INSERT 語句
7. 對於一些複雜的語句,在從服務器上的耗資源情況會更嚴重,而 RBR 模式下,只會對那個發生變化的記錄產生影響
8. 存儲函數(不是存儲過程)在被調用的同時也會執行一次 NOW() 函數,這個可以說是壞事也可能是好事
9. 確定了的 UDF 也需要在從服務器上執行
10. 數據表必須幾乎和主服務器保持一致才行,否則可能會導致複製出錯
11. 執行複雜語句如果出錯的話,會消耗更多資源
RBR 的優點:
1. 任何情況都可以被複製,這對複制來說是最安全可靠的
2. 和其他大多數資料庫系統的複制技術一樣
3. 多數情況下,從服務器上的表如果有主鍵的話,複製就會快了很多
4. 複製以下幾種語句時的行鎖更少:
* INSERT … SELECT
* 包含 AUTO_INCREMENT 字段的 INSERT
* 沒有附帶條件或者並沒有修改很多記錄的 UPDATE 或 DELETE 語句
5. 執行 INSERT,UPDATE,DELETE 語句時鎖更少
6. 從服務器上採用多線程來執行複製成為可能
RBR 的缺點:
1. binlog 大了很多
2. 複雜的回滾時 binlog 中會包含大量的數據
3. 主服務器上執行 UPDATE 語句時,所有發生變化的記錄都會寫到 binlog 中,而 SBR 只會寫一次,這會導致頻繁發生
binlog 的並發寫問題
4. UDF 產生的大 BLOB 值會導致複製變慢
5. 無法從 binlog 中看到都複製了寫什麼語句
6. 當在非事務表上執行一段堆積的SQL語句時,最好採用 SBR 模式,否則很容易導致主從服務器的數據不一致情況發生
另外,針對系統庫 mysql 裡面的表發生變化時的處理規則如下:
1. 如果是採用 INSERT,UPDATE,DELETE 直接操作表的情況,則日誌格式根據 binlog_format 的設定而記錄
2. 如果是採用 GRANT,REVOKE,SET PASSWORD 等管理語句來做的話,那麼無論如何都採用 SBR 模式記錄
注:採用 RBR 模式後,能解決很多原先出現的主鍵重複問題




本文转自 fenghao.cn 51CTO博客,原文链接:http://blog.51cto.com/linuxguest/559849,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
20936 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
14918 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
16693 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
13909 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,云吞铺子总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系统盘、创建快照、配置安全组等操作如何登录ECS云服务器控制台? 1、先登录到阿里云ECS服务器控制台 2、点击顶部的“控制台” 3、通过左侧栏,切换到“云服务器ECS”即可,如下图所示 通过ECS控制台的远程连接来登录到云服务器 阿里云ECS云服务器自带远程连接功能,使用该功能可以登录到云服务器,简单且方便,如下图:点击“远程连接”,第一次连接会自动生成6位数字密码,输入密码即可登录到云服务器上。
36523 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
29860 0
+关注
20377
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载