下面的这些搭建步骤都是参考Mysql的官方文档 java
准备工做: node
登陆windows时最好用Administor登陆(特别是管理节点,用其它用户登陆了一次,以后就搭建不了,老是出现"修改不了一些文件的错误"),否则程序没有权限修改某些文件。 mysql
我有俩台笔记本,笔记本A(操做系统是Windows7 64位)、笔记本B(操做系统是Windows7 64位),在笔记本B上装上VMWare装上俩台64位的Windows7虚拟机(分别是vm-w一、vm-w2),即如今有4台64位的windows7(A、B、vm-w一、vm-w2)。 sql
在电脑A上开无线,B连上A的无线,这样vm-w1和vm-w2也会连上网, 数据库
A上的IP为192.168.155.1,B上的IP为192.168.155.2,vm-w1的IP为192.168.155.3,vm-w2的IP为192.168.155.4。 windows
须要4个节点 : ide
一个管理节点ndb_mdmd、一个SQL节点、俩个Data节点,分别放在不一样的电脑上。 this
管理节点装在B上,SQL节点装在A上,一个Data节点装在vm-w1上,另外一个Data节点装在vm-w2上。 url
一、先在A上装SQL节点: spa
从 http://dev.mysql.com/downloads/cluster/上下载zip包,解压后放在C盘根目录下,且将解压获得的文件名重设置为mysql,建立一个txt文件,以后如下内容放入这个txt中:
[mysqld] # Options for mysqld process: ndbcluster # run NDB storage engine ndb-connectstring=192.168.155.2 # location of management server以后另存为 C:\mysql\my.ini,即另存为my.ini(另存为时选的存储格式为ASCII)放在C:/mysql目录下。
二、装Data Nodes
在vm-w1上的C;/下建立目录mysql,即C:/mysql下建立文件夹bin和文件夹cluster-data。
以后建立一个txt文件,以后将如下内容放入其中:
[mysql_cluster] # Options for data node process: ndb-connectstring=192.168.155.2 # location of management server另存为 C:\mysql\my.ini。
以后:在A上的C;/mysql/bin下有个ndbd.exe,将这个ndbd.exe拷贝到vm-w1的C;/mysql/bin下。
到此为止vm-w1上的配置已经完成。
在vm-w2上搭建步骤也和上面再vm-w1上的搭建步骤一致。
三、搭建管理节点
在B上搭建管理节点。
3.一、在C:/下建立目录mysql,在C:/mysql下建立文件夹bin和文件夹cluster-data,以后在C:/mysql/bin下建立文件夹cluster-logs。
3.二、在A的C;/mysql/bin下有ndb_mgm.exe和ndb_mgmd.exe,将这俩个文件拷贝到B的C:/mysql/bin下。
3.三、建立一个txt文件,在里面放入下面的内容:
[mysql_cluster] # Options for management node process config-file=C:/mysql/bin/config.ini另存为 C:\mysql\bin\my.ini。
3.四、建立一个txt,在里面放入下面的内容:
[ndbd default]
# Options affecting ndbd processes on all data nodes:
NoOfReplicas=2 # Number of replicas
DataDir=C:/mysql/cluster-data # Directory for each data node's data files
# Forward slashes used in directory path,
# rather than backslashes. This is correct;
# see Important 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]
# Management process options:
HostName=192.168.155.2 # Hostname or IP address of management node
DataDir=C:/mysql/bin/cluster-logs # Directory for management node log files
[ndbd]
# Options for data node "A":
# (one [ndbd] section per data node)
HostName=192.168.155.3 # Hostname or IP address
[ndbd]
# Options for data node "B":
HostName=192.168.155.4 # Hostname or IP address
[mysqld]
# SQL node options:
HostName=192.168.155.1 # Hostname or IP address
另存为
C:\mysql\bin\config.ini。
如今全部的搭建已经完成。
启动MySQL Cluster:
一、先在B上启动management node
C:/mysql/bin>ndb_mgmd
以后光标会处于服务状态(即不容许用户输入)
若是出现什么建立目录"System/CurrentControlSet/services/eventlog/Application/MySQL"失败,那么须要修改Windows7的注册表——打开注册表,在目录System/CurrentControlSet/services/eventlog/Application下建立一个名为"MySQL"的项。以后从新启动ndb_mgmd。
二、在vm-w1和vm-w2分别启动Data Node
C:/mysql/bin>ndbd
以后光标会处于服务状态
三、在B的management node启动ndb_mgm(用来查看链接信息的)
在B上从新开一个命令窗口,以后C:/mysql/bin/ndb_mgm。
以后用show来查看链接信息:
ndb_mgm>show
四、在A上启动mysql node
在A上输入mysqld --console:
C:/mysql/bin>mysqld --console
以后在A上另起一个窗口C:/>mysql -u root -p (以后直接回车)
以后会提示输入密码,直接回车就行(我搭建时没有设置密码)。
就会进入mysql的用户命令窗口。
关闭MySQL Cluster:
一、在A上退出mysql的用户命令窗口
二、在A的mysqld窗口,用Ctrl+C退出mysqld窗口
三、在B的ndb_mgm的窗口中输入shutdown来关闭Cluster
ndb_mgm>shutdown
用JAVA链接MySQL Cluster:
首先在A的mysql命令窗口输入:
grant all on *.* to root@"192.168.155.1" identified by ""; 这是赋予权限让远程客户端链接数据库
以后就和普通的链接方式同样了,代码以下:
package com.yun.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import com.yun.utl.Out; public class ConnectToCluster { //grant all on *.* to root@"192.168.155.1" identified by ""; public static void main(String[] args) { String url = "jdbc:mysql://192.168.155.1:3306/test"; String user = "root"; String pwd = ""; try { Class.forName("com.mysql.jdbc.Driver"); Connection conn=DriverManager.getConnection(url, user, pwd); //System.out.println(conn); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("select * from person order by id"); while(rs.next()){ int id =rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); Out.println("id:"+id+" age:"+age+" name:"+name); } if(rs!=null){ rs.close(); } if(stmt!=null){ stmt.close(); } if(conn!=null){ conn.close(); } } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }