安装过程
1软件的下载
下载MySQL Cluster,地址:http://www.mysql.com/downloads/cluster/
要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机器可以分别作为SQL node和Data node同时使用。192.168.1.108的配置也是如此。如果安装的IP有变,则在下列安装过程中出现的ini文件里写的IP地址也要相应的改正。
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的文件,好像是为了以后启动加载的配置)和c:/mysql/bin/cluster-logs目录,在下载解压的文件目录mysql/bin中将ndb_mgmd.exe和ndb_mgm.exe复制到192.168.1.102的c:/mysql/bin目录下。在192.168.1.102的c:/mysql/bin下生成两个文件,my.ini和config.ini,my.ini的内容为:
[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
【my.ini的建立,可以参考另外一篇文章:http://www.cnblogs.com/xiaoTT/archive/2011/12/22/2297397.html
即:
《【原创】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
参考:http://www.ixpub.net/thread-1321138-1-1.html
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,所以导致只能导入一部分表。
解决方法:加入MaxNoOfOrderedIndexes
参数并将其设置的足够大。可参考:
PS:这个问题耽误了一天多的时间,当时只是将注意力放在了MaxNoOfTables和MaxNoOfAttributes两个参数上,没有考虑这个参数。感觉还是对于数据库掌握的不好,遇到问题视野很窄,只能依靠搜索引擎找答案。关于config.ini的详细配置参考:《MySQL Cluster 详细配置文件(config.ini).docx》
3、Error Code : 1005 Cannot create table '' (errno: 4335)
问题描述:将表的引擎转换成ndb的时候,个别表报上面的错误。
问题原因:ndb引擎的表,非主键不能设置自增,这些表的id只设置了自增,而没有将其设为主键。可参考:http://lists.mysql.com/cluster/2185
解决方法:将相应的字段设为主键。
4、视图无法自动同步
问题描述:A节点中创建的视图,在B节点中看不到。
问题原因:刚开始以为要改变视图的engine,发现语法错误,也就是不能改变视图的engine。
解决方法:目前无法解决。只能在所有的节点上都创建该视图。参见:http://bugs.mysql.com/bug.php?id=20935
注意事项
从网上看到的,参见:http://blog.youkuaiyun.com/ldb2741/article/details/5868783
第四点很重要
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
参考了http://blog.youkuaiyun.com/guofengzai/article/details/5816791,表示感谢