1. 程式人生 > 其它 >15、mysql主從複製的原理

15、mysql主從複製的原理

mysql主從複製

要想實現mysql的主從複製需要先了解二進位制日誌(bin log)和中繼日誌(relay log)。

二進位制日誌(bin log)

binlog即binary log,二進位制日誌檔案,也叫作變更日誌(update log),資料庫服務每次重啟之後都會生成一個對應的bin log日誌檔案。它記錄了資料庫所有執行的DDL(資料庫定義語言) 和 DML(資料庫操作語言) 等資料庫更新事件的語句,但是不包含沒有修改任何資料的語句(如資料查詢語句select、show等)。它是事件形式記錄並儲存在二進位制檔案中

bin log檔案的作用

  • 資料恢復:如果DBA誤操作使mysql資料庫中的資料刪除並提交了事務,這時可以通過二進位制日誌檔案來檢視使用者執行了哪些操作對資料庫伺服器進行了修改,然後根據二進位制日誌檔案中的記錄來恢復資料庫中的資料。
  • 資料複製:由於日誌的延續性和時效性,master主伺服器把二進位制檔案傳遞給slaves從伺服器來達到master和slaves資料一致的目的。(資料的備份、主備、主主、主從的場景都需要bin log來同步資料,保證資料的一致性)

開啟bin log日誌

1、看記錄二進位制日誌是否開啟:在MySQL8中預設情況下,二進位制檔案是開啟的。

2、日誌的引數設定

方式1、永久性方式
修改my.cnf
[mysqld]
#啟用二進位制日誌
log-bin=binlog
binlog_expire_logs_seconds=600
max_binlog_size=100M

設定my.cnf之後,然後重啟mysql服務
systemctl restart mysqld


重啟之後,重新檢視bin log日誌

設定帶資料夾的bin log日誌存放目錄時,一定要該目錄為mysql使用者
[mysqld]
log-bin="/var/lib/mysql/binlog/log"

修改該目錄的屬主、屬組
chown -R -v mysql:mysql binlog

方式2:臨時性方式
在mysql8中只有會話級別的設定,沒有了global級別的設定。

檢視bin log日誌

1、當MySQL建立二進位制日誌檔案時,先建立一個以“filename”為名稱、以“.index”為字尾的檔案,再建立一個以“filename”為名稱、以“.000001”為字尾的檔案。
2、MySQL服務重新啟動一次 ,以“.000001”為字尾的檔案就會增加一個,並且字尾名按1遞增。即日誌檔案的個數與MySQL服務啟動的次數相同;如果日誌長度超過了 max_binlog_size 的上限(預設是1GB),就會建立一個新的日誌檔案。