Linux
http://www.cnblogs.com/smalldirector/archive/2011/12/28/2304353.html
MySQL Cluster 是MySQL适合于分布式计算环境的高实用、高冗余版本。它采用了NDB Cluster 存储引擎,允许在1个 Cluster 中运行多个MySQL服务器。MySQL Cluster 是一种技术,该技术允许在无共享的系统中部署“内存中”数据库的 Cluster 。通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求。此外,由于每个组件有自己的内存和磁盘,不存在单点故障。
首先我们下载Mysql Cluster,下载链接地址为MySQL Cluster 7.1.17,我们采用的服务器为CentOS Server和Ubuntu Server,所以我们下载针对Linux Generic版本。
现在我有三台服务器,两个是CentOS Server,一个是Ubuntu Server,前两个Server分别作为Data Node和SQL Node(Data Node和SQL Node在同一个机器上面),
后者作为Management Node,如果没有真实机器的,可以用虚拟机模拟,下面是我的IP部署:
1 192.168.56.10 Data Node + Sql Node
2 192.168.56.20 Data Node +Sql Node
3 192.168.56.30 Management Node
下面是我机器的大致拓扑图结构:
接下来我们就需要对这几个节点进行详细的配置工作:
1、配置Data Node和SQL Node
目前我们采用的三台机器策略,所以把这两个节点放在同一个机器上面,所以我们在一次配置就可以了。
首先我们在192.168.56.10这台机器上面进行操作配置,192.168.56.20操作配置和这样
我们需要在ROOT账户下面执行下属操作,如果在CentOS中遇到命令找不到的问题,就参考我的BlogCentOS系统bash: groupadd: command not found问题
接下来我们要创建一个新的用户组和用户,命令如下:
1 groupadd mysql
2 useradd –g mysql mysql
将mysql cluster放在/usr/local/下面,执行命令:
1 tar -C /usr/local -xzvf mysql-cluster-gpl-7.1.17-linux-i686-glibc23.tar.gz
2 ln -s /usr/local/mysql-cluster-gpl-7.1.17-linux-i686-glibc23 /usr/local/mysql
进入到mysql目录下面,执行数据库初始化命令:
1 scripts/mysql_install_db --user=mysql
进行权限更改操作,命令为:
1 chown -R root .
2 chown -R mysql data
3 chgrp -R mysql .
2、配置Management Node
将ndb_mgmd和ndb_mgm脚本文件放入到/usr/local/bin目录下面,命令为:
1 tar -zxvf mysql-5.1.56-ndb-7.1.17-linux-i686-glibc23.tar.gz
2 cd mysql-5.1.56-ndb-7.1.17-linux-i686-glibc23
3 cp bin/ndb_mgm* /usr/local/bin
更改其对应的权限,命令为:
1 cd /usr/local/bin
2 chmod +x ndb_mgm*
新建目录/var/lib/mysql-cluster/,命令为:
mkdir -p /var/lib/mysql-cluster/
3、配置三台机器的配置文件
两台数据节点的在/etc目录下面创建配置文件my.cnf,其内容为:
[mysqld]
ndbcluster
datadir=/usr/local/mysql/data
basedir=/usr/local/mysql
port=3306
[mysql_cluster]
ndb-connectstring=192.168.56.10
如果在运行过程中出现Mysql数据库“Communications link failure due to underlying exception”问题,请参考这边博文进行配置。
针对192.168.56.20机器只要把ndb-connectstring替换一下就行了。
在管理节点机器/etc目录下面创建config.ini文件,其内容为:
1 [ndbd default]
2 NoOfReplicas=2
3 DataMemory=80M
4 IndexMemory=18M
5
6 [ndb_mgmd]
7 NodeId=1
8 hostname=192.168.56.30
9 datadir=/var/lib/mysql-cluster
10
11 [ndbd]
12 NodeId=2
13 hostname=192.168.56.10
14 datadir=/usr/local/mysql/data
15
16 [ndbd]
17 NodeId=3
18 hostname=192.168.56.20
19 datadir=/usr/local/mysql/data
20
21 [mysqld]
22 [mysqld]
4、启动集群环境
首先我们需要先启动管理节点192.168.56.30机器,执行命令:
1 ndb_mgmd -f /etc/config.ini --initial
如果出现The default config directory '/usr/local/mysql/mysql-cluster' does not exist这个错误信息,就手动创建这个文件夹。
接下来我们需要在192.168.56.10和192.168.56.20启动数据节点,命令为:
1 bin/ndbd --initial
第一次启用需要加—initial参数,第二次启动不能加这个参数。两台机器都分别执行这个命令。
接下来启动这两台机器的sql节点,命令为:
1 bin/mysqld_safe --user=mysql &
两台机器都需要执行这个命令。
最后进入到管理台查看我们的集群是否配置完成,输入命令:
1 ndb_mgm –e show
如果出现下面信息,说明配置成功:
如果看不到上述信息,可能是防火墙问题,你可以选择把CentOS的防火墙关掉,命令为:
1 /etc/init.d/iptables stop
当然你可以选择配置防火墙,开放一些必要的端口,可以参考我的另一篇文章CentOS 打开3306端口
关闭集群,执行命令:
1 ndb_mgm –e shutdown
Windows
http://www.xifenfei.com/1237.html
mysql 集群配置(windows2台机器模拟)
1、环境规划
win7 192.168.1.1(管理节点,存储节点,sql节点)
win03 192.168.1.2(存储节点,sql节点)
2、安装cluster(zip包)
win7机器安装在D:\mysql-cluster中
win03机器安装在C:\mysql-cluster中
存储节点存储路径分别为:D:\mysql-cluster\ndbdata和C:\mysql-cluster\ndbdata
3、win7机器配置
创建D:\mysql-cluster\config.txt文件,内容为:
[NDBD DEFAULT]
NoOfReplicas=2
[NDB_MGMD]
NodeId=1
hostname=192.168.1.1
datadir=D:\mysql-cluster\data
[NDBD]
NodeId=21
hostname=192.168.1.1
datadir=D:\mysql-cluster\ndbdata
[NDBD]
NodeId=22
hostname=192.168.1.2
datadir=C:\mysql-cluster\ndbdata
[MYSQLD]
NodeId=11
hostname=192.168.1.1
[MYSQLD]
NodeId=12
hostname=192.168.1.2
复制D:\mysql-cluster\my-small.ini到c:\windows\my.ini并添加
[mysqld]
ndbcluster
ndb-connectstring=192.168.1.1
[mysql_cluster]
ndb-connectstring=192.168.1.1
4、win03机器配置
复制C:\mysql-cluster\my-small.ini到c:\windows\my.ini并添加
[mysqld]
ndbcluster
ndb-connectstring=192.168.1.1
[mysql_cluster]
ndb-connectstring=192.168.1.1
5、启动
5.1)启动管理节点(win7 上)
D:\mysql-cluster\bin>ndb_mgmd.exe –-config-file=D:\mysql-cluster\config.txt –-configdir=D:\mysql-cluster
5.2)启动存储节点(无先后顺序,第一个启动使用–initial,必须先启动所有的存储节点才能启动sql节点,所以如果只有一个节点测试时,只能
修改config.txt为一个节点)
win7
D:\mysql-cluster\bin>ndbd.exe –-initial
win03
C:\mysql-cluster\bin>ndbd.exe
5.3)启动sql节点(无先后顺序)
win03
C:\mysql-cluster\bin>mysqld.exe –-defaults-file=c:\windows\my.ini
win7
d:\mysql-cluster\bin>mysqld.exe –-defaults-file=c:\windows\my.ini
6、查看是否启动成功
6.1)查看状态
D:\mysql-cluster\bin>ndb_mgm.exe
输出:
– NDB Cluster — Management Client –
输入:
ndb_mgm> show
输出:
Connected to Management Server at: 192.168.1.1:1186
Cluster Configuration
———————
[ndbd(NDB)] 2 node(s)
id=21 @192.168.1.1 (mysql-5.1.56 ndb-7.1.15, Nodegroup: 0, Master)
id=22 @192.168.1.2 (mysql-5.1.56 ndb-7.1.15, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.1.1 (mysql-5.1.56 ndb-7.1.15)
[mysqld(API)] 2 node(s)
id=11 @192.168.1.1 (mysql-5.1.56 ndb-7.1.15)
id=12 @192.168.1.2 (mysql-5.1.56 ndb-7.1.15)
6.2数据操作测试
在win7上创建表,并插入数据
C:\Users\XIFENFEI>mysql -uroot
输出:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.1.56-ndb-7.1.15-cluster-gpl MySQL Cluster Server (GPL)
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql> use test;
Database changed
mysql> create table city(
-> id mediumint unsigned not null auto_incremen
-> name varchar(20) not null default ”
-> ) engine = ndbcluster default charset utf8;
Query OK, 0 rows affected (9.60 sec)
mysql> insert into city values(1, ‘city1′);
Query OK, 1 row affected (0.41 sec)
mysql> insert into city values(2, ‘city2′);
Query OK, 1 row affected (0.01 sec)
mysql> select * from city;
+—-+——-+
| id | name |
+—-+——-+
| 1 | city1 |
| 2 | city2 |
+—-+——-+
2 rows in set (0.00 sec)
win03机器查看数据
C:\mysql-cluster\bin>mysql -uroot
输出:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.1.56-ndb-7.1.15-cluster-gpl MySQL Cluster Server (GPL)
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql> use test;
Database changed
mysql> show tables;
+—————-+
| Tables_in_test |
+—————-+
| city |
+—————-+
1 row in set (0.11 sec)
mysql> select * from city;
+—-+——-+
| id | name |
+—-+——-+
| 1 | city1 |
| 2 | city2 |
+—-+——-+
2 rows in set (0.05 sec)
今天在那做实验倒腾mysql数据库,后来发现服务无法启动,查看日志报错如下:
2015-01-07 17:48:54 9136 [ERROR] InnoDB: .\ibdata1 can't be opened in read-write mode
2015-01-07 17:48:54 9136 [ERROR] InnoDB: The system tablespace must be writable!
2015-01-07 17:48:54 9136 [ERROR] Plugin 'InnoDB' init function returned error.
2015-01-07 17:48:54 9136 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2015-01-07 17:48:54 9136 [ERROR] Unknown/unsupported storage engine: InnoDB
2015-01-07 17:48:54 9136 [ERROR] Aborting
解决方法:
1、打开任务管理器终止mysqld进程;
2、打开mysql安装目录的data文件夹,删除以下2个文件:
ib_logfile0和ib_logfile1
3、重新启动mysql
问题:[Warning] TIMESTAMP with implicit DEFAULT value is deprecated.
Please use --explicit_defaults_for_timestamp server option (see
documentation for more details).
解决:
my.ini的[mysqld]添加:
#开启查询缓存
explicit_defaults_for_timestamp=true