搭建 MySQL 高可用集群

适用场景

需要 MySQL 自动故障切换、读写分离和多数派确认。常见方案是 MySQL InnoDB Cluster(Group Replication + MySQL Router),适合三节点或五节点的小型高可用集群。

前置条件

步骤

  1. 在三台节点安装 MySQL,并配置唯一 server_id 和 GTID:
cat > /etc/mysql/conf.d/gr.cnf <<'EOF'
[mysqld]
server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_checksum=NONE
log_bin=mysql-bin
relay_log=mysql-relay-bin
binlog_row_image=FULL
EOF

三台节点的 server_id 分别设为 1、2、3,然后重启 MySQL。

  1. 在主节点创建复制用户和集群管理用户:
mysql -uroot -p <<'SQL'
CREATE USER 'repl'@'%' IDENTIFIED BY '***';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
CREATE USER 'clusteradmin'@'%' IDENTIFIED BY '***';
GRANT ALL PRIVILEGES ON *.* TO 'clusteradmin'@'%' WITH GRANT OPTION;
SQL
  1. 使用 MySQL Shell 创建 InnoDB Cluster:
mysqlsh --uri root@node1:3306
dba.checkInstanceConfiguration('root@node1:3306')
dba.configureInstance('root@node1:3306')
dba.configureInstance('root@node2:3306')
dba.configureInstance('root@node3:3306')
var cluster = dba.createCluster('prod')
cluster.addInstance('root@node2:3306')
cluster.addInstance('root@node3:3306')
cluster.status()
  1. 部署 MySQL Router:
mysqlrouter --bootstrap clusteradmin@node1:3306 \
  --directory /etc/mysqlrouter --user=mysqlrouter
systemctl enable --now mysqlrouter
  1. 应用通过 Router 的读写端口(默认 6446)和只读端口(6447)连接。

  2. 配置备份和监控。备份使用 mysqlsh 的 dump 或 XtraBackup,监控关注 group_replication 成员状态和延迟。

验证

回滚

常见坑

相关命令