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:xamppmysqlbinmy.ini),在?[mysqld] 標簽的最下面,添加如下代碼:
#需要備份的數據庫??
binlog-do-db=test
#不需要備份的數據庫??
binlog-ignore-db=mysql??
#開啟二進制日志
log-bin=mysql-bin
#服務器id
server-id=1
保存退出,重啟MySQL主服務器。
binlog-do-db用于指定需要同步的數據庫,binlog-ignore-db指定不需要同步的數據庫,如果這兩個參數都不設置,則從服務器會復制主服務器的所有數據庫。
一般不用root賬號作同步賬號,為此,我們需要在主服務器上創建一個新的用戶(如 user01,密碼為123456)。
這里我們用命令行的方式創建,方法如下:
打開cmd,切換至?E:xamppmysqlbin,用 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;
+——————+———-+————–+——————+——————-+
|?File?????????????|?Position?|?Binlog_Do_DB?|?Binlog_Ignore_DB?|?Executed_Gtid_Set?|
+——————+———-+————–+——————+——————-+
|?mysql-bin.000008?|??????498?|?test?????????|?mysql????????????|???????????????????|
+——————+———-+————–+——————+——————-+
從服務器配置:
修改從服務器的數據庫配置文件(E:mysqlmy.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
??????????????????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,則說明主從復制的所有配置已成功,即從服務器已經可以自動與主服務器的數據庫數據實現同步了。
此后,只要主服務器的數據有更新(比如:在 test數據庫中新建了一張表或者表中的數據發生了變化),從服務器都會自動與主服務器保持一致。但如果有人刻意改變了從服務器的數據,主服務器中的數據并不會同步更新,除非我們把這兩個MySQL服務器設置為互為主從。
以上是我整理到的有關在window環境下配置mysql的主從架構,感興趣的小伙伴們可以去嘗試看看。
相關文章: