Mysql集群
1,安装环境与硬件设施
环境:windows server 2008R2
5台数据库部署机器,都安装在虚拟机里:
Management node(ndb_mgmd): 172.16.14.32
Data node(ndbd): 172.16.14.35
Data node(ndbd): 172.16.14.37
Sql node(mysqld): 172.16.14.39
Sql node(mysqld): 172.16.14.43
客户机:
172.16.0.235(xp)(注:本机做测试,子网掩码 248)
2安装验证数据库
从http://www.mysql.com/products/cluster/下载最新的windows版本:
共享:\\172.16.10.253\软件工具共享\数据库软件\MySQL\mysql-cluster\
mysql-cluster-gpl-7.3.2-winx64.msi
将mysql-cluster-gpl-7.3.2-winx64.msi
分别安装到5台node机器的C:\program\MySQL\MySQLCluster 7.3\bin(默认安装)
将C:\program\MySQL\MySQLCluster 7.3\bin添加到系统环境变量path中
安装时可能安装未完全,需要自己手动
Mysqld.exe install
Net start mysql
输入命令mysqld –console,可以打开mysqld进程,并显示了数据库的一些基本信息。
当然,可以在mysqld –console命令前加上start /b,即start /bmysqld –console,这样在当前cmd窗口可以继续输入其它命令。也就是说ctrl + c 无法中断mysqld进程了。
验证是mysqld服务是否已经启动了,敲入命令mysql–uroot。默认用户root,没有设置密码。你可以通过mysql命令select user,host,passwordfrom mysql.user;看到表里的信息:
可以通过以下几个方法重置密码:
(1) 使用set命令:
set PASSWORD FOR 'root'@'localhost' =PASSWORD('newpwd');
(2)使用update命令:
mysql>updatemysql.user set password = PASSWORD('newpwd') where user = 'root';
mysql>flushprivileges;
(3)使用mysqladmin
mysql > mysqladmin -u root password "newpwd"
mysql > mysqladmin-u root -h host_name password "newpwd"
更多方法见:http://dev.mysql.com/doc/refman/5.1/en/default-privileges.html
附:在本文示例中将密码也设为root
关闭mysqld:
mysql>mysqladmin -h xx -uxx -pxxx shutdown
3配置与开启集群
3.1数据库权限与访问配置
两个sql node都要配置成能被远程访问,这点很重要,是首先需要保证的,所以在进行其它配置之前先进行这个配置与验证。Cluster版本默认是不支持的远程访问的。
要在
[mysqld] 中加入
Skip-grant-tables
验证方法:在sql node的机器上开启mysqld,然后进行相互的连接访问:mysql –uroot–proot –h xxx。
3.3配置managementnode
更多关于这方面的配置参见官方文档:
http://dev.mysql.com/doc/mysql-cluster-excerpt/5.1/en/mysql-cluster-install-windows-binary.html
总体说下,每种类型的node需要配置的内容不一样。Management node在启动时主要需要读以下element信息:[ndb_mgmd]/ [ndbd]/[mysqld],可以将这些配置写入一个文本文件,在启动时作为参数加入。
以下操作都在Managementnode(ndb_mgmd): 172.16.14.32上操作。
在C:\新建 mysql\mysql_cluster\config.ini
并写入如下内容:
[NDBD DEFAULT]
NoOfReplicas=2
[MYSQLD DEFAULT]
[NDB_MGMDDEFAULT]
[TCP DEFAULT]
# ManagmentServer
[NDB_MGMD]
HostName=172.16.14.32#管理节点服务器db1的IP地址
# StorageEngines
[NDBD]
HostName=172.16.14.35#MySQL集群db1的IP地址
DataDir=C:\data #如果不存在就创建一个
[NDBD]
HostName=172.16.14.37#MySQL集群db3的IP地址
DataDir= C:\data #如果不存在就创建一个
[MYSQLD]
HostName=172.16.14.38
[MYSQLD]
HostName=172.16.14.43
[ndbd default]节点的配置是通用的ndbd配置,这样ndbd机器对ndb数据库操作记录都保存在c:\data指定的文件下。[mysqld]可以不指定具体值,这样更灵活。[ndb_mgmd]节点下的c:\data是管理节点的日志保存目录,如果启动不了等都可以在日志里找到具体原因。
启动管理节点:
C:\Program Files\MySQL\MySQL Cluster7.3\bin>start/b ndb_mgmd --initial -f c:\mysql\mysql_cluster\config.ini --configdir=c:\mysql\
查看节点信息:
ndb_mgm -e show
附:NodeId一般不需要配置,系统会自动分配。
3.4配置data node
新建文件夹c:\data
Data node不需要配置,只是在启动时注意一个参数- -initial,第一次启动时才加这个参数。
以下操作在data node:
Data node(ndbd): 172.16.14.36
Data node(ndbd): 172.16.14.37
机器上操作。
start /b ndbd -c 172.16.14.36 --initial
-c参数是ndb-connectstring的缩写,是指连接到的管理节点的IP地址或名称。注意这个命令是需要管理节点先启动。这时在管理节点的机器上运行ndb_mgm-e show可以看到data node已经连接上。
3.5配置SQL Node
在c:\下新建my.cnf,为了将node作为cluster的一部分,必须配置下列两个选项:
[mysqld]
Default-storage-engine=MyISAM
ndbcluster # run NDB storage engine
ndb-connectstring=172.16.14.32 # locationof management server
Explicit_defaults_for_timestamp=true
并且必须配置在最前面。
在c:\windows下建立my.ini
[mysql]
mo-auto-rehash
[myisamchk]
key_buffer_size = 8M
sort_buffer_sizw = 8M
[mysqlhotcopy]
interactive-timeout
[mysql_cluster]
ndb-connectstring=172.16.14.32
[mysqld]
ndbcluster
ndb-connectstring=172.16.14.32
可以通过在管理节点的机器上运行ndb_mgm-e show查看是否已经连通。
3.6 QAS
(1)在使用mysql命令连接开启mysqld服务的机器时,出现一些错误信息:
ERROR1042 (HY000): Can't get hostname for your address
和
ERROR1045 (28000): Access denied for user 'root'@'192.168.23.128' (using passwo
rd:NO)
答:这类错误是数据库没有设置成远程访问或无相关权限
(2)在data node机器上启动mysqld命令,刚启动过几秒就自动关闭了?
答:在mysqlc\data\xx(电脑名).err日志文件里找找原因,比如是不是在[mysqld]节点设置了datadir等不能识别的变量。
(3)在win7上无法成功启动mysqld,提示:
SYSTEM.CurrentControlSet.services.eventlog.Application.MySQLCluster Data Node Daemon无法找到也无法创建?
答:可能由于权限等原因,手动在注册表里创建如下项:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application\MySQLCluster Data Node Daemon]
4验证集群
在客户端机器或其它能ping通mysqld服务的mysql node的机器上,运行如下一系列mysql命令:
比如首先连通
Mysql –uroot –proot –h 172.16.14.43
创建数据库:
Create database gengp;
Use gengp;
创建表:
Create table gp (id int not null) engine=ndb;
插入数据:
Insert into gp values (1),(2),(3),(4);
查询表:
Select * from gp;
退出:
Exit;
再连接另一个mysqld:
Mysql –uroot –proot –h 172.16.14.39
查询:
Select * from gp
同样也能查询到数据,这说明能通过两台mysqld服务的机器对外提供数据服务。当然这个示例是数据也保存在这两台机器上。可以看到mysqlc\data\下都有文件夹clusterdb,即是数据文件。
5关闭集群
理论上管理节点可以在集群启动后关闭,但这样一旦某台机器宕机,集群就无法工作了,所以最好保持管理节点机器处于运行状态。
Mysqld服务需要手动关闭:
mysqladmin –h xxx -uroot -proot shutdown
关闭管理节点ndb_mgmd服务,可以在管理节点的机器上,或者在mysql node上(见3.2节)执行如下命令:
ndb_mgm -e shutdown
6命令行索引
启动管理节点:
start /b ndb_mgmd --initial -f conf/config.ini--configdir=c:\program\db\mysqlc\my_cluster\conf
启动数据结点:
start /b ndbd -c 172.16.14.37--initial
查看节点信息:
ndb_mgm -e show
启动mysql服务引擎:
start /b mysqld--defaults-file=D:\program\db\mysqlc\my_cluster\conf\my.cnf
关闭mysqld服务:
mysqladmin -uroot -proot shutdown -h 172.16.14.39
关闭管理服务:
ndb_mgm -e shutdown
参考
官方网站:http://www.mysql.com/products/cluster/
网上示例:http://www.unchis.com/html/db/mysql/2011/0405/299.html