原理:
MySQL主從復制的工作原理如下:1. 主服務器產生Binlog日志當主服務器的數據庫發生數據修改操作時,如INSERT、UPDATE、DELETE語句執行,主服務器會記錄這些操作的日志信息到二進制日志文件中。2. 從服務器讀取Binlog日志 從服務器會向主服務器發送請求,主服務器把自己產生的Binlog日志信息發送給從服務器。3. 從服務器應用Binlog日志從服務器接收到Binlog日志后,會按照日志順序執行這些日志里記錄的操作,使數據庫的數據保持一致。4. IO線程和SQL線程主從復制在從服務器上有兩個線程來完成同步工作:- IO線程:負責與主服務器通信,拉取二進制日志事件。- SQL線程:負責解析并執行從IO線程讀取的二進制日志事件,使得slave端數據實時與master保持同步。5. relay log從IO線程讀取到的日志記錄會寫入中繼日志(relay log),然后由SQL線程讀取并解析執行,實現數據庫操作同步。6. 并發插入處理對于并發插入,采用自增步長策略。主從數據庫的id生成取不同offset,防止主從id重復。7. SQL處理復雜的SQL語句如事務或觸發器等,先記錄日志,之后在slave端執行,保證數據一致性。總之,通過主服務器產生binlog日志,從服務器不斷拉取并執行,就能實現主從數據實時同步的目的。兩臺數據庫的數據將實時保持一致。
操作:
一、主從復制概述
MySQL主從復制是通過日志同步的方式,實現主庫數據庫修改同步到從庫數據庫。它可以用于讀寫分離、負載均衡、故障恢復等場景。主從復制基于MySQL的binlog日志功能實現。
二、環境準備
采用的MySQL版本為5.7,采用Linux操作系統。主從服務器硬件配置相同,軟件環境均安裝latest版本MySQL。
三、主庫配置
- 配置my.cnf開啟二進制日志log_bin;
- 設置唯一的server_id;
- 創建用戶與權限用于主從同步;
server-id = 1 #id要唯一
log-bin = mysql-bin #開啟binlog日志
auto-increment-increment = 1 #在Ubuntu系統中MySQL5.5以后已經默認是1
auto-increment-offset = 1
四、從庫配置
- 配置my.cnf開啟二進制日志;
- 設置唯一的server_id;
- 創建用戶與權限用于主從同步;
server-id = 3 #這個設置3
log-bin = mysql-bin #開啟binlog日志
auto-increment-increment = 1 #這兩個參數在Ubuntu系統中MySQL5.5以后都已經默認是1
auto-increment-offset = 1
五、數據同步
主庫鎖表操作:
FLUSH TABLES WITH READ LOCK
5. 在主庫使用mysqldump備份數據;
mysqldump -uroot -p123 --routines --single_transaction --master-data=2 --databases weibo > weibo.sql
6. 恢復備份到從庫;
7.source /tmp/ weibo.sql;
8. 查看日志位點信息; SHOW MASTER STATUS;
-
從庫配置變更點同步主庫; SHOW SLAVE STATUS\G
-
啟動從庫IO、SQL線程;
UNLOCK TABLES;
六、驗證同步
查看Slave狀態變量是否一致,在從庫查看是否同步新增數據
七、處理常見問題
斷線后自動同步、binlog錯誤處理、SQL線程報錯等問題解決辦法
八、總結
此次通過mysqldump+binlog日志方式實現了MySQL主從配置,支持讀寫分離和故障恢復。
以上內容系統性地介紹了MySQL主從配置的全過程,可作為主從實踐參考。如有不足,還請指出,共同進步。
參考鏈接:
https://zahui.fan/posts/86a9c8f5/
https://www.xiadmin.com/39172
https://blog.csdn.net/demored/article/details/123351935
https://www.forasp.cn/html/3021.html
https://www.cnblogs.com/OceanWaves/p/17312432.html