MySQL集群(mysql-cluster)

环境

系统环境:centos7

管理节点:192.168.127.128

数据节点:192.168.127.145,192.168.127.146

sql节点:192.168.127.145,192.168.127.146

约定

创建mysql用户,将程序部署到/home/mysql 目录下

数据节点、sql节点必须卸载mariadb

管理节点 创建/var/lib/mysql/mysql-cluster 目录,且mysql账户有读写权限

管理节点部署

/home/mysql目录下创建config.ini 文件

ini 复制代码
[ndbd default]
NoOfReplicas=2
 
[ndb_mgmd]
NodeId=1
hostname=192.168.127.128
datadir=/home/mysql/mysql-cluster/
 
[ndbd]
NodeId=2
hostname=192.168.127.145
datadir=/home/mysql/data/
[ndbd]
NodeId=3
hostname=192.168.127.146
datadir=/home/mysql/data/
 
[mysqld]
NodeId=4
hostname=192.168.127.145
[mysqld]
NodeId=5
hostname=192.168.127.146

第一次启动执行

shell 复制代码
./bin/ndb_mgmd -f ./config.ini --initial

关闭命令

shell 复制代码
./bin/ndb_mgm -e shutdown

数据节点、sql节点部署

在/etc 目录下创建my.cnf

其中mysql_cluster节点为数据节点的配置,其他的为mysql节点的配置

ini 复制代码
[client]
socket=/home/mysql/mysql.sock

[mysqld]
basedir=/home/mysql
datadir=/home/mysql/data
socket=/home/mysql/mysql.sock
user=mysql
symbolic-links=0
ndbcluster
ndb-connectstring=192.168.127.128

[mysqld_safe]
log-error=/home/mysql/mysqld.log
pid-file=/home/mysql/mysqld.pid

[mysql_cluster]
ndb-connectstring=192.168.127.128

启动数据节点

第一次启动需要加 --initial 参数

shell 复制代码
./bin/ndbd --initial

mysqld配置

(1)初始换数据:

shell 复制代码
./bin/mysqld --initialize

(2)启动mysql

shell 复制代码
./bin/mysqld_safe --user=mysql &

(3) 登录mysql修改root账户密码

sh 复制代码
set password for 'root'@'localhost' = password('123456')
grant all privileges on *.* to 'root'@'%' identified by '123456'

(4)mysqld 关闭

Kill 掉mysqld_safe进程即可

再次启动需要删除 mysql.sock、mysqld.pid、mysql.sock.lock 文件

启动顺序

管理节点>数据节点>sql节点(必须等上级所有节点启动后才能启动下级节点)

关闭顺序

管理节点>数据节点>sql节点

动态增加sql节点、数据节点

一般来说NoOfReplicas是2,那么增加或减少的数量也应该是成对的。一次需要增加2n个数据节点、或者2n个sql节点(n>=1)

修改配置

在config.ini 中增加sql节点或者数据节点

关闭管理节点

执行ndb_mgm进入管理命令界面

找到管理节点的id,然后执行 管理节点id stop,退出

启动

shell 复制代码
./bin/ndb_mgmd -f ./config.ini --reload

滚动重启旧的数据存储节点服务(滚动重启,不能所有节点同时重启,如果同时停止,数据库前端查询就会出现错误)

shell 复制代码
ndb_mgm> [ndb_id] restart 

滚动重启所有的数据查询节点服务:可以将mysqld_safe的启动、关闭写成shell脚本,通过脚本重启mysql服务

脚本

kill_mysqld_safe.sh

shell 复制代码
#!/bin/bash


sp_pid=`ps -ef | grep mysqld_safe | grep -v grep | awk '{print $2}'`
if [ -z "$sp_pid" ]
then
 echo "[ not find mysqld_safe pid ]"
else
 echo "find result: $sp_pid "
 kill -9 $sp_pid
fi

spm_pid=`ps -ef | grep mysqld | grep -v grep | awk '{print $2}'`
if [ -z "$spm_pid" ]
then
 echo "[ not find mysqld pid ]"
else
 echo "find result: $spm_pid"
 kill -9 $spm_pid
fi


rm -f mysql.sock
rm -f mysql.sock.lock
rm -f mysqld.pid

echo "remove mysql.sock,mysqld.pid,mysql.sock.lock"

kill_ndbd.sh

shell 复制代码
#!/bin/bash


sp_pid=`ps -ef | grep ndbd | grep -v grep | awk '{print $2}'`
if [ -z "$sp_pid" ]
then
 echo "[ not find ndbd pid ]"
else
 echo "find result: $sp_pid "
 kill -9 $sp_pid
fi

start_mysqld_safe.sh

shell 复制代码
#!/bin/bash
./bin/mysqld_safe --user=mysql &

start_ndbd.sh

shell 复制代码
#!/bin/bash

./bin/ndbd &
相关推荐
电魂泡哥17 分钟前
SQL出现filesort 一定慢吗
数据库·sql
muddjsv2 小时前
大中小型企业数据层配置规模分析与选型指南
数据库
Runawayliquor2 小时前
opbase:CANN 所有算子的公共地基
大数据·数据库·人工智能·算法
yangshicong3 小时前
第11章:结构化输出与数据提取 —— 让 AI 直接返回你想要的数据格式
数据库·人工智能·redis·python·langchain·ai编程
chimchim663 小时前
pg dblink使用查询
数据库
Java面试题总结3 小时前
java高频面试题(2026最新)
java·开发语言·jvm·数据库·spring·缓存
绝知此事4 小时前
【算法突围 02】树形结构与数据库索引:树形结构与数据库索引:从 BST 到 B+ 树的演化与 MySQL 优化
数据库·mysql·算法·面试·b+树
吴可可1235 小时前
用Teigha修改并保存CAD文件
数据库·算法·c#
yuzhiboyouye6 小时前
内连接,左连接,右连接怎么区别开来?
数据库
铭毅天下6 小时前
Easysearch 版本进化全图——从 ES 国产替代到 AI Native 搜索数据库
大数据·数据库·人工智能·elasticsearch·搜索引擎