windows XP下MySQL Cluster叢集安裝配置
安裝過程
1軟體的下載
要Windows32位免安裝版的,如圖:
2機子的配置及作用
準備3臺電腦,機子的功能和配置見下表
Node |
IP Address |
Management (MGMD) node |
192.168.1.102 |
MySQL server (SQL) node “A” |
192.168.1.103 |
MySQL server (SQL) node “B” |
192.168.1.108 |
Data (NDBD) node "A" |
192.168.1.103 |
Data (NDBD) node "B" |
192.168.1.108 |
我們可以看到192.168.1.103
3.軟體的安裝
3.1解壓下載的安裝包,為了方便,把資料夾的名字改為mysql。
3.2 Managementnode的安裝配置。
Managementnode一定要安裝在C盤下,並且是以下的目錄(這是在執行此節點時報錯,說找不到相對應的目錄)。在IP為192.168.1.102的機子上生成c:/mysql/bin、C:/mysql/mysql-cluster(第一次啟動後在這個資料夾會生成類似ndb_1_config.bin.1
[mysql_cluster]
# Options formanagement node process
config-file=C:/mysql/bin/config.ini
config.ini的內容:
[ndbd default]
# Optionsaffecting ndbd processes on all data nodes:
NoOfReplicas=2 # Number of replicas
DataDir=D:/ProgramFiles/mysqlcluster/datanode/mysql/bin/cluster-data # Directory foreach data node's data files
#Forward slashes used in directory path,
#rather than backslashes. This is correct;
# seeImportant note in text
DataMemory=80M # Memory allocated to data storage
IndexMemory=18M # Memory allocated to index storage
# For DataMemory and IndexMemory, we have used the
# default values. Since the "world" database takes up
# only about 500KB, this should be more than enough for
# this example Cluster setup.
[ndb_mgmd]
# Managementprocess options:
HostName=192.168.1.102 # Hostname or IP address of management node
DataDir=C:/mysql/bin/cluster-logs # Directory for management node log files
[ndbd]
# Options fordata node "A":
# (one [ndbd] section per data node)
HostName=192.168.1.103 # Hostname or IP address
[ndbd]
# Options fordata node "B":
HostName=192.168.1.108 # Hostname or IP address
[mysqld]
# SQL nodeoptions:
HostName=192.168.1.103 # Hostname or IP address
[mysqld]
# SQL nodeoptions:
HostName=192.168.1.108 # Hostname or IP address
3.3 Data nodes的安裝配置
在IP為192.168.1.103的機子上生成D:/Program Files/mysqlcluster/datanode/mysql/bin、D:/Program Files/mysqlcluster/datanode/mysql/cluster-data、D:/Program Files/mysqlcluster/datanode/mysql/bin/cluster-data.在下載的的解壓資料夾mysql/bin中將ndbd.exe複製到192.168.1.103機子的D:/Program Files/mysqlcluster/datanode/mysql/bin目錄下,並在D:/Program Files/mysqlcluster/datanode/mysql/bin目錄下生成my.ini檔案,檔案的內容為:
[mysql_cluster]
# Options fordata node process:
ndb-connectstring=192.168.1.102 # location of management server
弄好後直接將192.168.1.103機子下的D:/ProgramFiles/mysqlcluster/datanode整個資料夾複製到192.168.1.108機子的同樣路徑下(或者按照上面的方法一步一步為192.168.1.108機子生成相應的目錄和檔案,但是由於Data nodes的安裝配置都是一樣的,所以直接複製即可)
3.4 SQL node的安裝配置
在IP為192.168.1.103的機子上生成D:/Program Files/mysqlcluster/sqlnode目錄,將下載的解壓資料夾mysql直接整個複製到D:/Program Files/mysqlcluster/sqlnode目錄下,在D:/Program Files/mysqlcluster/sqlnode/mysql下生成my.ini檔案,檔案內容為:
[mysqld]
# Options formysqld process:
ndbcluster # run NDB storage engine
ndb-connectstring=192.168.1.102 # location of management server
即:
《【原創】Windows下構建Mysql Cluster叢集資料庫.docx》】
同理,將D:/Program Files/mysqlcluster/sqlnode整個資料夾複製到192.168.1.108機子的相同目錄下
4啟動MySQL Cluster
啟動各個節點是有順序的,先是Management node,然後是Data nodes,最後是SQL nodes。
4.1啟動Management node
在192.168.1.102機子下進入命令列,轉到c:/mysql/bin目錄下,輸入:
ndb_mgmd -fconfig.ini
【執行這個命令的時候出現錯誤,換成下面的就ok了:
ndb_mgmd -fconfig.ini --configdir=C:\mysql\mysql-cluster
】
點選回車鍵。我第一次啟動的時候是按照官網的弄得,結果官網上少生成了c:/mysql/mysql-cluster和c:/mysql/bin/cluster-logs目錄,導致啟動不成功,生成這兩個目錄之後就可以啟動了。這兩個目錄是config.ini檔案裡配置的Datadir,所以要自己相應的生成,這一點官網沒有提示。
4.2啟動Data node
在192.168.1.103機子下進入命令列,轉到D:/ProgramFiles/mysqlcluster/datanode/mysql/bin目錄下,輸入:
Ndbd
【要修改為:ndbd --connect-string="host=MGDB的IP地址"】
ndbd --connect-string="host=59.64.43.174"
點選回車鍵。我第一次啟動的時候是按照官網的弄得,結果官網上少生成了D:/ProgramFiles/mysqlcluster/datanode/mysql/bin/cluster-data目錄,導致啟動不成功,生成這個目錄之後就可以啟動了。這兩個目錄是config.ini檔案裡配置的Datadir,所以要自己相應的生成,這一點官網沒有提示。
同理,按相同方式在192.168.1.108下啟動Data node.
注:此時可通過在Management node中新開一命令列,轉到c:/mysql/bin目錄下輸入命令:
ndb_mgm
啟動ndb_mgm.exe,之後輸入命令:
ALLSTATUS
檢視到Data node連線是否成功.之後啟動正常之後才能繼續啟動SQL node
4.3啟動SQL node
在192.168.1.103機子下進入命令列,轉到D:/ProgramFiles/mysqlcluster/sqlnode/mysql/bin目錄下,輸入:
mysqld --console
【啟動sqlnode的時候,要注意埠是否被佔用,埠被佔用的話會有相應的錯誤提示,我配置的時候出現這個問題了,改一下該sqlnode的埠就行了】
按相同方式啟動192.168.1.108下的SQL node。
注:可通過在Management node節點的機器下,轉到c:/mysql/bin目錄下輸入命令:
ndb_mgm
啟動ndb_mgm.exe,之後輸入命令:
SHOW
即可檢視到各個節點的連線情況。
接下來我們可以在某個SQL node 機器上利用MYSQL GUI TOOLS的MYSQLadministradtor工具新建一個數據庫,然後在其他SQLnode檢視,我們可以看到,所有的SQL node都可以看到新生成的資料庫,至此MYSQL叢集搭建成功.
如果其他SQL node上看不到新生成的資料庫中的表,則說明其中的表沒有使用ndb引擎,方法:alter table table_name engine=ndb
5MySQL Cluster叢集架構
附錄:將MySQL Cluster的各個程式安裝成Windows Services
每次都要轉到相應bin目錄下才能啟動各個程式,有點不方便,這樣我們可以將這些程式安裝到Windows Services中,安裝方式如下:
1 Managementnode
1.1進入命令列,輸入命令
C:/mysql/bin/ndb_mgmd.exe--install
1.2 啟動
NET START ndb_mgmd
1.3 關閉
NET STOP ndb_mgmd
其他程式的安裝類似,略
中間遇到的問題:
1、Error Code : 1118
Row size too large. The maximum row size for the usedtable type, not counting BLOBs, is 14000. You have to change some columns toTEXT or BLOBs
問題描述:欄位型別是varchar的時候,如果長度太大,比如2000,則將表的引擎改為ndb的時候會報下面的錯誤:
解決方法:將varchar該為longtext便可
2、Error Code : 1005 Cannot create table(……) (errno:136)
問題描述:只能將學習元資料庫中的一部分表的引擎轉換成ndb。
問題原因:MaxNoOfOrderedIndexes
引數的值太少了,剛配置叢集完畢的時候沒有設定這個引數,其預設值是128,所以導致只能匯入一部分表。
PS:這個問題耽誤了一天多的時間,當時只是將注意力放在了MaxNoOfTables和MaxNoOfAttributes兩個引數上,沒有考慮這個引數。感覺還是對於資料庫掌握的不好,遇到問題視野很窄,只能依靠搜尋引擎找答案。關於config.ini的詳細配置參考:《MySQL Cluster 詳細配置檔案(config.ini).docx》
3、Error Code : 1005 Cannot create table '' (errno: 4335)
問題描述:將表的引擎轉換成ndb的時候,個別表報上面的錯誤。
解決方法:將相應的欄位設為主鍵。
4、檢視無法自動同步
問題描述:A節點中建立的檢視,在B節點中看不到。
問題原因:剛開始以為要改變檢視的engine,發現語法錯誤,也就是不能改變檢視的engine。
注意事項
第四點很重要
1:如果發現關閉一臺機器的ndbd程序,另一臺機器的ndbd的程序也關閉,則需要修改引數NoOfReplicas。
2:./ndbd --initial不能同時在所有資料節點機器上執行,如執行,會刪除所有資料
3:可以像操作非簇型別的資料庫那樣,操作mysqld節點
4:每次修改config.ini檔案,重啟ndb_mgmd時,需要刪除mysql-cluster檔案下的ndb_1_config.bin.1檔案,因為他預設呼叫此檔案
【這一點非常重要,我之前沒注意到這點,導致修改沒用!!!】
5:NDB 簇不支援自動發現數據庫的功能,這點很重要,一旦在一個數據節點上建立了世界(world)資料庫和它的表,
在簇中的每個SQL節點上還需要發出命令 CREATE DATABASE world,後跟FLUSH TABLES。這樣,節點就能
識別資料庫並讀取其表定義。(在本版本MySQL Cluster 7.1.5下資料庫也會自動同步的)
6:如果在相關節點伺服器啟動時,注意檢視~/mysql/mysql-cluster目錄內的相關日誌檔案以獲取錯誤資訊.
7:在管理節點的配置檔案裡各[mysqld],[ndbd]和[ndb_mgmd]配置的選項值順序應該如下:
[mysqld]
Id=4
HostName=192.168.208.3
Id在頂端緊跟其後的是HostName,如果順序錯了,當SQL或資料節點連線管理節點時,管理節點無法正確的定位
到其對應的節點配置上.
因為無法定位到對應的節點配置,當沒有剩餘的[空節點]時,客戶端節點啟動時(./mysqld or ./ndbd)
還會報:
Configurationerror: Error : Could not alloc node id at 192.168.0.231 port 1186: No free
node id found formysqld
(API).Failed toinitialize consumers
8:[空節點]是沒有指定HostName選項的節點配置均為空節點,空節點可以用來動態配置一些動態IP的節點,
一般管理節點的 配置檔案要預留3個以上的空節點,因為備份時需要連線一個節點,如下:
[mysqld]
Id=6