天天看點

MySQL binlog格式及replication格式

1. 檢視配置資訊

select version();                        				# mysql version (8.0)
show master logs;						 				# master binlog
show master status;						 				# master 狀态
show global variables like '%log_bin%';					# binlog 是否開啟
show global variables like 'log_bin_basename';			# binlog 位址
show global variables like 'max_binlog_size';			# binlog 最大單檔案大小 (預設1G)
show global variables like 'binlog_format';				# binlog 格式(STATEMENT, ROW, MIXED), 預設ROW
show global variables like 'binlog_expire_logs_seconds' # binlog 過期時間 (預設30天)
show global variables like 'expire_logs_days'			# binlog 過期時間 (mysql 8.0 已廢棄, 改用 binlog_expire_logs_seconds)
           
  • MySQL系統變量手冊

2. binlog格式, replication格式

Mysql複制主要有三種方式:基于SQL語句的複制(statement-based replication, SBR),基于行的複制(row-based replication, RBR),混合模式複制(mixed-based replication, MBR)。對應的,binlog的格式也有三種:STATEMENT,ROW,MIXED。

1、STATEMENT模式(SBR)
每一條會修改資料的sql語句會記錄到binlog中。優點是并不需要記錄每一條sql語句和每一行的資料變化,減少了binlog日志量,節約IO,提高性能。缺點是在某些情況下會導緻master-slave中的資料不一緻(如sleep()函數, last_insert_id(),以及user-defined functions(udf)等會出現問題)

2、ROW模式(RBR)
不記錄每條sql語句的上下文資訊,僅需記錄哪條資料被修改了,修改成什麼樣了。而且不會出現某些特定情況下的存儲過程、或function、或trigger的調用和觸發無法被正确複制的問題。缺點是會産生大量的日志,尤其是alter table的時候會讓日志暴漲。

3、MIXED模式(MBR)
以上兩種模式的混合使用,一般的複制使用STATEMENT模式儲存binlog,對于STATEMENT模式無法複制的操作使用ROW模式儲存binlog,MySQL會根據執行的SQL語句選擇日志儲存方式。
           
  • binlog格式
  • replication格式
  • SBR和RBR的優缺點

繼續閱讀