以下內容基於mysql5.7官方文件
複製之所以有效,是因為從源讀取了寫入二進位制日誌的事件,然後在副本上對其進行了處理。根據事件的型別,事件以不同的格式記錄在二進位制日誌中。使用的複製格式對應於將事件記錄在源的二進位制日誌中時使用的二進位制日誌記錄格式。二進位制日誌記錄格式有以下三種:
使用基於語句的二進位制日誌記錄時,源會將sql語句寫入二進位制日誌。將源複製到副本可以通過在副本上執行sql語句來進行。這稱為
基於語句的複製(可以縮寫為 sbr),它對應基於mysql語句的二進位制日誌記錄格式。
使用基於行的日誌記錄時,源會將事件寫入
二進位制日誌,以指示如何更改各個錶行。通過將表示對錶行所做的更改的事件複製到副本,可以將源複製到副本。這稱為基於行的複製(可以縮寫為rbr)。
您還可以配置mysql以同時使用基於語句的記錄和基於行的記錄,這取決於哪種記錄最適合記錄更改。這稱為混合格式日誌記錄。使用混合格式日誌記錄時,預設情況下使用基於語句的日誌。根據某些語句以及所使用的儲存引擎,在特定情況下,日誌會自動切換為基於行的日誌。使用混合格式的複製稱為基於混合的複製 或混合格式的複製。
在mysql 5.7.7之前,基於語句的格式是預設格式。在mysql 5.7.7和更高版本中,基於行的格式是預設格式。
正在執行的mysql伺服器中的日誌記錄格式是通過設定 binlog_format系統變數來實現的。可以使用會話或全域性範圍設定此變數。。設定當前會話的變數僅持續到該會話結束,並且其他會話看不到該更改。全域性設定變數對更改後連線的客戶端生效,但不適用於任何當前客戶端會話,包括更改了變數設定的會話。要使全域性系統變數設定永久生效,以便將其應用於伺服器重新啟動之後,那就必須在配置檔案中進行設定。
每種二進位制日誌記錄格式都有優點和缺點。對於大多數使用者,混合複製格式應提供資料完整性和效能的最佳組合。但是,如果您希望在執行某些任務時利用特定於基於語句或基於行的複製格式的功能,則可以使用本節中的資訊(該摘要概述了它們的相對優缺點)來實現以下目的:確定最適合您需求的複製格式。
1、成熟的技術。
2、寫入日誌檔案的資料更少。當更新或刪除影響許多行時,這將導致 日誌檔案所需的儲存空間大大減少。這也意味著可以更快地完成備份的備份和還原。
3、日誌檔案包含所有進行了任何更改的語句,因此它們可用於審核資料庫。
1、使用基於語句的複製時,很難複製任何不確定性的行為。例如:delete和 update使用不帶limit子句的 語句order
by是不確定的。
2、確定性udf必須應用於副本。
3、使用基於語句的複製無法正確複製使用以下任何功能的語句:
load_file(
)uuid(
), uuid_short(
)user()
found_rows(
)sysdate(
)(除非源和副本都使用該--sysdate-is-now 選項啟動 )
get_lock(
)is_free_lock(
)is_used_lock(
)master_pos_wait(
)rand(
)release_lock(
)sleep(
)version(
)但是,所有其他功能都可以使用基於語句的複製正確地複製,包括 now
()等等。
使用基於語句的複製無法正確複製的語句會記錄一條警告,如下所示:
[warning] statement is
not safe to log in statement format.
4、insert..
.select的語句複製與基於行的複製相比,需要更多的行級鎖。
5、update
where的語句複製與基於行的複製相比,要求進行表掃瞄的語句(因為在子句中未使用索引 )必須鎖定更多的行。
6、對於innodb:使用auto_increment的insert語句會 阻塞其他非衝突的insert 語句。
7、對於複雜的語句,在更新或插入行之前,必須在副本上評估並執行該語句。對於基於行的複製,副本僅需修改受影響的行,而無需執行完整語句。
8、如果對副本的評估存在錯誤,尤其是在執行複雜的語句時,基於語句的複製可能會隨著時間的流逝緩慢地增加受影響行上的錯誤餘量。請參見 第16.4
.1.27節「複製過程中的複製錯誤」。
9、儲存的函式以與now
()呼叫語句相同的值執行 。但是,儲存過程不是這樣。
10、確定性udf必須應用於副本。
11、表定義在源和副本上必須(幾乎)相同。
1、所有更改都可以複製。這是最安全的複製形式。
2、對於以下型別的語句,源上需要的行鎖更少,從而實現更高的併發性:
使用auto_increment的插入語句
update或delete語句,其中的where子句不使用鍵或不更改大多數已檢查的行。
update或 delete帶有where不使用鍵或不更改大部分已檢查行的子句的語句 。
3、對於任何insert、update或delete語句,副本上所需的行鎖更少。
1、rbrhh會生成更多記錄的資料。為了複製dml語句(例如更新或刪除語句),基於語句的複製只將該語句寫入二進位制日誌。相反,基於行的複製將每個更改的行寫入二進位制日誌。如果該語句更改了很多行,基於行的複製可能會向二進位制日誌寫入更多的資料;即使對於回滾的語句也是如此。這也意味著,建立和恢復備份可能需要更多的時間。此外,二進位制日誌被鎖定較長時間以寫入資料,這可能會導致併發性問題。使用binlog_row_image=minimal可以大大減少這個缺點。
2、生成大型blob值使用基於行的複製比使用基於語句的複製花費更長的時間。這是因為記錄的是blob列值,而不是生成資料的語句。
3、您無法在副本上看到從源接收和執行了哪些語句。但是,您可以看到使用mysqlbinlog更改了哪些資料。
4、對於使用myisam 儲存引擎的表,將副本insert作為基於行的事件應用於二進位制日誌時,與將副本作為語句應用於語句相比,在副本上需要對語句進行更強的鎖定。這是因為在myisam使用基於行的複製時,不支援在表上進行併發插入。
IP首部資料報格式大解析
p資料報首部格式 tcp ip協議定義了乙個在網際網路上傳輸的包,稱為ip資料報 ip datagram 這是乙個與硬體無關的虛擬包,由首部和資料兩部分組成,其格式如圖所示。首部的前一部分是固定長度,共20位元組,是所有ip資料報必須具有的。在首部的固定部分的後面是一些可選字段,其長度是可變的。首部...
融資融券大解析
10月5日,證監會宣布將在近期發布融資融券業務的相關通知。由此,醞釀已久的融資融券業務即將開始試點。這一訊息,讓市場上眾多的投資者躍躍欲試。自己能否參與 如何操作以及需要關注的重點等問題,也成為大眾關注的焦點。對此,業內人士從各個方面給投資者提出了相關建議和分析。本報記者 金蘋蘋 概念解析 屬保證金...
Mac OS電源管理大解析
睡眠模式 hibernatemode 也就是mac在睡眠模式下面的工作方式,目前主要有3種。hibernatemode 0 睡眠時記憶體保持供電,其他部件斷電,記憶體資料不寫入硬碟。優點是可以快速喚醒 快速睡眠,因為記憶體保持供電,無論是喚醒還是進入睡眠都是1秒內的事情 節省ssd空間和壽命,因為記...