当前位置: 首页 > news >正文

NDBmysql-cluster融合脚本

前期大白鼠发布了NDB&mysql-cluster部署脚本,该脚本有部分朋友感觉运行比较麻烦。

详情请见:NDB&mysql-cluster集群部署脚本-CSDN博客

对此,大白鼠重新整理了一下思路,为了方便大家快速部署mysql集群,重新编写了NDB&mysql-cluster融合脚本,该脚本更方便大家使用。

NDB&mysql-cluster融合脚本前期只需要将对应安装包上传到/root/,

安装包:mysql-cluster-gpl-7.6.16-linux-glibc2.12-x86_64.tar.gz   

      站内下载链接:https://download.csdn.net/download/qq_28608175/91554469

另需提前获取五台服务器的IP地址,只要按规划输入服务器名称即可畅快部署mysql集群。

规划示例:

10.10.10.237  mgr
10.10.10.238   mysqla
10.10.10.239   mysqlb
10.10.10.240   data1
10.10.10.241   data2

脚本通过计算机名称判断应该运行那些代码、判断节点角色及自动生成节点ID,减少了人机交互过程。特别提醒:只能按照规划的计算机名称(mgr/mysqla/mysqlb/data1/data2),否则无法使用本脚本。

#!/bin/bash
# function: 一体化部署 MySQL NDB Cluster 节点
# author: tommypeng 20250801# 0. 用户检查
if [ "$USER" != "root" ]; thenecho "错误:非root用户,权限不足!"exit 1
fi# 1. 关闭防火墙与 SELinux
systemctl stop firewalld && systemctl disable firewalld && echo "防火墙已关闭"
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config && setenforce 0 && echo "SELinux 已关闭"# 2. 软件包检查
#####安装依赖
echo "正在安装 libaio 库..."
if [ -x "$(command -v yum)" ]; thenyum install -y libaio
elif [ -x "$(command -v apt)" ]; thenapt update && apt install -y libaio1
elseecho "未识别的包管理器,请手动安装 libaio"exit 1
fi
TARBALL="/root/mysql-cluster-gpl-7.6.16-linux-glibc2.12-x86_64.tar.gz"
if [ ! -f "$TARBALL" ]; thenecho "请将 $TARBALL 上传至 /root/"exit 1
fi# 3. 获取集群IP信息
read -ep "请输入管理节点IP: " mgrIP
read -ep "请输入mysqla节点IP: " mysqlAIP
read -ep "请输入mysqlb节点IP: " mysqlBIP
read -ep "请输入data1节点IP: " data1IP
read -ep "请输入data2节点IP: " data2IP# 4. 获取并设置主机名
read -ep "请输入当前主机名 (mgr/mysqla/mysqlb/data1/data2): " HOSTNAME
hostnamectl set-hostname $HOSTNAME# 5. 写入 hosts
cat >> /etc/hosts <<EOF
$mgrIP   mgr
$mysqlAIP   mysqla
$mysqlBIP   mysqlb
$data1IP   data1
$data2IP   data2
EOF# 6. 自动推导 nodeid
case "$HOSTNAME" inmgr) nodeid=99 ;;mysqla) nodeid=1 ;;mysqlb) nodeid=2 ;;data1) nodeid=3 ;;data2) nodeid=4 ;;*) echo "未知主机名,无法推导 nodeid,退出。" && exit 1 ;;
esac
echo "推导得到的节点ID为: $nodeid"# 7. 创建用户与安装目录
groupadd mysql
useradd -M -s /sbin/nologin -g mysql mysql
mkdir -p /usr/local/mysql && tar -zxf $TARBALL -C /usr/local/mysql --strip-components=1
mkdir -p /usr/local/mysql/data && chown -R mysql:mysql /usr/local/mysql
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld# 8. 写入配置文件(根据节点角色)
mv /etc/my.cnf /etc/my.cnf.bak 2>/dev/nullif [[ $HOSTNAME == mysqla || $HOSTNAME == mysqlb ]]; thencat > /etc/my.cnf <<EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port=3306
user=mysql
character_set_server=utf8mb4
collation_server=utf8mb4_general_ci
explicit_defaults_for_timestamp=true
ndbcluster
ndb-nodeid=$nodeid
default-storage-engine=ndbcluster
ndb-connectstring=$mgrIP:1186
max_connections=1000
max_allowed_packet=128M
query_cache_size=0
innodb_buffer_pool_size=512M[mysql_cluster]
ndb-connectstring=$mgrIP:1186
EOF# 初始化数据库rm -rf /usr/local/mysql/data/*/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data > /root/init.log 2>&1pw=$(grep 'temporary password' /root/init.log | awk -F 'root@localhost: ' '{print $2}')echo "MySQL默认临时密码为:$pw"elif [[ $HOSTNAME == data1 || $HOSTNAME == data2 ]]; thencat > /etc/my.cnf <<EOF
[mysqld]
skip-networking
skip-grant-tables
user=mysql[ndbd]
ndb-nodeid=$nodeid
ndb-connectstring=$mgrIP:1186[mysql_cluster]
ndb-connectstring=$mgrIP:1186
EOF# 启动数据节点/usr/local/mysql/bin/ndbd --initial --ndb-connectstring=$mgrIP:1186 && echo "数据节点初始化成功"elif [[ $HOSTNAME == mgr ]]; thenmkdir -p /var/lib/mysql-clustercat > /var/lib/mysql-cluster/config.ini <<EOF
[NDBD DEFAULT]
NoOfReplicas=2
DataMemory=80M
#IndexMemory=18M[TCP DEFAULT]
#portnumber=1186
SendBufferMemory=2M             
ReceiveBufferMemory=64k         [ndb_mgmd]
hostname=mgr
nodeid=99
datadir=/var/lib/mysql-cluster[ndbd]
hostname=data1
nodeid=3
datadir=/usr/local/mysql/data[ndbd]
hostname=data2
nodeid=4
datadir=/usr/local/mysql/data[mysqld]
hostname=mysqla
nodeid=1[mysqld]
hostname=mysqlb
nodeid=2
EOFecho "启动管理节点..."/usr/local/mysql/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial --configdir=/var/lib/mysql-cluster && echo "管理节点启动成功"
fi# 9. 加入环境变量
echo 'export PATH=\$PATH:/usr/local/mysql/bin' >> /etc/profile
source /etc/profile# 10. 启动 SQL 节点数据库(如适用)
if [[ $HOSTNAME == mysqla || $HOSTNAME == mysqlb ]]; then/etc/init.d/mysqld start && echo "MySQL SQL 节点启动成功"
fi

诸君顺利!

http://www.dtcms.com/a/310095.html

相关文章:

  • (二)LoRA微调BERT:为何在单分类任务中表现优异,而在多分类任务中效果不佳?
  • Spring Boot微服务性能优化实践指南:从配置到监控
  • SpringCloud(一)微服务基础认识
  • 什么是三防平板电脑?三防平板有什么作用?
  • 浏览器【详解】自定义事件 CustomEvent
  • AUTOSAR进阶图解==>AUTOSAR_SRS_FlashTest
  • EasyGBS的两种录像回看
  • ROS主控和stm32小车底盘通过串口进行通讯
  • 信奥骗分导论
  • 镜像快速部署ollama+python+ai
  • 光储知识积累
  • 全渠道融合:智能引擎重塑鞋服业价值链条
  • 88、【OS】【Nuttx】【启动】栈溢出保护:volatile 关键字(修饰内联汇编)
  • 15day-人工智学习-机器学习-介绍和定义
  • 【Linux】Linux下基本指令
  • 【暑期每日一题】洛谷 P9390 金盏花
  • SketchUp扩展工具分享:Ropefall v1.02插件轻松实现绳索模拟
  • 京东云轻量云服务器与腾讯云域名结合配置网站及申请SSL证书流程详解
  • 【Linux】磁盘存储+文件系统简介
  • android嵌套网页遇到的问题总结
  • mac系统自带终端崩溃修复
  • 使用自定义数据集训练 YOLOv12 以检测道路坑洞严重程度
  • 利用 AI 在 iPhone 上实现 App 文本情绪价值评估(上)
  • 基于Matlab的人眼虹膜识别门禁系统
  • 【Git 分支整合的艺术:岔路与归途的抉择 ——merge 与 rebase 深度解析】
  • Java函数式编程之【Stream终止操作】【下】【三】【收集操作collect()与分组分区和下游收集器】
  • 【MySQL】MySQL事务
  • 低空经济展 | 昂际智航携珑驭®系列产品亮相2025深圳eVTOL展
  • 向日葵软件提权
  • 第一篇:Linux 运维入门:虚拟机部署与基础环境配置