明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

怎么在一臺(tái)windows主機(jī)上完成MySQL的主從復(fù)制?

[摘要]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ù)器(master): IP為127.0.0.1,端口為3306

  • 從服務(wù)器(slave): IP為127.0.0.1,端口為3307

主服務(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ū)別:


  • read lock(讀鎖):也叫共享鎖,允許所有的讀操作,但阻塞寫(xiě)操作,即所有連接只可以讀數(shù)據(jù),但不允許寫(xiě)數(shù)據(jù)。

  • write lock(寫(xiě)鎖):也叫排它鎖、獨(dú)占鎖,只允許當(dāng)前連接的讀和寫(xiě),不允許其他并發(fā)的讀操作和寫(xiě)操作。


鎖定主服務(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í)。