网上有很多关于windows下做mysql集群的文档,但是基本都有些细节没提,我踩了2天的坑,终于上岸。因此,特意写下这篇,以作记录。
注意,部署mysql集群前不需要安装mysql server,如果安装过请清理干净(卸载,并删除文件夹,注册表删除mysql相关键值,并重启)
本文的服务器环境皆为windows_server_2008_r2。
一、前期准备工作,下载DirectX修复工具(DirectX Repair) v3.9 中文版,在所涉及的服务器上运行。
请先点击“工具”-》“实验室”-》勾选“C++强力修复”,再点击“检测并修复”,修复完成后需重启服务器。
不执行此步,后期会报缺失xxx.dll等错误
二、官网下载MySQL Cluster,我下载的版本是MySQL Cluster 7.6.13,建议下载压缩包
三、集群结构:
我这里是3台服务器,分别为:
192.168.14.128(管理节点)
192.168.14.129(数据节点、SQL节点)
192.168.14.130(数据节点、SQL节点)
注:管理节点同时作为其他节点时会有警告,大意就是管理节点与其他节点host一致,如果该节点瘫痪,可能导致整个集群不可用。
这里需要保障3台服务器的网络可互相ping通,并关闭3个服务器的防火墙(网上有说仅开放3306、2202、1168端口即可,亲测不行),不关闭防火墙可能导致无法连接管理节点、SQL节点不稳定(刷新连接中、再刷新未连接)等。
以下步骤的配置文件请保证为ANSI编码,否则可能导致服务无法启动等情况
四、配置管理节点:
在192.168.14.128(管理节点服务器)的C盘创建文件夹mysql,
在C:\mysql\下创建3个文件夹,“bin”、“cluster-logs”、“mysql-cluster”,结构如图:
在C:\mysql\bin\文件夹下创建2个配置文件:
my.ini
[mysql_cluster]
# Options for management node process
config-file=C:/mysql/bin/config.ini
config.ini
[NDBD DEFAULT]
NoOfReplicas=2
DataDir=c:/mysql-cluster/datanode/mysql/bin/cluster-data
DataMemory=80M
IndexMemory=18M
[MYSQLD DEFAULT]
[NDB_MGMD DEFAULT]
[TCP DEFAULT]
[NDB_MGMD]
Nodeid=1
#管理节点服务器
HostName=192.168.14.128
# Storage Engines
DataDir=C:/mysql/cluster-logs
[NDBD]
Nodeid=2
#数据节点IP地址
HostName=192.168.14.129
[NDBD]
Nodeid=3
#数据节点IP地址
HostName=192.168.14.130
[MYSQLD]
Nodeid=4
#SQL节点IP地址
HostName=192.168.14.129
[MYSQLD]
Nodeid=5
#SQL节点IP地址
HostName=192.168.14.130
将压缩包中的bin\目录下的ndb_mgm.exe和ndb_mgmd.exe,解压至C:\mysql\bin\文件夹中:
五、配置数据节点:
192.168.14.129、192.168.14.130两台服务器都需要如下配置
在C盘创建mysql-cluster\datanode\mysql目录,并在该目录创建“my.ini”配置文件和“bin”文件夹:
my.ini
[mysql_cluster]
# Options for data node process:
ndb-connectstring=192.168.14.128
注意,这里指向管理节点的IP地址
在C:\mysql-cluster\datanode\mysql\bin文件夹下创建“cluster-data”文件夹,这里要与管理节点的config.ini中的第一个DataDir对应。
将压缩包中的bin\ndbd.exe解压到C:\mysql-cluster\datanode\mysql\bin目录下。
六、配置SQL节点:
192.168.14.129、192.168.14.130两台服务器都需要如下配置:
在C盘创建mysql-cluster\sqlnode\mysql目录,创建“my.ini”配置文件和“data”文件夹,
my.ini
[mysqld]
# Options for mysqld process:
ndbcluster # run NDB storage engine
ndb-connectstring=192.168.14.128 # location of management server
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
注意,这里指向管理节点的IP地址
将压缩包中mysql-cluster-gpl-7.6.13-winx64文件夹里的文件,全部解压至C:\mysql-cluster\sqlnode\mysql文件夹中:
以管理员身份运行CMD命令行,切换到C:\mysql-cluster\sqlnode\mysql\bin下:
分别执行以下命令(初始化mysql数据库,后续再设置密码):
mysqld --initialize-insecure
mysqld --install
打开注册表(运行“regedit”),找到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\MySQL
修改ImagePath的值为:
C:\mysql-cluster\sqlnode\mysql\bin\mysqld --defaults-file="C:\mysql-cluster\sqlnode\mysql\my.ini" MySQL
注意空格。
注意:启动顺序为 管理节点-》数据节点-》SQL节点,请启动完管理节点后,再启动所有数据节点,最后启动所有SQL节点。
七、启动管理节点:
切换至管理节点服务器192.168.14.128,以下分为A方法(测试用,cmd命令行不可关闭,关闭则停止服务)、B方法(注册为services服务),执行其一即可
A.以管理员身份运行cmd命令行,切换到“C:\mysql\bin”路径下,执行
ndb_mgmd -f C:\mysql\bin\config.ini --configdir=C:\mysql\mysql-cluster
执行完不要关闭cmd窗口(这里未注册成服务,关闭窗口服务就停了)
B.以管理员身份运行cmd命令行,切换到“C:\mysql\bin”路径下,执行
ndb_mgmd.exe --install=ndb_mgmd --config-file="C:\\mysql\\bin\\config.ini" --configdir="C:\\mysql\\mysql-cluster"
注意反向双斜杠,执行完成后,到services中启动ndb_mgmd服务即可(服务自动启动,无需保持命令行常开)
八、启动数据节点:
切换至:192.168.14.129、192.168.14.130两台服务器都需要如下操作,以下分为A方法(测试用,cmd命令行不可关闭,关闭则停止服务)、B方法(注册为services服务),执行其一即可
A.以管理员身份运行cmd命令行,切换到“C:\mysql-cluster\datanode\mysql\bin”路径下,执行
ndbd
执行完不要关闭cmd窗口(这里未注册成服务,关闭窗口服务就停了)
如果提示“unbale to connect with connect string nodeid=0",则表示管理节点的服务已经停了或无法连接至管理节点
B.以管理员身份运行cmd命令行,切换到“C:\mysql-cluster\datanode\mysql\bin”路径下,执行
ndbd.exe --install=ndbd
执行完成后,到services中启动ndbd服务即可(服务自动启动,无需保持命令行常开)
九、启动SQL节点:
切换至:192.168.14.129、192.168.14.130两台服务器都需要如下操作,到到services中启动MySQL服务即可
十、查看连接状态:
切换至192.168.14.128管理节点服务器,命令行里分别执行
C:\mysql\bin\ndb_mgm
show
如图:
即表示各节点启动成功。
十一、测试
在192.168.14.129、192.168.14.130两台SQL节点服务器中,
任选一台服务器A中,启动Navicat连接mysql,创建数据库test,并执行以下语句
CREATE TABLE `country` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '国家id',
`country_code` varchar(20) NOT NULL COMMENT '国家代码',
`name` varchar(20) NOT NULL COMMENT '国家名称',
PRIMARY KEY (`id`)
) ENGINE=ndbcluster DEFAULT CHARSET=utf8 COMMENT='国家';
ENGINE=ndbcluster表示该表为数据节点可操作,没有则不同步。
并插入数据:
insert into country (country_code,name) values ('086','China');
再到另一台服务器B中,启动Navicat连接mysql,查看数据是否同步过去了。
十二、修改MYSQL密码
在192.168.14.129、192.168.14.130两台SQL节点服务器中,运行CMD命令行,切换至C:\mysql-cluster\sqlnode\mysql\bin路径下,分别执行:
mysql -uroot
use mysql
set password for 用户名@localhost = password('新密码');
//如set password for root@localhost = password('123456');
flush privileges;
exit
十三、Java访问mysql集群:
jdbc:mysql:loadbalance://192.168.14.129:3306,192.168.14.130:3306/test?roundRobinLoadBalance=true
使用roundRobin算法,若是其中一台机器down掉以后,将会自动将不能访问的数据库服务器 踢除,如果还原后将继续进行压力分载。