Windows環(huán)境下MySQL主從復(fù)制搭建全步驟(超詳細(xì)實(shí)操版)
前言:
MySQL主從復(fù)制是數(shù)據(jù)庫高可用、讀寫分離架構(gòu)的基礎(chǔ),核心作用是實(shí)現(xiàn)主庫數(shù)據(jù)的實(shí)時(shí)同步,保障數(shù)據(jù)備份與服務(wù)容錯。本文針對Windows環(huán)境(Win10/Win11),從環(huán)境準(zhǔn)備到測試驗(yàn)證,完整拆解主從復(fù)制的搭建流程,同時(shí)梳理常見問題排查方案,適合數(shù)據(jù)庫初學(xué)者或需要快速落地部署的開發(fā)人員。
本文測試環(huán)境:
系統(tǒng):Windows 10 專業(yè)版
MySQL版本:8.0.36(主從庫版本需一致,避免兼容性問題)
架構(gòu):1主1從(單主多從架構(gòu)可復(fù)用此步驟擴(kuò)展)
一、環(huán)境準(zhǔn)備
1.1 核心前提
兩臺Windows主機(jī)(或一臺主機(jī)通過多實(shí)例部署,新手推薦兩臺物理機(jī)/虛擬機(jī),降低配置難度),確保網(wǎng)絡(luò)互通(可通過ping命令測試)。
主從機(jī)均安裝相同版本的MySQL(推薦8.0+,5.7版本步驟類似,配置項(xiàng)略有差異)。
關(guān)閉防火墻或開放MySQL默認(rèn)端口3306(避免端口攔截導(dǎo)致同步失敗)。
1.2 主機(jī)規(guī)劃
| 角色 | IP地址 | MySQL端口 |
|---|---|---|
| 主庫(Master) | 192.168.1.100 | 3306 |
| 從庫(Slave) | 192.168.1.101 | 3306 |
二、主庫(Master)配置
2.1 找到MySQL配置文件
MySQL在Windows環(huán)境下的配置文件默認(rèn)是 my.ini,位置通常在:
- 安裝目錄下(如:D:\Program Files\MySQL\MySQL Server 8.0\my.ini)
- 若未找到,可通過“服務(wù)”查看MySQL服務(wù)的可執(zhí)行路徑,找到對應(yīng)配置文件(右鍵MySQL服務(wù)→屬性→可執(zhí)行文件路徑)。
2.2 修改主庫my.ini配置
在[mysqld]節(jié)點(diǎn)下添加/修改以下配置(注意:配置項(xiàng)需頂格寫,不能有空格前綴):
# 主庫唯一標(biāo)識(必須為1-2^32-1的整數(shù),主從庫不能重復(fù)) server-id=1 # 開啟二進(jìn)制日志(主從復(fù)制的核心,記錄所有數(shù)據(jù)變更操作) log-bin=mysql-bin # 二進(jìn)制日志格式(推薦ROW模式,只記錄數(shù)據(jù)行變更,避免SQL模式的兼容性問題) binlog-format=ROW # 需要同步的數(shù)據(jù)庫(可指定多個(gè),用逗號分隔;不指定則同步所有庫,除了忽略的庫) binlog-do-db=test_db # 不需要同步的數(shù)據(jù)庫(系統(tǒng)庫必須忽略,避免權(quán)限問題) binlog-ignore-db=mysql binlog-ignore-db=information_schema binlog-ignore-db=performance_schema binlog-ignore-db=sys # 二進(jìn)制日志過期時(shí)間(避免日志文件過大,單位:天) expire_logs_days=7 # 確保每次事務(wù)提交時(shí)都刷新二進(jìn)制日志到磁盤(保證數(shù)據(jù)一致性) sync-binlog=1
2.3 重啟主庫服務(wù)
配置修改后需重啟MySQL服務(wù)生效,兩種方式:
圖形化方式:控制面板→管理工具→服務(wù)→找到“MySQL”→右鍵“重啟”。
命令行方式(管理員權(quán)限打開CMD):
net stop MySQL(停止服務(wù))net start MySQL(啟動服務(wù))
注意:若重啟失敗,大概率是my.ini配置有誤(如語法錯誤、路徑錯誤),需檢查配置文件并修正后重新嘗試。
2.4 主庫創(chuàng)建同步賬號并授權(quán)
從庫需要通過專門的賬號連接主庫進(jìn)行數(shù)據(jù)同步,因此需在主庫創(chuàng)建授權(quán)賬號:
登錄主庫MySQL(命令行或可視化工具如Navicat):
mysql -u root -p(輸入root密碼登錄)創(chuàng)建同步賬號并授權(quán)(MySQL 8.0+語法):
CREATE USER 'slave_user'@'%' IDENTIFIED BY 'Slave@123456';(slave_user為用戶名,%表示允許所有IP連接,密碼需符合MySQL密碼策略)GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%';(授予復(fù)制權(quán)限)FLUSH PRIVILEGES;(刷新權(quán)限生效)
2.5 查看主庫狀態(tài)(關(guān)鍵步驟)
登錄主庫后執(zhí)行以下命令,記錄輸出結(jié)果(后續(xù)配置從庫需用到):
SHOW MASTER STATUS;
輸出示例:
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
|---|---|---|---|
| mysql-bin.000001 | 156 | test_db | mysql,information_schema,… |
關(guān)鍵參數(shù)說明:- File:當(dāng)前二進(jìn)制日志文件名(如mysql-bin.000001)-
Position:當(dāng)前二進(jìn)制日志位置(如156),從庫將從這個(gè)位置開始同步
注意:執(zhí)行完此命令后,不要在主庫執(zhí)行任何寫操作(如插入、更新數(shù)據(jù)),否則Position值會變化,導(dǎo)致后續(xù)同步失敗。
三、從庫(Slave)配置
3.1 修改從庫my.ini配置
同樣找到從庫的my.ini文件,在[mysqld]節(jié)點(diǎn)下添加/修改以下配置:
# 從庫唯一標(biāo)識(必須與主庫不同,如2) server-id=2 # 開啟中繼日志(從庫通過中繼日志同步主庫數(shù)據(jù),避免直接操作主庫日志) relay-log=mysql-relay-bin # 中繼日志格式(與主庫保持一致) relay-log-format=ROW # 需要同步的數(shù)據(jù)庫(與主庫binlog-do-db一致) replicate-do-db=test_db # 不需要同步的數(shù)據(jù)庫(與主庫一致) replicate-ignore-db=mysql replicate-ignore-db=information_schema replicate-ignore-db=performance_schema replicate-ignore-db=sys # 從庫只讀(避免從庫被誤寫,僅對非super權(quán)限用戶生效) read-only=1 # 允許super權(quán)限用戶執(zhí)行寫操作(方便后續(xù)維護(hù),如手動同步數(shù)據(jù)) super-read-only=0
3.2 重啟從庫服務(wù)
同主庫重啟方式,確保配置生效。
3.3 配置從庫連接主庫
登錄從庫MySQL,執(zhí)行以下命令配置主從連接(替換為實(shí)際主庫信息):
CHANGE MASTER TO MASTER_HOST='192.168.1.100', # 主庫IP地址 MASTER_PORT=3306, # 主庫MySQL端口 MASTER_USER='slave_user', # 主庫創(chuàng)建的同步賬號 MASTER_PASSWORD='Slave@123456',# 同步賬號密碼 MASTER_LOG_FILE='mysql-bin.000001', # 主庫SHOW MASTER STATUS輸出的File值 MASTER_LOG_POS=156; # 主庫SHOW MASTER STATUS輸出的Position值
注意:若之前配置過主從,需先執(zhí)行STOP SLAVE;和RESET SLAVE ALL;清除原有配置,再執(zhí)行上述CHANGE MASTER TO命令。
3.4 啟動從庫同步進(jìn)程
執(zhí)行以下命令啟動從庫同步:
START SLAVE;
3.5 查看從庫同步狀態(tài)(核心驗(yàn)證)
執(zhí)行以下命令查看從庫同步狀態(tài):
SHOW SLAVE STATUS\G;
重點(diǎn)關(guān)注以下兩個(gè)參數(shù)(均為Yes則說明同步配置成功):
Slave_IO_Running: Yes:從庫IO線程正常(負(fù)責(zé)連接主庫,讀取主庫二進(jìn)制日志)
Slave_SQL_Running: Yes:從庫SQL線程正常(負(fù)責(zé)執(zhí)行中繼日志中的SQL語句,同步數(shù)據(jù))
輸出示例(關(guān)鍵部分):
Slave_IO_Running: Yes Slave_SQL_Running: Yes Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 156 Relay_Log_File: mysql-relay-bin.000001 Relay_Log_Pos: 320
四、主從復(fù)制測試驗(yàn)證
通過在主庫執(zhí)行數(shù)據(jù)操作,驗(yàn)證從庫是否能正常同步:
4.1 主庫操作
# 1. 創(chuàng)建同步數(shù)據(jù)庫(若已存在可跳過)
CREATE DATABASE IF NOT EXISTS test_db;
USE test_db;
# 2. 創(chuàng)建測試表
CREATE TABLE IF NOT EXISTS user (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age INT
);
# 3. 插入測試數(shù)據(jù)
INSERT INTO user (name, age) VALUES ('張三', 25), ('李四', 30);
4.2 從庫驗(yàn)證
登錄從庫MySQL,執(zhí)行以下命令查看數(shù)據(jù)是否同步:
USE test_db; # 查看表結(jié)構(gòu) DESC user; # 查看數(shù)據(jù)(應(yīng)與主庫一致) SELECT * FROM user;
若從庫能查詢到主庫插入的數(shù)據(jù),說明主從復(fù)制搭建成功!
五、常見問題排查
5.1 Slave_IO_Running: No
主庫IP/端口錯誤:檢查CHANGE MASTER TO中的MASTER_HOST和MASTER_PORT是否正確,可通過ping主庫IP、telnet 主庫IP 3306測試網(wǎng)絡(luò)連通性。
同步賬號密碼錯誤:驗(yàn)證slave_user賬號密碼是否正確,可在從庫用
mysql -h 主庫IP -u slave_user -p測試登錄。主庫二進(jìn)制日志文件名/位置錯誤:重新執(zhí)行主庫的SHOW MASTER STATUS,確認(rèn)MASTER_LOG_FILE和MASTER_LOG_POS是否正確,若錯誤需重新執(zhí)行CHANGE MASTER TO命令修正。
主庫防火墻未開放3306端口:在主庫Windows防火墻中添加入站規(guī)則,允許3306端口通行。
5.2 Slave_SQL_Running: No
主從庫數(shù)據(jù)不一致:比如主庫已存在表,從庫無此表,導(dǎo)致同步SQL執(zhí)行失敗。解決:停止從庫同步(STOP SLAVE;),手動在從庫補(bǔ)全缺失的數(shù)據(jù)/表結(jié)構(gòu),然后重新啟動同步(START SLAVE;)。
從庫存在重復(fù)主鍵:主庫插入的數(shù)據(jù)在從庫已存在,導(dǎo)致主鍵沖突。解決:刪除從庫中沖突的數(shù)據(jù),或修正主從數(shù)據(jù)一致性后重啟同步。
SQL_MODE不兼容:主從庫SQL_MODE設(shè)置不同,導(dǎo)致某些SQL語句在從庫無法執(zhí)行。解決:統(tǒng)一主從庫的SQL_MODE配置(在my.ini中添加sql_mode=xxx,保持一致)。
5.3 主庫重啟后同步失敗
原因:主庫重啟后,二進(jìn)制日志文件名可能變化(如從mysql-bin.000001變?yōu)閙ysql-bin.000002)。
解決:重新在主庫執(zhí)行SHOW MASTER STATUS,記錄新的File和Position,然后在從庫執(zhí)行STOP SLAVE; → 重新執(zhí)行CHANGE MASTER TO命令(更新MASTER_LOG_FILE和MASTER_LOG_POS)→ START SLAVE;。
六、總結(jié)
Windows環(huán)境下MySQL主從復(fù)制搭建的核心步驟可概括為:
- 主從庫配置文件修改(核心是
server-id和日志配置); - 主庫創(chuàng)建同步賬號并授權(quán);
- 從庫配置主庫信息并啟動同步;
- 驗(yàn)證同步狀態(tài)和數(shù)據(jù)一致性。
只要嚴(yán)格遵循步驟,注意主從庫的一致性和網(wǎng)絡(luò)連通性,就能順利完成搭建。若需實(shí)現(xiàn)多從庫架構(gòu),可復(fù)用從庫配置步驟,為每個(gè)從庫分配唯一的server-id即可。
到此這篇關(guān)于Windows環(huán)境下MySQL主從復(fù)制搭建全步驟的文章就介紹到這了,更多相關(guān)MySQL主從復(fù)制搭建內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Windows 64 位 mysql 5.7以上版本包解壓中沒有data目錄和my-default.ini及服務(wù)無法啟動
這篇文章主要介紹了Windows 64 位 mysql 5.7以上版本包解壓中沒有data目錄和my-default.ini及服務(wù)無法啟動的快速解決辦法(問題小結(jié)),需要的朋友可以參考下2018-03-03
將.sql文件導(dǎo)入到MySQL數(shù)據(jù)庫具體步驟
MySQL有多種方法導(dǎo)入多個(gè).sql文件,下面這篇文章主要介紹了將.sql文件導(dǎo)入到MySQL數(shù)據(jù)庫的具體步驟,文中將實(shí)現(xiàn)步驟介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10
數(shù)據(jù)庫實(shí)現(xiàn)行列轉(zhuǎn)換(mysql示例)
最近突然玩起了sql語句,想著想著便給自己出了一道題目:“行列轉(zhuǎn)換”。起初瞎折騰了不少時(shí)間也上網(wǎng)參考了一些博文,不過大多數(shù)是采用oracle數(shù)據(jù)庫當(dāng)中的一些便捷函數(shù)進(jìn)行處理,比如”pivot”。那么,在Mysql環(huán)境下如何處理?下面通過這篇文章我們來一起看看吧。2016-12-12
MySQL校對規(guī)則(COLLATION)的具體使用
本文主要介紹了MySQL校對規(guī)則(COLLATION)的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08

