Linux CentOS-6.8 安装mysql集群

前言提示:公共配置需要在三台服务器上配置,管理节点在192.168.1.146上配置,数据节点需要在147,148上配置,sql节点需要在147,148上启动.详情如下文所示:

1. 安装环境 :Linux CentOS-6.8 64

2.Mysql集群版本:mysql-cluster-gpl-7.3.7-Linux-glibc2.5  64

3.Mysql集群安装包下载链接http://pan.baidu.com/s/1hsvHcf6提取密码:ek9s

本文将搭建一个最简化的MySQL Cluster系统,配置方法中的所有命令都是以root账户运行。这个MySQL Cluster包含一个管理结点,两个数据结点,两个SQL结点,这五个结点会分别安装在三个虚拟机上,虚拟机的名称和IP如下示:


一,公共配置

请在三台服务器(192.168.1.146,192.168.1.147,192.168.1.148)上分别配置此处的配置项

1.首先关闭三台服务器的防火墙

a)关闭防火墙:service iptables stop  

2.查看并卸载自带的mysql

a)查看:rpm -qa | grep mysql


b)卸载:yum -y remove mysql-libs-5.1.73-7.el6.x86_64

3.解压mysql集群安装包

a)解压:tar -zxvf mysql-cluster-gpl-7.3.7-linux-glibc2.5-x86_64.tar.gz


b)移动解压的文件夹到/usr/local/mysql目录

i.mv mysql-cluster-gpl-7.3.7-linux-glibc2.5-x86_64 /usr/local/mysql


4.关闭SeLinux

a)编辑:vi /etc/selinux/config

config文件中的SELINUX项改为disabled,修改后的config文件的内容如下:

修改如图标记的地方:SELINUX=disabled然后保存退出文件


b)保存退出


注意:以上就是三台服务器(146,147,148)都需要配置的,到这一步公共配置完成,接下来是每个节点的单独配置安装。一步一步来,少一步就可能导致安装mysql集群不成功。

二,配置管理结点(192.168.1.146)

1.配置config.ini配置文件

a)shell中运行以下命令:

(1.)mkdir /var/lib/mysql_cluster

(2.)cd /var/lib/mysql_cluster

(3.)vi config.ini


(4.)配置文件config.ini内容如下:

(5.)添加以下内容:

[NDBD DEFAULT]

NoOfReplicas=1

DataMemory=500M

IndexMemory=300M

[TCP DEFAULT]

#portnumber=2202

[NDB_MGMD]

hostname=192.168.1.146

datadir=/var/lib/mysql_cluster/

[NDBD]

hostname=192.168.1.147

datadir=/usr/local/mysql/data/

[NDBD]

hostname=192.168.1.148

datadir=/usr/local/mysql/data/

[MYSQLD]

hostname=192.168.1.147

[MYSQLD]

hostname=192.168.1.148

(6.)Esc:wq保存退出

2.安装管理节点

安装管理节点,不需要mysqld二进制文件,只需要MySQL Cluster服务端程序(ndb_mgmd)和监听客户端程序(ndb_mgm)

运行以下命令:

(1)cp /usr/local/mysql/bin/ndb_mgm* /usr/local/bin/

(2)cd /usr/local/bin/

(3)chmod +x ndb_mgm*

3.启动管理节点

a)启动:ndb_mgmd -f /var/lib/mysql_cluster/config.ini 下图表示启动成功

b)使用ndb_mgm监听客户端:ndb_mgm

下图表示管理节点已经启动成功,数据节点和SQL节点因为我们还没配置所以未启动

三,配置数据节点(192.168.1.147,192.168.1.148)

注意:以下配置两台服务器要完全一样

1.添加mysql组合用户

a)运行以下命令:

(1)groupadd mysql
(2)useradd -g mysql mysql

2.配置my.cnf配置文件

b)编辑:vi /etc/my.cnf 添加以下内容

c)配置文件my.cnf的内容如下:

[client]

port=3306

socket=/usr/local/mysql/sock/mysql.sock

[mysqld]

basedir=/usr/local/mysql/

datadir=/usr/local/mysql/data/

socket=/usr/local/mysql/sock/mysql.sock

user= mysql

#log-error=/var/lib/mysql/mysqld.err

ndbcluster

ndb-connectstring=192.168.1.146

[mysql_cluster]

ndb-connectstring=192.168.1.146

d)Esc:wq保存退出

3.创建系统数据库

a)执行以下命令:

(1)cd /usr/local/mysql

(2)mkdir sock

(3)scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr  /local/mysql/data

4.设置数据目录

a)执行以下命令,注意:点号一定不能少

(1)chown -R root .
(2)chown -R mysql.mysql /usr/local/mysql/data
(3)chown -R mysql.mysql /usr/local/mysql/sock
(4)chgrp -R mysql .

   

5.配置Mysql服务

运行以下命令:

(1)cp support-files/mysql.server /etc/rc.d/init.d/
(2)chmod +x /etc/rc.d/init.d/mysql.server
(3)chkconfig --add mysql.server

6.启动数据节点

首次启动,则需要添加--initial参数,以便进行NDB节点的初始化工作。在以后的启动过程中,则是不能添加该参数的,否则ndbd程序会清除在之前建立的所有用于恢复的数据文件和日志文件。

a)首次启动:/usr/local/mysql/bin/ndbd --initial(此方式会清楚所有数据文件和日志文件,不建议使用)

b)非首次启动:/usr/local/mysql/bin/ndbd(建议使用)

7.关闭数据节点

a)ps -ef | grep ndbd

b)kill -9 2382 2382(root用户执行才有权限)

8.管理节点查看:如下图所示

下图表示147,148两台服务器数据节点配置成功

四,启动SQL节点(192.168.1.147,192.168.1.148)

注意:因为SQL节点和数据节点在同一个虚拟机上,所以数据节点配置完成SQL节点也就配置完成了,只需要启动SQL节点

1.启动SQL节点:(以下两种方式都可以)

a)启动:/etc/init.d/mysql.server start(有时候显示成功,可能并没有启动成功,去管理节点查看是否成功,以管理节点显示为准)

 

b)重启:/etc/init.d/mysql.server restart(如果上面的命令启动不成功,那么就使用这条命令,可以会出现如下图所示错误,按照下面的解决方法即可)

   

c)出现下图表示启动失败


2.解决办法:依次输入以下命令

原文:http://blog.sina.com.cn/s/blog_637e04c9010117ri.html

(1)cd /usr/local/mysql

(2)chown -R mysql.mysql .

(3)su - mysql

(4)cd /usr/local/mysql

(5)scripts/mysql_install_db 

3.然后再输入/etc/rc.d/init.d/mysql.server restart 重启数据库即可

    

4.下图表示管理节点,数据节点,SQL节点开启成功

  

五,Mysql_cluster环境启动

注意启动顺序:首先是管理节点,然后是数据节点,最后是SQL节点。

1.启动管理节点:

启动:ndb_mgmd -f /var/lib/mysql_cluster/config.ini

b)监听客户端:ndb_mgm

2.启动数据节点:

首次启动,则需要添加--initial参数,以便进行NDB节点的初始化工作。在以后的启动过程中,则是不能添加该参数的,否则ndbd程序会清除在之前建立的所有用于恢复的数据文件和日志文件。

a)初始化启动:/usr/local/mysql/bin/ndbd --initial(会清除数据文件和日志文件,如果不是首次启动不建议使用此种方法)

b)启动:/usr/local/mysql/bin/ndbd(建议使用)

3.启动SQL节点:

a)启动:/etc/init.d/mysql.server start(如果出现错误请参照步骤四的解决方法)

六,集群测试

测试一

现在我们在其中一个SQL结点上进行相关数据库的创建,然后到另外一个SQL结点上看看数据是否同步。

SQL结点1(192.168.1.147)上执行:

1./usr/local/mysql/bin/mysql -u root -p 数据库登录(无密码回车即可)
2.显示所有数据库:show databases;


3.创建数据库aa:create database aa;

4.使用数据库aa:use aa;


5.create Table test (id int) engine = ndb;

创建表并指定数据库表的引擎为NDB,这里必须要指定引擎为ndb否则同步失败


6.插入数据:insert into test (id)values (1) ;

7.查询:select * from test;


然后在SQL结点2(192.168.1.148)上看数据是否同步过来了

1.登陆:/usr/local/mysql/bin/mysql -u root -p

2.显示数据库:show databases;

3.使用数据库:use aa;

4.查看数据:select * from test;


经过测试,在非master上创建数据,可以同步到master

5.查看表的引擎是不是NDB:show create table test;

2. 测试二

关闭一个SQL节点 (147节点),在另外一个节点(148节点)输入,然后再开启关闭的节点(147节点),看数据是否同步过来。

SQL结点(192.168.1.148)上操作如下:

1.登录:/usr/local/mysql/bin/mysql -u root -p

2.创建数据库:create database cc;

3.使用数据库:use cc;

4.创建表test并指定引擎:create table test(id int) engine = ndb;

5.插入数据:insert into test(id)values(333);

6.查询数据:select * from test;


开启147节点,SQL结点(192.168.1.147)上操作如下:

1.启动:/etc/rc.d/init.d/mysql.server restart (如果出现错误,在上面步骤四有解决方法)

2.登录:/usr/local/mysql/bin/mysql -u root -p

3.显示数据库:show databases;

4.使用数据库:use cc;

5.查询表:select * from test;

如下图所示数据已经同步了


七,修改密码

1.登录:/usr/local/mysql/bin/mysql -u root -p(无密码回车即可)

2.显示数据库:show databases;

1.使用mysql数据库:use mysql;

 

2.修改密码:update user set Password=password("root") where user='root';

 

5.刷新生效:flush privileges;


6.再次登录就需要密码了

八,Navicat for MySQL远程连接mysql

说明:在执行下面步骤之前,工具应该连接不上,用户没有权限,下面就介绍两种方法,修改权限允许用户连接

注意:连接之前一定要关闭虚拟机防火墙

方法1:

(1)登录数据库:/usr/local/mysql/bin/mysql -u root -p

(2)使用数据库:use mysql;

(3)授权法:GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

(4)刷新生效:flush privileges;


(5)修改之后就可以连接了,如下图所示


方法2:

(1)先使用ssh通道连接虚拟机,不用点击确定,只需要用户名和密码正确

 

(2)再使用常规连接

为什么主机名是localhost呢,因为上面使用了ssh通道连上虚拟机之后localhost就相当于192.168.1.48,如果不使用ssh通道连接虚拟机的话那么localhost就相当于本机ip而不是虚拟机的ip

 

(3)连接之后查看用户,下图所示只允许了localhost连接所以192.168.1.48连接不上

(4)添加新用户允许所有ip连接,并赋权限

九,关闭集群

1.然后关闭Sql节点(147,148),分别在2个节点里运行:

a)关闭:/etc/init.d/mysql.server stop


b)启动:/etc/init.d/mysql.server start

c)重启:/etc/init.d/mysql.server restart

d)重新加载mysql:/etc/init.d/mysql.server reload

2.关闭管理节点和数据节点,只需要在管理节点中执行:

a)关闭:/usr/local/mysql/bin/ndb_mgm -e shutdown


十,java连接mysql集群

package conn;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 * 连接mysql集群
 * 
 * @author Liucong
 * 
 * @时间:2017年6月12日下午7:47:59
 */
public class MysqlClusterConn {
	public static void main(String[] args) {
		MysqlClusterConn mysqlClusterConn = new MysqlClusterConn();
		mysqlClusterConn.getCon();
		// mysqlClusterConn.insert();
		// mysqlClusterConn.delete();
		// mysqlClusterConn.update();
		mysqlClusterConn.select();
	}

	/**
	 * 链接数据库
	 * 
	 * @return conn 连接对象
	 */
	private Connection getCon() {
		Connection conn = null;
		try {
			// 加载驱动
			Class.forName("com.mysql.jdbc.Driver");
			// 连接集群关键字loadbalance
			conn = (Connection) DriverManager
					.getConnection("jdbc:mysql:loadbalance://192.168.1.47:3306,192.168.1.48:3306/test", "root", "root");
		} catch (Exception e) {
			e.printStackTrace();
		}
		return conn;
	}

	/**
	 * 关闭所有连接
	 * 
	 * @param conn
	 * @param ps
	 * @param st
	 * @param rs
	 */
	private void closeAll(Connection conn, PreparedStatement ps, Statement st, ResultSet rs) {
		try {
			// 当连接不等于空的时候关闭
			if (null != conn) {
				conn.close();
			}
			if (null != ps) {
				ps.close();
			}
			if (null != st) {
				st.close();
			}
			if (null != rs) {
				rs.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 添加数据
	 */
	private void insert() {
		try {
			Connection conn = getCon();
			String sql = "insert into test(id,name)values(111,'aa');";
			// 通过数据库连接加载指定的SQL语句,预编译sql,一般会使用预编译sql,比较安全
			PreparedStatement ps = (PreparedStatement) conn.prepareStatement(sql); // 执行sql
			ps.executeUpdate();
			// Statement st = (Statement) conn.createStatement();
			// 非预编译sql不推荐使用
			// st.executeUpdate(sql);
			System.out.println("添加成功。");
			closeAll(conn, ps, null, null);// 关闭连接
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 查询数据
	 */
	protected void select() {
		try {
			Connection conn = getCon();// 连接数据库
			String sql = "select * from test";
			PreparedStatement ps = (PreparedStatement) conn.prepareStatement(sql);
			ps.executeQuery();// 执行查询
			ResultSet rs = ps.getResultSet();
			while (rs.next()) {
				System.out.println("id:" + rs.getInt("id") + "  name:" + rs.getString("name"));
			}
			closeAll(conn, ps, null, rs);// 关闭连接
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 删除数据
	 */
	private void delete() {
		try {
			Connection conn = getCon();
			String sql = "delete from test where id = 110;";
			PreparedStatement ps = (PreparedStatement) conn.prepareStatement(sql);
			ps.executeUpdate();// 执行删除
			System.out.println("删除成功。");
			closeAll(conn, ps, null, null);// 关闭连接
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 修改数据
	 * 
	 * @param conn
	 */
	private void update() {
		try {
			Connection conn = getCon();
			String sql = "update test set name = ? where id  =?";
			PreparedStatement ps = (PreparedStatement) conn.prepareStatement(sql);
			ps.setString(1, "admin");// 设值
			ps.setInt(2, 111);
			ps.executeUpdate();// 执行修改
			System.out.println("修改成功");
			closeAll(conn, ps, null, null);// 关闭连接
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
——————————————————————————————————————————————————————————————————————————————


  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值