手把手教你,如何在windows系統搭建mysql主從複製的環境

鄙人薛某發表於2019-11-25

背景

最近在學習用Spring Aop來實現資料庫讀寫分離的功能。 在編寫程式碼之前,首先是要部署好mysql的環境,因為要實現讀寫分離,所以至少需要部署兩個mysql例項,一主一從,並且主從例項之間能夠自動同步,因為我的本機記憶體並不高,所以就打算在windows上直接搭建mysql的主從例項(不想開虛擬機器),但這個過程中卻遇到了一些麻煩,雖然最後都解決了,但也花費了不少的時間。為了避免以後在同樣的事情上浪費時間,同時也方便讀者們能複製相同的場景,所以就寫下這篇部落格來記錄一下搭建環境的過程。

環境說明

本機地址:127.0.0.1(localhost)

mysql版本:mysql-5.7.28-winx64

主庫服務名:master,埠3307

從庫服務名:slave,埠3308

安裝並配置主庫master

下載

首先是下載mysql,直接到官網下載zip版的安裝包,這裡建議下載比較新的版本,比如筆者的版本是5.7,這也是網上很多大神的建議,

手把手教你,如何在windows系統搭建mysql主從複製的環境

解壓並建立my.ini檔案

解壓安裝包,命名資料夾為master,進入資料夾,建立一個名為my.ini的空文字,

手把手教你,如何在windows系統搭建mysql主從複製的環境
文字中的內容如下:

[client]
# 埠號,預設是3306,同一個環境下不同的mysql例項埠號不能相同
port=3307
default-character-set=utf8

[mysqld] 
#主庫配置
server_id=1
log_bin=master-bin
log_bin-index=master-bin.index

# 設定為自己MYSQL的安裝目錄
basedir=D:/software/mysql/master
# 設定為MYSQL的資料目錄,data資料夾由mysql自動生成
datadir=D:/software/mysql/master/data
port=3307
character_set_server=utf8
sql_mode=NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER

# 開啟查詢快取
explicit_defaults_for_timestamp=true
複製程式碼

ps:配置內容中的目錄地址要用斜槓,不能用反斜槓,否則等下安裝服務會報錯找不到目錄。

安裝master庫的服務

1、cmd管理員身份執行,進入master的bin目錄下,

手把手教你,如何在windows系統搭建mysql主從複製的環境
2、執行初始化的命令:

mysqld --initialize --user=mysql --console
複製程式碼

如果出現類似下面的提升就顯示初始化成功,初始化成功會系統自動生成data資料夾,並生成初始密碼,

手把手教你,如何在windows系統搭建mysql主從複製的環境
3、初始化完成後,執行安裝服務的命令:

mysqld --install master --defaults-file="D:\software\mysql\master\my.ini" 
複製程式碼

master為服務的名稱,--defaults-file為ini檔案的路徑,出現"Service successfully installed."即為成功

手把手教你,如何在windows系統搭建mysql主從複製的環境
注:如果安裝失敗的話,看看是否沒有管理員身份執行cmd。

正常來說,安裝完master的服務後我們就可以啟動mysql了,然而這裡有個坑,就是直接mysql後會報錯,因為我們還少配置了一個地方,就是登錄檔中master服務的資訊。

手把手教你,如何在windows系統搭建mysql主從複製的環境
所以在未修改登錄檔之前,建議先別執行啟動命令。

4、修改登錄檔

按win+R,在彈框中輸入regedit開啟登錄檔,找到master服務,路徑是HKEY_LOCAL_MACHINE–>SYSTEM–>CurrentControlSet–>Services–>master,修改ImagePath

D:\software\mysql\master\bin\mysqld --defaults-file=D:\software\mysql\master\my.ini master
複製程式碼

路徑就對應自己安裝的master資料庫資料夾即可。

5、啟動服務

依然是在bin目錄下執行啟動服務,命令是net master start,啟動成功後會出現如下的提示:

手把手教你,如何在windows系統搭建mysql主從複製的環境
6、進入mysql

進入mysql的命令是:mysql -u root -p ,但因為我們改了埠號,所以命令要改為

mysql -u root -P3307 -p,然後輸入剛才生成的初始化密碼即可進入mysql,

手把手教你,如何在windows系統搭建mysql主從複製的環境
由於這個初始密碼實在是太蛋疼,所以我們最好更改密碼,更改語句為:

set password=password('新密碼');
複製程式碼

例如LZ設定的密碼為123456,

手把手教你,如何在windows系統搭建mysql主從複製的環境
這樣就成功設定了root使用者的密碼了,然後我們可以用Navicat等圖形化工具來操作連線資料庫了,
手把手教你,如何在windows系統搭建mysql主從複製的環境

安裝從庫slave

從庫的安裝步驟和主庫一樣,只是my.ini中修改對應的配置即可。

[client]
port=3308
default-character-set=utf8

[mysqld] 
#從庫配置
server_id=2
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin

# 設定為自己MYSQL的安裝目錄 
basedir=D:/software/mysql/slave
# 設定為MYSQL的資料目錄 
datadir=D:/software/mysql/slave/data
port=3308
character_set_server=utf8
sql_mode=NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER
#開啟查詢快取
explicit_defaults_for_timestamp=true
複製程式碼

主從庫實現關聯

兩個庫都安裝好了,我們就可以來操作主從庫之間的關聯,實現主從之間的複製,

先登入主庫,輸入 show master status;

手把手教你,如何在windows系統搭建mysql主從複製的環境
可以發現主庫中生成了一個二進位制的檔案,這是一個日誌檔案,從庫關聯它就可以實現和主庫的同步了。

登入從庫,執行下面的命令,

change master to master_host='127.0.0.1',master_port=3307,master_user='root',master_password='123456',master_log_file='master-bin.000001',master_log_pos=0;
複製程式碼

不難看出上面都是主庫的配置資訊,成功後執行命令start slave 開啟主從複製

手把手教你,如何在windows系統搭建mysql主從複製的環境
完成之後,我們簡單驗證下,在master庫中建立一個資料庫,名字就叫test,
手把手教你,如何在windows系統搭建mysql主從複製的環境
然後slave中也生成了同樣的資料庫test,
手把手教你,如何在windows系統搭建mysql主從複製的環境
這樣,主從複製就成功實現了。

值得說明的是,因為兩個庫只是做了單向關聯,如果往從庫中寫資料的話,主庫是無法同步的。所以從庫只能用於讀取資料,而主庫既能寫,也能讀,當然,多數情況都是用於寫資料,讀取資料一般都是從庫獲取,這樣能有效減輕主庫的壓力,也就是我們常說的讀寫分離。

相關文章