MySQL Innodb Cluster搭建与初探
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,-------------------------------------------------------------------------------------------------正文-
千家信息网最后更新 2025年11月07日MySQL Innodb Cluster搭建与初探-------------------------------------------------------------------------------------------------正文---------------------------------------------------------------------------------------------------------------
场景:
有些空余时间了, 想要测试一下Group Replication与MySQL Router~\(≧▽≦)/~
结论:
可用性方面不错;
性能方面其实还不错, 不过写入能力还是老问题, 读多写少的业务可以关注一下Innodb Cluster;
测试环境:
MySQL 8.0.3-rc
MySQL Router 8.0
MySQL shell
sysbench 1.0 (以后再补一篇测试数据......)
虚拟机:
4C24G, 2.00GHz x 5 (MySQL 8.0.3-rc)
4C24G, 2.40GHz x 4 (MySQL 8.0.3-rc)
8C24G, 2.40GHz x 1 (MySQL Router)
搭建过程:
1. 官方源直接安装MySQL相关的所有包, apt-get/yum
2. MySQL的配置, 除了常规配置以外, 推荐加上如下的部分, loose开头的参数表示如果不存在group_replication插件, 则忽略这些配置
PS: 测试中, 全程使用innodb_flush_log_at_trx_commit = 2 和 sync_binlog = 0 的设置, 双1的性能实在是弱......_(:з」∠)_
3. 启动所有的MySQL实例, 并安装插件
4. 在mysql中创建用户temp, 测试图方便, 用ALL on *.*就行, 在官方文档中, 有列出这个用户需要的具体权限, 如下
还有一个需要注意的是: 官方推荐修改/etc/hosts, 实测中, 把localhost指向内网IP, 或者是创建temp@localhost的同权限用户也行, 官方的工具会用到@localhost的登录方式;
PS: with grant option很重要, 因为工具会新建一个mysql_route_xxxx用户, 以及存储meta的新数据库;
4. 在Group Primary的机器上启动MySQL shell, 这个很重要, 因为第3点中提到的: 官方的工具会用到@localhost的登录方式
PS: 推荐用mysqlsh --log-level=DEBUG3来启动mysql shell, 且不要关闭wizard;
5. 进入MySQL shell以后, 可以选择使用javascript还是python, 这里比较习惯python, 就用python的方式, 和js基本没区别;

6. dba.help()命令能看到支持的所有命令, 搭建过程中主要用到的主要有这几个:
check_instance_configuration : 检查实例的参数配置是否符合搭建Group的要求
configure_local_instance : 持久化实例的配置参数到配置文件
create_cluster : 创建innodb cluster
get_cluster : 获取这个实例所属innodb cluster的信息
\connect 用户名@ip:port: 登录到某个实例, 一般为本机
7. 使用dba.check_instance_configuration('temp@192.168.0.100:3306')来检测配置参数, 按照第一步设置之后, 应该是直接返回OK的, 如果还有缺失的话, 就手动补上吧
PS: 这个工具可以自动把参数修改成符合要求的设置, 有兴趣可以研究一下, 这里就不唠叨了ㄟ( ▔, ▔ )ㄏ

8. 接下来就是使用create_cluster来创建innodb cluster了, 这里放上比较常用的一些设置信息
简单说明部分参数:
multiMaster : 如果要创建多主集群, 就需要单独指定这个参数, 否则默认创建单主集群(类似于一主多从的复制架构);
adoptFromGR : 如果已经手动把Group搭建起来了, 需要在这个Group上创建新的innodb cluster, 那就需要显式指定这个参数, 且关闭wizard模式, 关掉wizard模式之后, 需要再额外添加创建集群的用户名和密码作为参数, 推荐开启wizard, 并全程使用MySQL shell搭建innodb cluster;
ipWhitelist : 在测试的时候, 可能是工具没有管理seed这个参数, 所以在创建的时候即便指定了白名单, 也无法向Group里面添加新实例;
PS: 在python模式下, 如果需要添加参数, 就这么写
9. 开启wizard的情况下(本文默认开启), 使用如下命令创建Cluster:
10. 集群创建成功以后, 用add_instance命令把所有的实例都添加到群组就好了, 在官方的宣讲中, 暂时不支持超过9个实例组成一个Group, 实际上, 不超过7个比较好, auto_increament的默认设置是7;
11. 这时候登录数据库, 就会看到多出来一个库, 叫做mysql_innodb_cluster_metadata, 里面有cluster的一些信息, 有兴趣可以看看;
12. 在其他的虚拟机上安装MySQL Router, 然后用bootstrap来自动生成配置;
PS : stop.sh可能会关不掉mysqlrouter, 留意一下, 脚本的问题
13. 读写默认使用6446, 只读使用6447, 这时候就可以随意进行测试了;
14. 如果要创建多主模式, 需要调整两个参数
PPS: MySQLRouter会根据meta的数据来动态调整读写和只读连接, 比如说Primary挂掉了, meta发生了变化, MySQLRouter会在很短的时间内发现并把流量切换到新的Primary;
PPPPPS: 性能测试数据待整理
场景:
有些空余时间了, 想要测试一下Group Replication与MySQL Router~\(≧▽≦)/~
结论:
可用性方面不错;
性能方面其实还不错, 不过写入能力还是老问题, 读多写少的业务可以关注一下Innodb Cluster;
测试环境:
MySQL 8.0.3-rc
MySQL Router 8.0
MySQL shell
sysbench 1.0 (以后再补一篇测试数据......)
虚拟机:
4C24G, 2.00GHz x 5 (MySQL 8.0.3-rc)
4C24G, 2.40GHz x 4 (MySQL 8.0.3-rc)
8C24G, 2.40GHz x 1 (MySQL Router)
搭建过程:
1. 官方源直接安装MySQL相关的所有包, apt-get/yum
2. MySQL的配置, 除了常规配置以外, 推荐加上如下的部分, loose开头的参数表示如果不存在group_replication插件, 则忽略这些配置
点击(此处)折叠或打开
- report_host = 192.168.0.100 ##GR插件会用这个report_host来标记Group中的每个MySQL实例, 确保每个MySQL实例的hostname不一样, 或者这个report_host不一样
- log_bin = /home/mysql/mysql-binlog ##必须开启
- log_slave_updates = ON ##必须开启
- master_info_repository = TABLE ##必须使用Table
- relay_log_info_repository = TABLE ##必须使用Table
- gtid_mode = ON ##必须开启GTID
- enforce_gtid_consistency = ON ##必须开启
- slave_preserve_commit_order = ON ##确保GR_applier按照一致的顺序复现事务
- binlog_checksum = NONE ##必须设置为NONE
- transaction_write_set_extraction=XXHASH64 ##必须设置为XXHASH64
- #group_replication = ON ##开启Group Replication插件, 安装插件之后再开启
- loose-group_replication_start_on_boot=off ##默认关闭, 防止重启后自动创建新的Group
- loose-group_replication_local_address= "192.168.0.100:13306" ##官方工具会默认使用13306端口作为插件的端口, 设置为13306方便测试
- loose-group_replication_group_seeds= "192.168.0.100:13306,192.168.1.100:13306" ##官方工具貌似不会主动管理这个参数, 手动加上
- loose-group_replication_bootstrap_group=off ##默认关闭, 防止自动创建新的Group
- loose-group_replication_ip_whitelist = '192.168.0.0/24,192.168.1.0/24' ##推荐在初始化前手工加上, 控制哪些ip的机器可以加入Group
PS: 测试中, 全程使用innodb_flush_log_at_trx_commit = 2 和 sync_binlog = 0 的设置, 双1的性能实在是弱......_(:з」∠)_
3. 启动所有的MySQL实例, 并安装插件
点击(此处)折叠或打开
- INSTALL PLUGIN group_replication SONAME 'group_replication.so'
4. 在mysql中创建用户temp, 测试图方便, 用ALL on *.*就行, 在官方文档中, 有列出这个用户需要的具体权限, 如下
点击(此处)折叠或打开
- GRANT ALL PRIVILEGES ON mysql_innodb_cluster_metadata.* TO your_user@'%' WITH GRANT OPTION;
- GRANT RELOAD, SHUTDOWN, PROCESS, FILE, SUPER, REPLICATION SLAVE, REPLICATION CLIENT, \
- CREATE USER ON *.* TO your_user@'%' WITH GRANT OPTION;
- GRANT SELECT ON performance_schema.* TO your_user@'%' WITH GRANT OPTION;
- GRANT SELECT ON *.* TO your_user@'%' WITH GRANT OPTION;
- GRANT SELECT, INSERT, UPDATE, DELETE ON mysql.* TO your_user@'%' WITH GRANT OPTION
还有一个需要注意的是: 官方推荐修改/etc/hosts, 实测中, 把localhost指向内网IP, 或者是创建temp@localhost的同权限用户也行, 官方的工具会用到@localhost的登录方式;
PS: with grant option很重要, 因为工具会新建一个mysql_route_xxxx用户, 以及存储meta的新数据库;
4. 在Group Primary的机器上启动MySQL shell, 这个很重要, 因为第3点中提到的: 官方的工具会用到@localhost的登录方式
PS: 推荐用mysqlsh --log-level=DEBUG3来启动mysql shell, 且不要关闭wizard;
5. 进入MySQL shell以后, 可以选择使用javascript还是python, 这里比较习惯python, 就用python的方式, 和js基本没区别;

6. dba.help()命令能看到支持的所有命令, 搭建过程中主要用到的主要有这几个:
check_instance_configuration : 检查实例的参数配置是否符合搭建Group的要求
configure_local_instance : 持久化实例的配置参数到配置文件
create_cluster : 创建innodb cluster
get_cluster : 获取这个实例所属innodb cluster的信息
\connect 用户名@ip:port: 登录到某个实例, 一般为本机
7. 使用dba.check_instance_configuration('temp@192.168.0.100:3306')来检测配置参数, 按照第一步设置之后, 应该是直接返回OK的, 如果还有缺失的话, 就手动补上吧
PS: 这个工具可以自动把参数修改成符合要求的设置, 有兴趣可以研究一下, 这里就不唠叨了ㄟ( ▔, ▔ )ㄏ

8. 接下来就是使用create_cluster来创建innodb cluster了, 这里放上比较常用的一些设置信息
简单说明部分参数:
multiMaster : 如果要创建多主集群, 就需要单独指定这个参数, 否则默认创建单主集群(类似于一主多从的复制架构);
adoptFromGR : 如果已经手动把Group搭建起来了, 需要在这个Group上创建新的innodb cluster, 那就需要显式指定这个参数, 且关闭wizard模式, 关掉wizard模式之后, 需要再额外添加创建集群的用户名和密码作为参数, 推荐开启wizard, 并全程使用MySQL shell搭建innodb cluster;
ipWhitelist : 在测试的时候, 可能是工具没有管理seed这个参数, 所以在创建的时候即便指定了白名单, 也无法向Group里面添加新实例;
PS: 在python模式下, 如果需要添加参数, 就这么写
点击(此处)折叠或打开
- cluster = cluster.create_cluster('temp@192.168.0.100:3306', {'multiMaster':1,'adoptFromGR':1})
9. 开启wizard的情况下(本文默认开启), 使用如下命令创建Cluster:
点击(此处)折叠或打开
- cluster = dba.create_cluster('testCluster')
10. 集群创建成功以后, 用add_instance命令把所有的实例都添加到群组就好了, 在官方的宣讲中, 暂时不支持超过9个实例组成一个Group, 实际上, 不超过7个比较好, auto_increament的默认设置是7;
11. 这时候登录数据库, 就会看到多出来一个库, 叫做mysql_innodb_cluster_metadata, 里面有cluster的一些信息, 有兴趣可以看看;
12. 在其他的虚拟机上安装MySQL Router, 然后用bootstrap来自动生成配置;
点击(此处)折叠或打开
- mysqlrouter --bootstrap temp@192.168.0.100:3306 --directory /home/mysqlrouter/ --user=mysqlrouter
PS : stop.sh可能会关不掉mysqlrouter, 留意一下, 脚本的问题
13. 读写默认使用6446, 只读使用6447, 这时候就可以随意进行测试了;
14. 如果要创建多主模式, 需要调整两个参数
点击(此处)折叠或打开
- group_replication_single_primary_mode = OFF
- group_replication_enforce_update_everywhere_checks = ON
PPS: MySQLRouter会根据meta的数据来动态调整读写和只读连接, 比如说Primary挂掉了, meta发生了变化, MySQLRouter会在很短的时间内发现并把流量切换到新的Primary;
PPPPPS: 性能测试数据待整理
参数
实例
测试
官方
配置
工具
插件
用户
数据
推荐
信息
命令
模式
集群
登录
性能
手动
方式
问题
不错
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发行吗
石家庄蜂之巢网络技术
陕西服务器
服务器配置与管理 刘邦桂
阳泉市网络安全警察
网络安全工作目标
淄博市软件开发招聘信息
交通网络安全小课堂
mc1.8.9服务器
郑州科技学院数据库
数据库更新系统
阿里云服务器恶意脚本执行
app需要服务器吗
适合财务用的软件开发
华强方特招软件开发工程师
巴中软件开发方案
软件开发从哪里开始学
物联网工程与网络安全
软件开发中的组织构架
厦门文信网络技术有限公司
江西网络安全法答题
深圳疯游网络技术有限公司
服务器一年的损耗多少
戴尔t30服务器E3
工业网络技术学是大数据类吗
融式互联网科技
交通的调查数据库设计
查询数据库数据文件位置
电子科技包含互联网科技吗
四川前端软件开发有用吗