怎么在一臺(tái)windows主機(jī)上完成MySQL的主從復(fù)制?
發(fā)表時(shí)間:2023-07-10 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]MySQL的主從復(fù)制是通過(guò)binlog日志來(lái)實(shí)現(xiàn)的,主從復(fù)制中的“主”指的是MySQL主服務(wù)器上的數(shù)據(jù)庫(kù),“從”指的是MySQL從服務(wù)器上的數(shù)據(jù)庫(kù),且這種復(fù)制是基于數(shù)據(jù)庫(kù)級(jí)別的,為此從服務(wù)器中的數(shù)據(jù)...
MySQL的主從復(fù)制是通過(guò)binlog日志來(lái)實(shí)現(xiàn)的,主從復(fù)制中的“主”指的是MySQL主服務(wù)器上的數(shù)據(jù)庫(kù),“從”指的是MySQL從服務(wù)器上的數(shù)據(jù)庫(kù),且這種復(fù)制是基于數(shù)據(jù)庫(kù)級(jí)別的,為此從服務(wù)器中的數(shù)據(jù)庫(kù)名稱必須和主服務(wù)器中的數(shù)據(jù)庫(kù)名稱保持一致,那么,要想實(shí)現(xiàn)主從復(fù)制,我們至少要有兩個(gè)MySQL服務(wù)器(最好是兩個(gè)MySQL服務(wù)器分別位于不同的主機(jī)上,或者在一個(gè)主機(jī)上安裝兩個(gè)MySQL,端口不同即可)。一般來(lái)說(shuō),MySQL數(shù)據(jù)庫(kù)的主庫(kù)和從庫(kù)是分布在不同的主機(jī)上。假如,現(xiàn)在我們只有一臺(tái)主機(jī),且是windows系統(tǒng),如何實(shí)現(xiàn)MySQL的主從復(fù)制呢?方法如下:
這里我們只介紹 一主一從 的操作方法。
我的電腦已經(jīng)安裝了 xampp 集成環(huán)境(同wamp安裝包類似),可以把它里面的MySQL服務(wù)作為MySQL的主服務(wù)器。那么,我們還需要在這臺(tái)電腦上再安裝一個(gè)MySQL,作為數(shù)據(jù)庫(kù)的從服務(wù)器。
我的電腦xampp中已安裝的MySQL版本為 5.6.20,端口為3306。
我們需要再安裝一個(gè)MySQL(最好安裝同版本和相近版本的,以免出現(xiàn)問(wèn)題),端口改為3307
數(shù)據(jù)庫(kù)服務(wù)器的參數(shù):
主服務(wù)器配置:
修改主服務(wù)器的數(shù)據(jù)庫(kù)配置文件(E:\xampp\mysql\bin\my.ini),在 [mysqld] 標(biāo)簽的最下面,添加如下代碼:
#需要備份的數(shù)據(jù)庫(kù)
binlog-do-db=test
#不需要備份的數(shù)據(jù)庫(kù)
binlog-ignore-db=mysql
#開(kāi)啟二進(jìn)制日志
log-bin=mysql-bin
#服務(wù)器id
server-id=1
保存退出,重啟MySQL主服務(wù)器。
binlog-do-db用于指定需要同步的數(shù)據(jù)庫(kù),binlog-ignore-db指定不需要同步的數(shù)據(jù)庫(kù),如果這兩個(gè)參數(shù)都不設(shè)置,則從服務(wù)器會(huì)復(fù)制主服務(wù)器的所有數(shù)據(jù)庫(kù)。
一般不用root賬號(hào)作同步賬號(hào),為此,我們需要在主服務(wù)器上創(chuàng)建一個(gè)新的用戶(如 user01,密碼為123456)。
這里我們用命令行的方式創(chuàng)建,方法如下:
打開(kāi)cmd,切換至 E:\xampp\mysql\bin,用 root 賬戶連接MySQL主服務(wù)器:
mysql -uroot -p -P3306
創(chuàng)建新用戶:
create user 'user01'@'127.0.0.1' identified by '123456';
(@后面的ip地址為允許連接的客戶端的ip地址。)
然后,給新用戶配置主從復(fù)制的權(quán)限:
grant
replication slave on *.* to 'user01'@'127.0.0.1' identified by '123456';
(@后面的ip地址為允許連接的客戶端的ip地址,如果改為 '%',就表示客戶端沒(méi)有ip地址的限制)
如果主服務(wù)器的數(shù)據(jù)庫(kù)(test)中,已經(jīng)有數(shù)據(jù),我們需要先手動(dòng)把主服務(wù)器中的數(shù)據(jù)復(fù)制到從服務(wù)器。方法如下:
在本案例中,我們只備份一個(gè)數(shù)據(jù)庫(kù)(test),test中有一個(gè)表basic_user,表中也已經(jīng)有了數(shù)據(jù)。為了防止我們復(fù)制數(shù)據(jù)的時(shí)候,數(shù)據(jù)庫(kù)test中的數(shù)據(jù)發(fā)生更新,我們需要先鎖定數(shù)據(jù)庫(kù),命令如下:
flush tables with read lock;
這個(gè)命令是全局讀鎖定,它會(huì)給主服務(wù)器中的所有數(shù)據(jù)庫(kù)都加上讀鎖,這里順便說(shuō)一下讀鎖和寫(xiě)鎖的區(qū)別:
鎖定主服務(wù)器的數(shù)據(jù)庫(kù)后,我們?cè)趶姆⻊?wù)器中,也創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)test,并將所有的表(包括表結(jié)構(gòu)和表數(shù)據(jù))都導(dǎo)入。
然后,我們執(zhí)行下面的命令,解鎖:
unlock tables;
查看主服務(wù)器的 master 狀態(tài):
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
File Position Binlog_Do_DB Binlog_Ignore_DB Executed_Gtid_Set
+------------------+----------+--------------+------------------+-------------------+
mysql-bin.000008 498 test mysql
+------------------+----------+--------------+------------------+-------------------+
從服務(wù)器配置:
修改從服務(wù)器的數(shù)據(jù)庫(kù)配置文件(E:\mysql\my.ini),在 [mysqld] 標(biāo)簽的最下面,添加如下代碼:
#端口
port = 3307
#服務(wù)器id
server_id = 2
#開(kāi)啟二進(jìn)制日志(從服務(wù)器不是必須要開(kāi)啟二進(jìn)制日志)
log-bin=mysql-bin
保存退出,重啟MySQL服務(wù)。
連接MySQL從服務(wù)器:
mysql -uroot -p -P3307
配置復(fù)制的參數(shù):
change master to master_host='127.0.0.1',master_user='user01',master_password='123456',master_port=3306,master_log_file='mysql-bin.000008',master_log_pos=498;
參數(shù)詳解:
master_host: 主服務(wù)器的IP
master_user: 主服務(wù)器上新創(chuàng)建的用戶名
master_password: 用戶的密碼
master_port: 主服務(wù)器的端口,如果未曾修改,默認(rèn)即可。
master_log_file: 主服務(wù)器二進(jìn)制日志文件的名稱,填寫(xiě)查看主服務(wù)器的master狀態(tài)時(shí)顯示的File的值
master_log_pos: 日志的位置,填寫(xiě)查看主服務(wù)器的master狀態(tài)時(shí)顯示的Position的值
啟動(dòng)從服務(wù)器的slave復(fù)制功能:
start slave;
查看從服務(wù)器的slave狀態(tài):
mysql> show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 127.0.0.1
Master_User: user01
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000009
Read_Master_Log_Pos: 120
Relay_Log_File: hp-PC-relay-bin.000004
Relay_Log_Pos: 283
Relay_Master_Log_File: mysql-bin.000009
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如果 Slave_IO_Running 和 Slave_SQL_Running 的值都為 Yes,則說(shuō)明主從復(fù)制的所有配置已成功,即從服務(wù)器已經(jīng)可以自動(dòng)與主服務(wù)器的數(shù)據(jù)庫(kù)數(shù)據(jù)實(shí)現(xiàn)同步了。
此后,只要主服務(wù)器的數(shù)據(jù)有更新(比如:在 test數(shù)據(jù)庫(kù)中新建了一張表或者表中的數(shù)據(jù)發(fā)生了變化),從服務(wù)器都會(huì)自動(dòng)與主服務(wù)器保持一致。但如果有人刻意改變了從服務(wù)器的數(shù)據(jù),主服務(wù)器中的數(shù)據(jù)并不會(huì)同步更新,除非我們把這兩個(gè)MySQL服務(wù)器設(shè)置為互為主從。
以上是我整理到的有關(guān)在window環(huán)境下配置mysql的主從架構(gòu),感興趣的小伙伴們可以去嘗試看看。
相關(guān)文章:
windows下安裝mysql-5.7.21
MySQL 基礎(chǔ)知識(shí)小結(jié)
navicat for mysql下載安裝以及簡(jiǎn)單的使用
以上就是如何在一臺(tái)windows主機(jī)上實(shí)現(xiàn)MySQL的主從復(fù)制?的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
學(xué)習(xí)教程快速掌握從入門到精通的SQL知識(shí)。