Linux环境下InnoDB Cluster设置
- 首先检查MySQL服务状态 bash
检查MySQL服务是否运行
systemctl status mysqld
或者
systemctl status mysql
如果未运行,启动MySQL
sudo systemctl start mysqld sudo systemctl enable mysqld 2. 使用MySQL Shell创建InnoDB Cluster bash
进入MySQL Shell
mysqlsh
在MySQL Shell中执行以下命令:
javascript // 切换到JavaScript模式 \js -- 切换到 SQL 模式 \sql // 连接到第一个MySQL实例(使用您的实际IP) shell.connect('root@152.136.38.187:3306') // 输入root密码
// 检查实例是否适合创建集群 dba.checkInstanceConfiguration('root@152.136.38.187:3306')
// 如果检查有问题,修复配置 dba.configureInstance('root@152.136.38.187:3306')
// 创建InnoDB Cluster var cluster = dba.createCluster('productionCluster')
// 查看集群状态 cluster.status()
// 添加第二个实例 cluster.addInstance('root@111.231.105.93:3306')
// 再次查看集群状态确认 cluster.status() 3. 退出MySQL Shell并重新引导MySQL Router bash
退出MySQL Shell
\exit
使用新创建的集群引导MySQL Router
sudo mysqlrouter --bootstrap root@152.136.38.187:3306 --user=mysqlrouter --directory /etc/mysql-route
如果引导成功,启动Router服务
sudo systemctl daemon-reload sudo systemctl start mysqlrouter sudo systemctl status mysqlrouter 🔧 故障排除命令 如果遇到问题,使用这些命令排查:
检查基础环境 bash
检查MySQL版本
mysql --version
检查MySQL Shell版本
mysqlsh --version
检查防火墙状态
sudo systemctl status firewalld
或者
sudo ufw status
如果需要,开放端口
sudo firewall-cmd --add-port=3306/tcp --permanent sudo firewall-cmd --add-port=33061/tcp --permanent # Group Replication端口 sudo firewall-cmd --add-port=6446/tcp --permanent # Router读写端口 sudo firewall-cmd --add-port=6447/tcp --permanent # Router只读端口 sudo firewall-cmd --reload 检查MySQL配置 bash
检查MySQL的group_replication配置
mysql -h 152.136.38.187 -u root -p -e "SHOW VARIABLES LIKE 'server_id';" mysql -h 152.136.38.187 -u root -p -e "SHOW VARIABLES LIKE 'gtid_mode';" mysql -h 152.136.38.187 -u root -p -e "SHOW VARIABLES LIKE 'binlog_format';" 📋 分步详细操作 步骤1:准备MySQL实例 bash
连接到第一个MySQL实例进行配置
mysql -h 152.136.38.187 -u root -p 在MySQL中执行:
sql -- 确保配置正确 SET GLOBAL server_id=1; SET PERSIST binlog_format=ROW; SET PERSIST gtid_mode=ON; SET PERSIST enforce_gtid_consistency=ON; SET PERSIST transaction_write_set_extraction=XXHASH64;
-- 创建用于集群管理的用户(可选但推荐) CREATE USER 'clusteradmin'@'%' IDENTIFIED BY 'secure_password'; GRANT ALL PRIVILEGES ON . TO 'clusteradmin'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;
EXIT; 步骤2:创建集群的简化方法 如果上面的方法复杂,可以使用这个简化版本:
bash
使用一行命令创建集群
mysqlsh --uri root@152.136.38.187:3306 -e "dba.createCluster('myCluster')"
然后添加第二个实例
mysqlsh --uri root@152.136.38.187:3306 -e "dba.getCluster().addInstance('root@111.231.105.93:3306')" 步骤3:验证集群 bash
检查集群状态
mysqlsh --uri root@152.136.38.187:3306 -e "dba.getCluster().status()" 🚀 快速启动脚本 创建一个自动化脚本:
bash #!/bin/bash
save as setup_cluster.sh
echo "开始设置InnoDB Cluster..."
连接到第一个实例创建集群
mysqlsh --uri root@152.136.38.187:3306 --js << EOF print("正在创建集群..."); var cluster = dba.createCluster('productionCluster'); print("集群创建成功");
print("添加第二个实例..."); cluster.addInstance('root@111.231.105.93:3306'); print("实例添加成功");
print("集群状态:"); cluster.status(); EOF
echo "集群设置完成!" 给脚本执行权限并运行:
bash chmod +x setup_cluster.sh ./setup_cluster.sh ❗ 如果仍然遇到问题 如果还是出现元数据错误,请运行以下诊断命令并告诉我输出:
bash
检查mysql_innodb_cluster_metadata数据库是否存在
mysql -h 152.136.38.187 -u root -p -e "SHOW DATABASES LIKE '%cluster%';"
检查MySQL错误日志
sudo tail -f /var/log/mysqld.log
或者
sudo tail -f /var/log/mysql/error.log 请按照这些步骤操作,如果遇到任何错误,把具体的错误信息发给我,我会帮您进一步解决。
