国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL Binlog三種格式介紹及剖析

2024-07-24 12:32:07
字體:
來源:轉載
供稿:網友
        MySQL Binlog三種格式介紹及剖析:

一.Mysql Binlog格式介紹
 
      MySQL binlog日志有三種格式,分別為Statement,MiXED,以及ROW!
 
1.Statement:每一條會修改數據的sql都會記錄在binlog中。
 
     優點:不需要記錄每一行的變化,減少了binlog日志量,節約了IO,提高性能。(相比row能節約多少性能 與日志量,這個取決于應用的SQL情況,正常同一條記錄修改或者插入row格式所產生的日志量還小于Statement產生的日志量,但是考慮到如果帶條 件的update操作,以及整表刪除,alter表等操作,ROW格式會產生大量日志,因此在考慮是否使用ROW格式日志時應該跟據應用的實際情況,其所 產生的日志量會增加多少,以及帶來的IO性能問題。)
 
       缺點:由于記錄的只是執行語句,為了這些語句能在slave上正確運行,因此還必須記錄每條語句在執行的時候的一些相關信息,以保證所有語句能在slave得到和在master端執行時候相同的結果。另外mysql的復制,像一些特定函數功能,slave可與master上要保持一致會有很多相關問題(如sleep()函數,last_insert_id(),以及user-defined functions(udf)會出現問題).
 
      使用以下函數的語句也無法被復制:
 
* LOAD_FILE()
 
* UUID()
 
* USER()
 
* FOUND_ROWS()
 
* SYSDATE() (除非啟動時啟用了 --sysdate-is-now選項)
 
同時在INSERT ...SELECT 會產生比RBR更多的行級鎖
 
 
2. MixedLevel: 是以上兩種level的混合使用,一般的語句修改使用statment格式保存binlog,如一些函數,statement無法完成主從復制的操作,則 采用row格式保存binlog,MySQL會根據執行的每一條具體的sql語句來區分對待記錄的日志形式,也就是在Statement和Row之間選擇 一種。新版本的MySQL中隊row level模式也被做了優化,并不是所有的修改都會以row level來記錄,像遇到表結構變更的時候就會以statement模式來記錄。至于update或者delete等修改數據的語句,還是會記錄所有行的變更。
 
二.Binlog基本配制與格式設定
 
1.基本配制
 
MySQL binlog日志格式可以通過mysql的my.cnf文件的屬性binlog_format指定。如以下:
 
binlog_format = MIXED            //binlog日志格式
 
log_bin = /mysql-bin.log         //binlog日志名
 
expire_logs_days = 7             //binlog過期清理時間
 
max_binlog_size 100m             //binlog每個日志文件大小
 
 
2. MySQL binlog格式選擇
 
    MySQL對于日志格式的選定原則:如果是采用INSERT,UPDATE,DELETE等直接操作表的情況,則日志格式根據binlog_format的設定而記錄,如果是采用GRANT,REVOKE,SET PASSWORD等管理語句來做的話,那么無論如何都采用SBR模式記錄。
 
 
三.MySQL binlog日志分析
 
通過MySQL binlog指令查看具體的mysql日志,如下:
 
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
SET TIMESTAMP=1350355892/*!*/;
 
BEGIN
 
/*!*/;
 
# at 1643330
 
#121016 10:51:32 server id 1 end_log_pos 1643885 Query thread_id=272571 exec_time=0 error_code=0
 
SET TIMESTAMP=1350355892/*!*/;
 
Insert into T_test….)
 
/*!*/;
 
# at 1643885
 
#121016 10:51:32 server id 1 end_log_pos 1643912 Xid = 0
 
COMMIT/*!*/;
 
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 開始事物的時間:
 
SET TIMESTAMP=1350355892/*!*/;
 
BEGIN
 
Mixed日志說明:
 
在slave日志同步過程中,對于使用now這樣的時間函數,MIXED日志格式,會在日志中產生對應的 unix_timestamp()*1000的時間字符串,slave在完成同步時,取用的是sqlEvent發生的時間來保證數據的準確性。另外對于一些功能性函數slave能完成相應的數據同步,而對于上面指定的一些類似于UDF函數,導致Slave無法知曉的情況,則會采用ROW格式存儲這些 Binlog,以保證產生的Binlog可以供Slave完成數據同步。

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 太白县| 义乌市| 罗城| 禹城市| 新干县| 定西市| 措勤县| 南城县| 分宜县| 永泰县| 江西省| 余干县| 南江县| 淳安县| 德化县| 方山县| 伊春市| 凉山| 金阳县| 石门县| 广德县| 新和县| 台前县| 博客| 修武县| 紫云| 双桥区| 合水县| 房产| 扎兰屯市| 马龙县| 三亚市| 西林县| 依兰县| 连城县| 台湾省| 宁波市| 双鸭山市| 兴文县| 武定县| 西安市|