CentOs 版本 CentOS Linux release 7.5.1804 (Core)
查看CentOs 版本指令
cat /etc/redhat-release
mysql-cluster 版本
mysql-cluster-gpl-7.2.34-linux-glibc2.12-x86_64.tar.gz
准备工作
三台虚拟机 分别用来创建管理节点 sql节点 数据节点
解压缩mysql-cluster 至 /user/local/mysql 目录下, 并重命名
tar -zxvf mysql-cluster-gpl-7.2.34-linux-glibc2.12-x86_64.tar.gz -C /usr/local
mv mysql-cluster-gpl-7.2.34-linux-glibc2.12-x86_64 mysql
关闭防火墙
systemctl stop firewalld
创建用户组, 添加用户并授权
groupadd mysql
useradd -g mysql mysql
chown -R mysql.mysql /usr/local/mysql
管理节点搭建
mkdir /var/lib/mysql-cluster #创建存放配置文件的文件夹
vi /var/lib/mysql-cluster/config.ini #创建配置文件
文件内容:
[ndbd default]
NoOfReplicas=1
DataMemory=512M
IndexMemory=18M
[ndb_mgmd]
HostName=192.168.59.131 #管理节点ip
DataDir=/var/lib/mysql-cluster #用于存放节点数据, 可以自己指定目录
[ndbd]
HostName=192.168.59.133 #数据节点ip
DataDir=/var/lib/mysql-cluster
[mysqld]
NodeId=23
HostName=192.168.59.135 #sql节点ip
管理节点初始化:
/usr/local/mysql/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial #第一次需要 initial 参数
ndb_mgm #进入管理节点
数据节点搭建
解压mysql-cluster 并创建mysql组, 授权mysql 用户之后
配置文件 vi /etc/my.cnf
[mysqld]
ndbcluster
ndb-connectstring=192.168.59.131
[mysql_cluster]
ndb-connectstring=192.168.59.131
/usr/local/mysql/bin/ndbd --initial #初始化 第一次携带 --initial 参数
sql节点搭建
解压mysql-cluster 并创建mysql组, 授权mysql 用户之后
配置文件 vi /etc/my.cnf
[mysqld]
ndbcluster
ndb-connectstring=192.168.59.131
[mysql_cluster]
ndb-connectstring=192.168.59.131
scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data
/usr/local/mysql/support-files/mysql.server start #启动sql节点
备注
启动mysql集群。启动顺序为:管理节点→数据节点→SQL节点。
关闭时只需要关闭管理节点,后面的数据节点会同时被关闭,mysql就和原来一样即可
管理节点关闭命令:ndb_mgm -e shutdown
(执行完成之后管理节点会关闭,数据节点也会关闭,但SQL节点不会,也就是数据库服务需要手动到每一台服务器上停止以保证数据同步)
参考: https://www.cnblogs.com/linkstar/p/6510713.html
疑问?
1.数据节点和mysq节点my。ini怎么配置?
2.ndb-connectstring=192.168.1.10 是自己还是别人?
3.数据节点和mysql节点是用一套程序还是两套?
4.只有一个数据节点可以吗?
5.动态扩展一个节点元数据可以保留吗?
6.动态增加节点需要关闭集群吗?
//
“Illegal value 0 for parameter NodeId.” —— NodeId 不能用0
//20181010 重试
参考
https://www.cnblogs.com/liangyihui/p/5886799.html
管理节点(能启动和停止节点,不能停止SQL节点)
./bin/ndb_mgmd --config-file="/usr/local/mysql/config.ini" --configdir="/usr/local/mysql" --initial #首次启动(参数不能省)
./bin/ndb_mgmd --config-file="/usr/local/mysql/config.ini" --configdir="/usr/local/mysql" #再次启动
./bin/ndb_mgm #查看状态
./bin/ndb_mgm -e shutdown #关闭节点(不能停止SQL节点)
./bin/ndb_mgm -e status #查看状态
./bin/ndb_mgm -e show #查看状态
关闭子节点:
./bin/ndb_mgm
12 stop #(不能停止SQL节点)
show #
#数据节点
vi /etc/my.cnf
./bin/ndbd --initial #首次连接
./bin/ndbd #再次连接
#sql节点
./scripts/mysql_install_db --user=mysql #没想到还必须初始化表
./support-files/mysql.server start
./support-files/mysql.server restart #重启
./support-files/mysql.server stop #关闭
报错".The server quit without updating PID file"
解决:
#启动集群
启动的顺序是 1:管理节点 2:数据节点 3:SQL节点
#关闭集群
./support-files/mysql.server stop #手动关闭SQL节点
./bin/ndb_mgm -e shutdown #(不能停止SQL节点)
//动态添加节点
管理节点
./bin/ndb_mgmd --config-file="/usr/local/mysql/config.ini" --configdir="/usr/local/mysql" --reload
./bin/ndb_mgmd --config-file="/usr/local/mysql/config.ini" --configdir="/usr/local/mysql" --initial #后面需要跟这句
./bin/ndb_mgm -e show #发现新节点信息
//建表
唯一需要注意的是,创建表的时候必须选择表的引擎为NDBCLUSTER,否则表不会进行同步
create table test1(id int,name varchar(10)) engine=ndb ;
//集群测试
1建表 2插入数据
1故障 2写入 1接入 2故障 1查询
#故障
1断网 2写数据 1联网查数据
备份
1故障 备份
还原
1故障 还原
//默认
/usr/local/mysql/mysql-cluster
The default config directory ‘/usr/local/mysql/mysql-cluster’ does not exist. Trying to create it…
启动管理节点
./bin/ndb_mgmd --config-file="/usr/local/mysql-cluster/config.ini" --configdir="/usr/local/mysql-cluster/"
“MySQL Cluster Management Server mysql-5.5.61 ndb-7.2.34” //启动成功,监听1186端口
./bin/ndb_mgm //查看
./bin/ndb_mgm -e shutdown //关闭
//启动数据节点
“at line 15: Parse error” —— windows 换行符和linux不同
#启动数据节点
./bin/ndbd --initial
报错"Unable to connect with connect string: nodeid=0,localhost:1186",哪来的nodeid=0?
解决:真正的配置文件在 /etc/my.cnf,而且不可以指定。
“Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf”
启动mysql节点
错误: "[ERROR] Can’t find messagefile '/usr/local/mysql/share/errmsg.sys"
解决1:指定 --basedir=""
./bin/mysqld --default-file="/usr/local/mysql-cluster/my.ini" --basedir="/usr/local/mysql-cluster" --datadir="/usr/local/mysql-cluster/data"
解决2:(未测试)/mysql/my.cnf
basedir=
datadir=
报错: “[ERROR] Fatal error: Can’t change to run as user ‘mysql’ ; Please check that the user exists!”
解决:
useradd mysql
chown -R mysql:mysql mysql
报错:" [ERROR] Can’t open the mysql.plugin table. Please run mysql_upgrade to create it."
解决:
疑问:究竟是my.ini 还是 my.cnf?
解决:
windows: my.ini
linux: my.cnf
./bin/mysqld --defaults-file="/etc/my.cnf" --basedir="/usr/local/mysql-cluster" --datadir="/usr/local/mysql-cluster/data"
[ndb_mgmd]
NodeId=2
HostName=192.168.2.1
DataDir=D:\program\mysql-cluster-gpl-7.2.34-winx64\data
#/etc/my.cnf 源文件
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
#Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
#/etc/my.cnf 修改后
//全部功能都是单节点测试
报错: “Starting MySQLCouldn’t find MySQL server (/usr/local/mysql/[失败]sqld_safe)”