MySQL的 Binary Log (Binlog)是MySQL數據庫運行過程中的一種重要日志文件,記錄了所有對MySQL數據庫執行的數據修改語句(如INSERT,UPDATE,DELETE)和數據庫的結構變更語句(如CREATE,ALTER,DROP)。同時,每條記錄內容都包含了該語句執行的精確時間(可以理解為事件的發生時間)。
Binlog主要用于以下三個目的:
-
復制: Binlog用于實現MySQL的主從復制,即從服務器可以讀取主服務器的Binlog來保持與主服務器的同步。主服務器上的所有數據改變(比如增,刪,改)都寫入二進制日志,然后從服務器獲取這些日志,然后在它的本地數據據進行重放這些日志,從而達到數據的一致性。從而實現負載均衡和故障轉移。
-
數據恢復: 當數據庫出現故障時,可以使用Binlog進行點時間恢復。通過回放Binlog日志記錄,可以將數據庫狀態恢復到某一特定時間點的狀態,從而可以恢復數據并最小化數據丟失。
-
審計: Binlog也被用于審計目的。通過審查日志,您可以看到何時對數據進行了更改,以及更改是如何進行的。
Binlog的優勢:
- 數據安全性: Binlog可以提供一種數據恢復手段,在硬件故障或者人為誤操作的情況下,可以通過點時間恢復(PITR)來恢復數據。
- 高可用性: 利用Binlog進行主從復制,可以提升數據的高可用性,實現負載均衡和故障轉移。
- 事務一致性: 所有的事務提交都會在Binlog中依次有所記錄,可以保證ACID中的一致性和持久性。
- 實時性: 使用BinlogJournal存儲方式,可以在事務提交的同時寫Binlog,降低了同步延遲。
下面是基于binlog實現MySQL主備庫配置的主要步驟:
-
在主服務器上啟動二進制日志
在MySQL的配置文件mysqld.cnf中(通常在/etc/mysql/mysql.conf.d/mysqld.cnf),添加如下配置項:
[mysqld] log-bin=mysql-bin # 啟用binlog binlog-format=ROW # 設置binlog格式 server-id=1 # 設置服務器ID,唯一即可 -
在主服務器上創建用于復制的用戶并授權
啟動MySQL服務并登陸MySQL,創建一個用戶mysql_repl,并授予其replication權限:
CREATE USER 'mysql_repl'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'mysql_repl'@'%'; -
獲取主服務器的狀態信息
在主服務器上執行SHOW MASTER STATUS;來獲取當前的二進制日志文件名和位置:
SHOW MASTER STATUS;記住這里的File和Position信息,后面在備機上需要用到。
-
在備服務器上設置服務器ID
進入備服務器的MySQL配置文件,在mysqld.cnf中設置server-id:
[mysqld] server-id=2 # 設置服務器ID,唯一即可 -
在備服務器上配置復制
在備服務器上,配置復制,告訴從服務器去連接主服務器的哪個位置開始復制數據:
CHANGE MASTER TO MASTER_HOST='master_host_name', # 主服務器的IP或者域名 MASTER_USER='replication_user_name', # 主服務器上面創建的用于復制的用戶名 MASTER_PASSWORD='replication_password', # 主服務器上面創建的用于復制的用戶的密碼 MASTER_LOG_FILE='recorded_log_file_name', # 主服務器上面記錄的日志文件名 MASTER_LOG_POS=recorded_log_position; # 主服務器上面記錄的日志位置 -
啟動從服務器復制
在備服務器上,執行START SLAVE;開啟復制過程。
-
檢查主從復制狀態
在備服務器上,執行SHOW SLAVE STATUS\G;查看復制狀態,如果看到 "Slave_IO_Running: Yes" 和 "Slave_SQL_Running: Yes",則意味著主從復制配置成功。