NDBmysql-cluster融合脚本 📅 发布时间:2026/9/3 13:39:24 👁 浏览次数: 前期大白鼠发布了NDBmysql-cluster部署脚本该脚本有部分朋友感觉运行比较麻烦。详情请见NDBmysql-cluster集群部署脚本-CSDN博客对此大白鼠重新整理了一下思路为了方便大家快速部署mysql集群重新编写了NDBmysql-cluster融合脚本该脚本更方便大家使用。NDBmysql-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 mgr10.10.10.238 mysqla10.10.10.239 mysqlb10.10.10.240 data110.10.10.241 data2脚本通过计算机名称判断应该运行那些代码、判断节点角色及自动生成节点ID减少了人机交互过程。特别提醒只能按照规划的计算机名称mgr/mysqla/mysqlb/data1/data2否则无法使用本脚本。#!/bin/bash # function: 一体化部署 MySQL NDB Cluster 节点 # author: tommypeng 20250801 # 0. 用户检查 if [ $USER ! root ]; then echo 错误非root用户权限不足 exit 1 fi # 1. 关闭防火墙与 SELinux systemctl stop firewalld systemctl disable firewalld echo 防火墙已关闭 sed -i s/^SELINUX.*/SELINUXdisabled/g /etc/selinux/config setenforce 0 echo SELinux 已关闭 # 2. 软件包检查 #####安装依赖 echo 正在安装 libaio 库... if [ -x $(command -v yum) ]; then yum install -y libaio elif [ -x $(command -v apt) ]; then apt update apt install -y libaio1 else echo 未识别的包管理器请手动安装 libaio exit 1 fi TARBALL/root/mysql-cluster-gpl-7.6.16-linux-glibc2.12-x86_64.tar.gz if [ ! -f $TARBALL ]; then echo 请将 $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 in mgr) nodeid99 ;; mysqla) nodeid1 ;; mysqlb) nodeid2 ;; data1) nodeid3 ;; data2) nodeid4 ;; *) 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-components1 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/null if [[ $HOSTNAME mysqla || $HOSTNAME mysqlb ]]; then cat /etc/my.cnf EOF [mysqld] basedir/usr/local/mysql datadir/usr/local/mysql/data port3306 usermysql character_set_serverutf8mb4 collation_serverutf8mb4_general_ci explicit_defaults_for_timestamptrue ndbcluster ndb-nodeid$nodeid default-storage-enginendbcluster ndb-connectstring$mgrIP:1186 max_connections1000 max_allowed_packet128M query_cache_size0 innodb_buffer_pool_size512M [mysql_cluster] ndb-connectstring$mgrIP:1186 EOF # 初始化数据库 rm -rf /usr/local/mysql/data/* /usr/local/mysql/bin/mysqld --initialize --usermysql --basedir/usr/local/mysql --datadir/usr/local/mysql/data /root/init.log 21 pw$(grep temporary password /root/init.log | awk -F rootlocalhost: {print $2}) echo MySQL默认临时密码为$pw elif [[ $HOSTNAME data1 || $HOSTNAME data2 ]]; then cat /etc/my.cnf EOF [mysqld] skip-networking skip-grant-tables usermysql [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 ]]; then mkdir -p /var/lib/mysql-cluster cat /var/lib/mysql-cluster/config.ini EOF [NDBD DEFAULT] NoOfReplicas2 DataMemory80M #IndexMemory18M [TCP DEFAULT] #portnumber1186 SendBufferMemory2M ReceiveBufferMemory64k [ndb_mgmd] hostnamemgr nodeid99 datadir/var/lib/mysql-cluster [ndbd] hostnamedata1 nodeid3 datadir/usr/local/mysql/data [ndbd] hostnamedata2 nodeid4 datadir/usr/local/mysql/data [mysqld] hostnamemysqla nodeid1 [mysqld] hostnamemysqlb nodeid2 EOF echo 启动管理节点... /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诸君顺利