MySQL 雙機互備的項目實踐
前言
MySQL 雙機互備(也常被稱為主主復(fù)制 / Master-Master 復(fù)制)是一種高可用架構(gòu),兩臺 MySQL 服務(wù)器互為主從,既能各自提供讀寫服務(wù),又能實時同步數(shù)據(jù),避免單節(jié)點故障導(dǎo)致服務(wù)中斷。下面我會用通俗易懂的方式,一步步教你實現(xiàn) MySQL 雙機互備。
一、環(huán)境準備
假設(shè)你有兩臺服務(wù)器,基礎(chǔ)信息如下(請?zhí)鎿Q為你的實際信息):
表格
服務(wù)器 IP 地址 角色
服務(wù)器 A 192.168.1.100 Master1/ Slave2
服務(wù)器 B 192.168.1.101 Master2/ Slave1
前置條件:
兩臺服務(wù)器安裝相同版本的 MySQL(推薦 5.7+ 或 8.0+)。
兩臺服務(wù)器網(wǎng)絡(luò)互通(能 ping 通,且 3306 端口開放)。
關(guān)閉防火墻 / SELinux(或放行 3306 端口)。
兩臺服務(wù)器的 server-id 必須不同(核心)
二、核心配置步驟
1.修改兩臺服務(wù)器的 MySQL 配置文件
MySQL 配置文件通常在 /etc/my.cnf(CentOS/RHEL)或 /etc/mysql/my.cnf(Ubuntu/Debian),編輯配置文件并添加以下內(nèi)容:
服務(wù)器 A(192.168.1.100)配置
server-id=1 #server的唯一標識 auto_increment_offset=1 #自增id起始值 auto_increment_increment=2 #每次自增數(shù)字 log-bin = mysql-bin #打開二進制功能,MASTER主服務(wù)器必須打開此項 max_binlog_size=1024M #binlog單文件最大值 replicate-do-db=mcsxx replicate-do-db=mcsxx_config replicate-ignore-table=mcsxx.sys_num ##忽略不同步的表 replicate-ignore-table=mcsxx.sys_verify ##忽略不同步的表 slave-skip-errors=all # 啟用GTID模式 gtid_mode = ON # 強制GTID一致性檢查 enforce_gtid_consistency = ON # 可選:禁用日志校驗(部分版本需添加) binlog_checksum = NONE log_slave_updates = ON # 必須開啟,確?;鋾r事務(wù)日志傳遞 binlog_format = ROW # 推薦ROW模式
服務(wù)器 B(192.168.1.101)配置
server-id=2 #server的唯一標識 auto_increment_offset=2 #自增id起始值 auto_increment_increment=2 #每次自增數(shù)字 log-bin = mysql-bin #打開二進制功能,MASTER主服務(wù)器必須打開此項 max_binlog_size=1024M #binlog單文件最大值 replicate-do-db=mcsxx replicate-do-db=mcsxx_config replicate-ignore-table=mcsxx.sys_num ##忽略不同步的表 replicate-ignore-table=mcsxx.sys_verify ##忽略不同步的表 slave-skip-errors=all # 啟用GTID模式 gtid_mode = ON # 強制GTID一致性檢查 enforce_gtid_consistency = ON # 可選:禁用日志校驗(部分版本需添加) binlog_checksum = NONE log_slave_updates = ON # 必須開啟,確保互備時事務(wù)日志傳遞 binlog_format = ROW # 推薦ROW模式
修改完成后,重啟兩臺服務(wù)器的 MySQL 服務(wù):
# CentOS/RHEL 7+ systemctl restart mysqld # Ubuntu/Debian systemctl restart mysql
2.創(chuàng)建復(fù)制專用賬號
在兩臺服務(wù)器上分別創(chuàng)建用于復(fù)制的賬號(權(quán)限最小化,只授予復(fù)制權(quán)限):
服務(wù)器 A 上執(zhí)行(給服務(wù)器 B 授權(quán)):
CREATE USER 'repl'@'192.168.1.101' IDENTIFIED BY 'abcmima'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.101'; FLUSH PRIVILEGES; SHOW MASTER STATUS; # 記錄File和Position
服務(wù)器 B上執(zhí)行(給服務(wù)器 A 授權(quán)):
CREATE USER 'repl'@'192.168.1.100' IDENTIFIED BY 'abcmima'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.100'; FLUSH PRIVILEGES; SHOW MASTER STATUS; # 記錄File和Position
3.刪除日志文件(從當(dāng)前開始同步,兩邊都刪掉,然后重啟數(shù)據(jù)庫)
rm -rf mysql-bin.* rm -rf localhost-relay-bin.*
4.配置互為從庫
服務(wù)器 A 上配置(將服務(wù)器 B 設(shè)為主庫)
RESET MASTER; CHANGE MASTER TO MASTER_HOST='192.168.1.101', MASTER_USER='repl', MASTER_PASSWORD='abcmima', MASTER_AUTO_POSITION=1; START SLAVE; show slave status\G
服務(wù)器 B上配置(將服務(wù)器 A 設(shè)為主庫)
RESET MASTER; CHANGE MASTER TO MASTER_HOST='192.168.1.100', MASTER_USER='repl', MASTER_PASSWORD='abcmima', MASTER_AUTO_POSITION=1; START SLAVE; show slave status\G
5.檢查從庫狀態(tài)(關(guān)鍵,兩臺服務(wù)器都需要查詢)
SHOW SLAVE STATUS\G;
關(guān)鍵檢查項:確保 Slave_IO_Running 和 Slave_SQL_Running 都是 Yes,如果是 No,查看 Last_Error 排查問題。
6.驗證數(shù)據(jù)庫
分別在兩臺服務(wù)器上插入修改數(shù)據(jù),另外一臺服務(wù)器上數(shù)據(jù)庫查看有沒有變化。
7.常見問題與注意事項
主鍵沖突:主主復(fù)制的核心是 auto_increment_increment 和 auto_increment_offset 配置,必須保證兩臺服務(wù)器的自增 ID 不重疊。
復(fù)制狀態(tài)異常:如果 Slave_IO_Running 為 No,檢查網(wǎng)絡(luò) / 賬號密碼;如果 Slave_SQL_Running 為 No,檢查數(shù)據(jù)不一致(如主鍵重復(fù))。
只讀設(shè)置:如果想讓其中一臺僅作為備庫(只讀),可將其 read_only = 1(注意:root 用戶不受只讀限制)。
故障切換:如果一臺服務(wù)器宕機,可將業(yè)務(wù)流量切到另一臺,恢復(fù)后重新配置復(fù)制即可。
總結(jié)
MySQL 雙機互備的核心是主主復(fù)制,通過開啟二進制日志、配置不同的 server-id 和自增步長,實現(xiàn)兩臺服務(wù)器數(shù)據(jù)雙向同步。
關(guān)鍵配置項:log-bin(開啟二進制日志)、log_slave_updates = 1(允許從庫寫入二進制日志)、auto_increment_increment/offset(避免主鍵沖突)。
驗證時需雙向測試數(shù)據(jù)同步,核心檢查項是 Slave_IO_Running 和 Slave_SQL_Running 均為 Yes。
到此這篇關(guān)于MySQL 雙機互備的文章就介紹到這了,更多相關(guān)MySQL 雙機互備內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL?B-tree與B+tree索引數(shù)據(jù)結(jié)構(gòu)剖析
這篇文章主要介紹了MySQL?B-tree與B+tree索引數(shù)據(jù)結(jié)構(gòu)剖析,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-08-08
MySQL定時任務(wù)不能正常執(zhí)行的原因分析及解決方法
大家好,本篇文章主要講的是MySQL定時任務(wù)不能正常執(zhí)行的原因分析及解決方法,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12
Docker搭建MySQL并掛載數(shù)據(jù)的全過程
環(huán)境搭建費時費力,但要必不可少,這篇文章主要給大家介紹了關(guān)于Docker搭建MySQL并掛載數(shù)據(jù)的相關(guān)資料,文中通過圖文以及實例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2022-01-01
Linux系統(tǒng)MySQL8.0.19快速安裝配置教程圖解
這篇文章主要介紹了Linux系統(tǒng)MySQL8.0.19快速安裝配置教程,本文通過圖文并茂的形式給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02

