InnoDB集群最需要的功能之一是Windows支持,我們現在已將其作為InnoDB Cluster 5.7.17預覽版 2的一部分提供。此博客文章將向您展示如何在MS Windows 10上運行InnoDB集群。64位系統。
我們將執行以下步驟。
- 下載包
- 安裝
- 創建一個InnoDB群集沙箱配置
- 引導MySQL路由器
- 測試配置
- 下一步是什么?
讓我們開始吧!
下載包
首先,我們必須下載安裝所需的四個組件。
- 來自dev.mysql.com的具有組復制功能的MySQL Server 5.7.17。
- 來自labs.mysql.com的MySQL Shell 1.0.6和MySQL Router 2.1.1。
- MS的Microsoft Visual C ++ 2015可再發行組件包
- fabforce.net的OpenSSL 1.0.2j二進制軟件包
注意:我們仍在為Shell和Router開發MSI Installer軟件包,因此我們現在將使用ZIP軟件包。這意味着我們還必須手動安裝Microsoft Visual C ++ 2015 Redistributable軟件包。
安裝
步驟1 – Microsoft Visual C ++ 2015可再發行
首先,我們將通過打開vc_redist.x64.exe並單擊安裝程序向導來安裝Microsoft Visual C ++ 2015 Redistributable。
第2步– MySQL服務器5.7.17
現在,我們將運行MySQL Installer將MySQL Server 5.7.17安裝到我們的系統上。打開mysql-installer-community-5.7.17.0.msi並允許安裝程序對系統進行更改后,安裝程序將提示您接受GPL許可協議。
在下一頁上,我們可以選擇安裝類型。在這種情況下,我們將選擇“僅服務器”以僅將MySQL Server安裝到我們的系統上並繼續安裝。
安裝完成后,我們可以在“產品配置”步驟中按[Cancel],因為我們將使用MySQL Shell為InnoDB集群配置多個沙箱實例。
之后,我們可以按[Next>]和[Finish]關閉MySQL Installer。
步驟3 – MySQL Shell和MySQL Router
接下來,我們將提取MySQL Shell和MySQL Router。使用鼠標右鍵單擊mysql-innodb-cluster-labs201612-windows-x86-64bit.zip文件,然后選擇[Extract All…],然后選擇[Extract]。
這將創建一個名為mysql-innodb-cluster-labs201612-windows-x86-64bit的目錄,其中包含兩個文件。
- mysql-router-2.1.1-windows-x86-64bit.zip
- mysql-shell-1.0.6-labs-windows-x86-64bit.zip
讓我們將bot ZIP提取到 “ C:\ Program Files \ MySQL \” 目錄中。
右鍵單擊mysql-router-2.1.1-windows-x86-64bit.zip文件,然后在彈出菜單中選擇[Extract All…]。然后單擊[瀏覽],導航到“本地磁盤(C :)”,然后導航到“程序文件”和“ MySQL”,然后單擊[選擇文件夾],然后單擊[提取]。在訪問權限對話框中按[繼續],文件將被提取到“ C:\ Program Files \ MySQL \”目錄中。
對mysql-shell-1.0.6-labs-windows-x86-64bit.zip文件重復相同的操作。
步驟4 – OpenSSL
最后,我們需要將OpenSSL ZIP直接提取到“ C:/”文件夾中。
右鍵單擊文件,然后在彈出菜單中選擇[全部提取...]。然后單擊[瀏覽],導航到“本地磁盤(C :)”,然后單擊[選擇文件夾],然后單擊[提取]。在訪問權限對話框中按[繼續],文件將被提取到“ C:\ OpenSSL”目錄中。
步驟5 –將MySQL Shell,Router和OpenSSL添加到PATH變量
為了使MySQL Shell和MySQL Router在命令行上可用,我們將其安裝目錄添加到PATH變量中。
單擊[Search Windows]控件,鍵入PATH,然后按[Enter]。
這將啟動“環境變量”對話框,我們可以在其中雙擊“路徑”和三個新條目。
- C:\ Program Files \ MySQL \ mysql-router-2.1.1-windows-x86-64bit \ bin
- C:\ Program Files \ MySQL \ mysql-shell-1.0.6-labs-windows-x86-64bit \ bin
- C:\ Program Files \ MySQL \ MySQL Server 5.7 \ bin
- C:\ OpenSSL
然后按兩次[確定]關閉“環境變量”對話框。
現在我們准備開始InnoDB集群配置!
創建一個InnoDB群集沙箱配置
啟動MySQL Shell
為了創建InnoDB集群設置,我們將使用MySQL Shell中新的X AdminAPI。再次單擊任務欄中的[Search Windows]控件,然后鍵入cmd,然后按[Enter]。這將打開命令提示符窗口。
在命令行上鍵入mysqlsh。這將啟動MySQL Shell,您將看到歡迎消息和JavaScript提示符mysql-js>
現在我們准備創建InnoDB集群。
創建3個沙箱實例
為了提供對一個故障的容忍度,我們必須使用三個實例運行InnoDB集群。在此示例中,我們將使用在同一台計算機上運行的三個沙箱實例。在實際設置中,這三個實例將在網絡上的不同主機上運行。
為了創建和啟動MySQL沙箱實例,我們將使用dba.deploySandboxInstance()函數,該函數是X AdminAPI的一部分。在MySQL Shell中執行以下三個語句,並為每個實例輸入root密碼。
1
2
3
4
5
6
|
mysql-js> dba.deploySandboxInstance(3310);
mysql-js> dba.deploySandboxInstance(3320);
mysql-js> dba.deploySandboxInstance(3330);
|
注意:請為所有實例使用相同的root密碼。
注意:您會注意到我們在這里傳遞了一個特殊的選項,稱為ignoreSslError。我們尚未在Windows上支持自動SSL證書生成,因此我們必須顯式設置該選項以為每個X AdminAPI函數調用禁用SSL。在下一發行版中將對此進行改進。
創建InnoDB集群
接下來,我們需要連接到要用來啟動InnoDB集群的MySQL實例(也稱為種子實例),然后執行命令以創建集群。
1
2
3
4
|
mysql-js> shell.connect('root@localhost:3310');
var cluster = dba.createCluster('devCluster');
|
為了驗證創建是否可行,我們將其稱為cluster.status();。功能。
1
2
|
mysql-js> cluster.status();
|
狀態輸出顯示集群已啟動並正在運行,但尚不能容忍故障。我們需要將其他兩個MySQL Server實例添加到群集中。這是通過cluster.addInstance()函數完成的。
1
2
3
4
|
mysql-js> cluster.addInstance('root@localhost:3320');
mysql-js> cluster.addInstance('root@localhost:3330');
|
在添加了其他兩個實例之后,讓我們再來看一下集群的狀態。
1
2
|
cluster.status();
|
InnoDB集群的設置成功!群集現在最多可以容忍一個故障。
您現在可以使用\ q退出MySQL Shell
引導MySQL路由器
在MySQL InnoDB集群啟動並運行之后,我們要測試集群的高可用性。為此,我們需要MySQL路由器。如果一個實例失敗,MySQL路由器將自動更新其路由配置,並確保將新的連接路由到其余實例。
引導MySQL路由器
在MySQL路由器執行路由操作之前,我們需要使它知道新的InnoDB集群。這是通過'–bootstrap'選項完成的,將MySQL Router指向集群的當前R / W MySQL Server實例。我們將使用“ -d”選項讓路由器將其配置存儲到主目錄中的“ mysql-router”文件夾中。
讓我們在命令提示符處執行以下命令。
1
2
|
C:\> mysqlrouter --bootstrap root@localhost:3310 -d %HOMEPATH%\mysql-router
|
然后,路由器打印將用於路由我們的連接的TCP / IP端口。對於我們的測試,我們將使用端口6446指向集群的Read / Write MySQL Server實例。
現在已經成功配置了路由器,我們現在可以通過使用' start / B'命令並將路由器指向我們剛剛使用'-bootstrap'選項生成的配置文件在后台線程中啟動它。
讓我們執行以下命令。
1
2
|
C:\> start /B mysqlrouter -c %HOMEPATH%\mysql-router\mysqlrouter.conf
|
允許通過Windows防火牆訪問后,MySQL路由器現在已啟動並正在運行。它打印了它的進程ID,以后我們完成測試后就可以殺死它。
測試配置
現在我們已經有一個InnoDB集群和MySQL路由器正在運行,我們可以開始測試集群設置了。
與其直接連接到一個MySQL Server實例,不如通過MySQL路由器連接。
1
2
|
C:\> mysqlsh root@localhost:6446
|
提供根密碼后,我們將連接到InnoDB集群。我們可以通過調用'dba.getCluster()'函數來獲取集群實例。
1
2
3
4
|
mysql-js> var cluster = dba.getCluster();
mysql-js> cluster.status();
|
要找出我們連接到的實例,我們可以切換到SQL模式並查詢實例運行的端口。
1
2
3
4
|
mysql-js> \sql
mysql-sql> SELECT @@port;
|
在這種情況下,我們已連接到在端口3310上運行的MySQL實例。
現在,我們可以切換回Javascript模式,並使用'dba.killSandboxInstance()'函數對MySQL Server實例執行硬終止。
1
2
3
4
|
mysql-sql> \js
mysql-js> dba.killSandboxInstance(3310);
|
現在實例已被殺死,讓我們檢查一下MySQL Router現在是否執行正確的路由。我們將嘗試對剛剛被殺死的實例運行SELECT並檢查結果。
1
2
3
4
|
mysql-js> \sql
mysql-sql> SELECT @@port;
|
由於我們殺死了在端口3310上運行的實例,MySQL Shell出現錯誤“錯誤:2006(HY000):MySQL服務器已消失”。因此,它自動嘗試通過MySQL路由器重新嘗試連接到root @ localhost:6446。路由器注意到實例3310被殺死,更新了其路由緩存並將我們重新路由到群集的新讀/寫實例。
讓我們看看誰被提升為新的讀/寫實例。
1
2
|
mysql-sql> SELECT @@port;
|
在這種情況下,它是在端口3320上運行的MySQL Server實例。
現在,讓我們看一下集群狀態。
1
2
3
4
|
mysql-sql> \js
mysql-js> cluster.status();
|
我們可以看到在端口3310上正式運行的MySQL Server實例已經消失(MISSING)。
為了恢復它,我們將使用'cluster.rejoinInstance()'函數。但是首先,我們必須重新啟動實例。
1
2
3
4
5
6
|
mysql-js> dba.startSandboxInstance(3310);
mysql-js> cluster.rejoinInstance('root@localhost:3310');
mysql-js> cluster.status();
|
狀態輸出將顯示所有實例都重新聯機,並且我們可以再次容忍一次故障。
至此我們的首次測試結束。
要清理系統,可以停止並刪除沙箱實例。
1
2
3
4
5
6
7
8
|
mysql-js> dba.stopSandboxInstance(3310);
mysql-js> dba.stopSandboxInstance(3320);
mysql-js> dba.stopSandboxInstance(3330);
mysql-js> dba.deleteSandboxInstance(3310);
mysql-js> dba.deleteSandboxInstance(3320);
mysql-js> dba.deleteSandboxInstance(3330);
mysql-js> \q
|
可以從命令行使用以下命令來停止MySQL路由器。
1
2
|
C:\> taskkill /IM mysqlrouter.exe /F
|
要了解有關InnoDB集群的更多信息,請閱讀其他博客文章,如動手教程博客文章。