MySQL的主從複製是透過binlog日誌來實現的,主從複製中的「主」指的是MySQL主伺服器上的資料庫,「從」指的是MySQL從伺服器上的資料庫,而這種複製是基於資料庫層級的,為此從伺服器中的資料庫名稱必須和主伺服器中的資料庫名稱保持一致,那麼,要想實作主從複製,我們至少要有兩個MySQL伺服器(最好是兩個MySQL伺服器分別位於不同的主機上,或是在一個主機上安裝兩個MySQL,連接埠不同即可)。
一般來說,MySQL資料庫的主函式庫和從函式庫分佈在不同的主機上。假如,現在我們只有一台主機,而且是windows系統,要如何實現MySQL的主從複製呢?方法如下:
這裡我們只介紹 一主一從 的運算方法。
我的電腦已經安裝了 xampp 整合環境(和wamp安裝套件類似),可以把它裡面的MySQL服務當作MySQL的主伺服器。那麼,我們還需要在這台電腦上再安裝一個MySQL,作為資料庫的從伺服器。
我的電腦xampp中已安裝的MySQL版本為 5.6.20,連接埠為3306。
我們需要再安裝一個MySQL(最好是安裝相同版本和相近版本的,以免出現問題),連接埠改為3307
資料庫伺服器的參數:
#主伺服器(master): IP為127.0.0.1,連接埠為3306
從伺服器(slave): IP為127.0.0.1,連接埠為3307
#主伺服器設定:
修改主伺服器的資料庫設定檔(E:\xampp\mysql\bin\my.ini),在 [mysqld] 標籤的最下面,加入以下程式碼:
#需要備份的資料庫
binlog-do-db=test
#不需要備份的資料庫
## binlog-ignore-db=mysql
#開啟二進位日誌
log-bin=mysql-bin
#伺服器id
##1
儲存退出,重新啟動MySQL主伺服器。binlog-do-db用於指定需要同步的資料庫,binlog-ignore-db指定不需要同步的資料庫,如果這兩個參數都不設置,則從伺服器複製主伺服器的所有資料庫。
一般不用root帳號作同步帳號,為此,我們需要在主伺服器上建立一個新的使用者(如 user01,密碼為123456)。 這裡我們用命令列的方式創建,方法如下:
#開啟cmd,切換至 E:\xampp\mysql \bin,用root 帳號連接MySQL主伺服器:
#########mysql -uroot -p -P3306############建立新使用者: # ##############create user 'user01'@'127.0.0.1' identified by '123456';###################( @後面的ip位址為允許連線的客戶端的ip位址。 ####grant replication slave on *.* to 'user01'@'127.0.0.1' identified by '123456';
(@後面的ip位址為允許連接的客戶端的ip位址,如果改為'%',就表示客戶端沒有ip位址的限制)
如果主伺服器的資料庫(test)中,已經有數據,我們需要先手動把主伺服器中的資料複製到從伺服器。方法如下:
在本案例中,我們只備份一個資料庫(test),test中有一個表格basic_user,表中也已經有資料了。為了防止我們複製資料的時候,資料庫test中的資料發生更新,我們需要先鎖定資料庫,指令如下:
#flush tables with read lock;
##這個指令是全域讀取鎖定,它會為主伺服器中的所有資料庫加上讀鎖,這裡順便說一下讀鎖和寫鎖的差別:
read lock(讀鎖):也叫共用鎖,允許所有的讀操作,但阻塞寫入操作,即所有連接只可以讀取數據,但不允許寫入數據。
write lock(寫鎖):也叫排它鎖、獨佔鎖,只允許目前連接的讀取和寫,不允許其他並發的讀取操作和寫入操作。
鎖定主伺服器的資料庫後,我們在從伺服器中,也建立一個資料庫test,並將所有的表(包括表格結構和表格資料)都匯入。
然後,我們執行下面的指令,解鎖:
#unlock tables;
#檢視主伺服器的master 狀態:
mysql> show master status;mysql> show master status; ------------------ ---------- -------------- ------- ----------- ---------------------------------- | File | Position | Binlog_Do_DB | Binlog_Iore_DB | Binlog_Do_DB | Binlog_Iore_DB | Binlog_Do_DB | Binlog_Iore_DB | Binlog_Do_DB | Binlog_Iore_DB |,cExecuted_Do_DB
------------------ ---------- -------------- ----- ------------- -------------------| mysql-bin.000008 | 498 | test | mysql | |-------------------------------- ---------- -------------- ------------------ -------------------
從伺服器設定:修改從伺服器的資料庫設定檔(
E:\mysql\my.ini) ,在 [mysqld] 標籤的最下面,新增如下程式碼:
#連接埠########## ########port = 3307#############伺服器id######server_id = 2#####開啟二進位日誌(從伺服器不是必須開啟二進位日誌)
log-bin=mysql-bin
儲存退出,重新啟動MySQL服務。
連接MySQL從伺服器:
mysql -uroot -p -P3307
設定複製的參數:
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;
#參數詳解:master_host: 主伺服器的IP
master_user: 主伺服器上新建立的使用者名稱
master_password: 使用者的密碼 ##master_port
: 主伺服器的端口,如果未曾修改,預設即可。
master_log_file: 主伺服器二進位日誌檔案的名稱,填入查看主伺服器的master狀態時顯示的File的值
#master_log_pos:日誌的位置,填入檢視主伺服器的master狀態時顯示的Position的值## 啟動從伺服器的slave複製功能:
start slave;查看從伺服器的slave狀態:mysql> show slave status \G*** ************************ 1. row *********************** **** Slave_IO_State: Waiting for master to send event## 1 Master_User: user01 1PortConnect_Retry: 60
Read_Master_Log_Pos: 120
Relay_Log_File: hp-PC-relay-bin.000004
Relay_Log_Pos: 283
. ave_IO_Running: Yes
Slave_SQL_Running: Yes
如果 Slave_IO_Running 和 Slave_SQL_Running 的值都為 Yes,則表示主從複製的所有設定都已成功,也就是從伺服器已經可以自動與主伺服器的資料庫資料實作同步了。
此後,只要主伺服器的資料有更新(例如:在test資料庫中新建了一張表格或表格中的資料發生了變化),從伺服器都會自動與主伺服器保持一致。但如果有人刻意改變了從伺服器的數據,主伺服器中的數據並不會同步更新,除非我們把這兩個MySQL伺服器設定為互為主從。
以上是我整理到的有關在window環境下配置mysql的主從架構,有興趣的小夥伴們可以去嘗試看看。
相關文章:
以上是如何在一台windows主機上實作MySQL的主從複製?的詳細內容。更多資訊請關注PHP中文網其他相關文章!