1. 程式人生 > 實用技巧 >mysql binlog 基礎 & 實戰

mysql binlog 基礎 & 實戰

摘抄自: https://juejin.cn/post/6892397821152985102?utm_source=gold_browser_extension#heading-8

1. binlog簡介

binlog在mysql 3.23.14被首次引入,是 mysql server 例項產生的二進位制日誌,記錄的是mysql所有更新資料及可能更新資料(例如一個未命中任何行的delete語句)的語句,binlog與mysql使用的儲存引擎無關,無論使用innodb還是myisam,都會產生相同的binlog。

binlog還包括其他的一些元資料,例如:

  • 重新生成語句的mysql server 的狀態資訊
  • Error code
  • 維護bin log所需要的元資料,例如 rotate events

binlog是mysql在一系列操作中維護的mysql server的全域性狀態的變更鏈路。更通俗一點的說,bin log描述了用於重現mysql server上曾經發生過的所有全域性狀態變更事件。

型別

有三種binlog型別,分別是基於sql語句的日誌(statement base)、基於行的日誌(row base)、混合日誌(mixed base)

  1. statement base

日誌中包含了引起資料變更的sql,例如insert、update、delete等。

缺點:只保留了sql變更,強依賴各個sql的上下文關係,強依賴主從間的完全一致,例如主從複製時可能會有函式表現不一致(例如sleep,current_timestamp)。

  1. row base(since mysql 5.1)

日誌中包含了有效的行變更

缺點:保留了資料變更,會產生大量的資料檔案,例如一條update語句產生的binlog可能都會是巨量的。

  1. mixed base

預設會使用statement日誌,在必要的情況下會切換到row日誌。

用途

主從同步

mysql支援高併發的關鍵,主從同步一般也都會和讀寫分離進行繫結,主庫用於寫入,從庫們進行讀取,這樣可以用從庫分擔大量的讀請求,提升mysql整體的效能。binlog記錄了mysql master節點的資料變更。slave節點通過訂閱的方式,定期同步master的bin log記錄,slave節點將未執行的binlog記錄到relay log 中,relay log和bin log的格式相同。slave節點通過對relay log進行解析、執行,來重現在mysql master節點上發生的變更。

Mysql 主從同步流程

開啟log-bin選項

要保證開啟log-bin選項,mysql才會寫入binlog,如下

mysql> show variables like '%log_bin%';
+---------------------------------+--------------------------------+
| Variable_name          | Value             |
+---------------------------------+--------------------------------+
| log_bin             | ON               |
| log_bin_basename        | /var/lib/mysql/mysql-bin    |
| log_bin_index          | /var/lib/mysql/mysql-bin.index |
| log_bin_trust_function_creators | OFF              |
| log_bin_use_v1_row_events    | OFF              |
| sql_log_bin           | ON               |
+---------------------------------+--------------------------------+
6 rows in set (0.00 sec)
如果發現log_bin為OFF狀態,在/etc/mysql/mysql.conf.d/mysqld.cnf 中 寫入
複製程式碼
log-bin=on
資料備份/恢復
複製程式碼

部分的資料恢復。在mysql用備份檔案進行還原後,將會重新執行在備份檔案後記錄的bin log,這些bin log 保證了mysql 資料不會丟,資料備份。

2. 實戰主從同步 & 資料恢復

以下示例使用 docker for mac,後續可以出一期docker的基本使用