关键词:本文围绕 MySQL InnoDB Cluster、二进制部署、读写分离 和 SSL/TLS 四大核心,基于 Ubuntu 22.04 LTS 与 x86_64 架构 CPU,提供一份保姆级操作指南。无论你是数据库新手还是运维老手,都能按照本文步骤成功搭建一套生产可用的高可用、加密传输的 MySQL 集群。
准备三台 Ubuntu 22.04 服务器(x86_64 架构),分别命名为 mysql-1、mysql-2、mysql-3,并确保内网互通。关闭防火墙或开放对应端口(MySQL 3306、MySQL Shell 33060、MySQL Router 6446/6447 等),同时配置 hosts 解析以便主机名互相识别。
# 每台机器执行sudo hostnamectl set-hostname mysql-X # X 为 1/2/3sudo vim /etc/hosts192.168.1.10 mysql-1192.168.1.11 mysql-2192.168.1.12 mysql-3sudo ufw disablesudo ufw allow 3306/tcpsudo ufw allow 33060/tcpsudo ufw allow 6446/tcpsudo ufw allow 6447/tcp 从 MySQL 官网下载适用于 Linux x86_64 的 二进制部署 包(此处以 MySQL 8.0.33 为例)。
# 下载并解压到 /usr/localwget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.33-linux-glibc2.28-x86_64.tar.gzsudo tar -zxvf mysql-8.0.33-linux-glibc2.28-x86_64.tar.gz -C /usr/localsudo ln -s /usr/local/mysql-8.0.33-linux-glibc2.28-x86_64 /usr/local/mysqlsudo apt updatesudo apt install -y libaio1 libnuma1 libmecab2sudo groupadd mysqlsudo useradd -r -g mysql -s /bin/false mysqlsudo mkdir -p /var/lib/mysql /var/log/mysqlsudo chown -R mysql:mysql /usr/local/mysql /var/lib/mysql /var/log/mysql 编辑 MySQL 配置文件 /etc/my.cnf,内容如下(注意 server-id 每台不同):
[mysqld]basedir=/usr/local/mysqldatadir=/var/lib/mysqlsocket=/tmp/mysql.sockport=3306log-error=/var/log/mysql/error.logpid-file=/var/run/mysqld/mysqld.pidserver-id=1 # 第二台改为2,第三台改为3gtid_mode=ONenforce_gtid_consistency=ONlog_bin=mysql-binbinlog_format=ROWrelay_log=relay-binrelay_log_recovery=ONinnodb_file_per_table=ONdefault_authentication_plugin=mysql_native_password 初始化数据库:
sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/var/lib/mysqlsudo /usr/local/mysql/bin/mysqld_safe --user=mysql &/usr/local/mysql/bin/mysql -uroot -pALTER USER "root"@"localhost" IDENTIFIED BY "YourNewPass123!";CREATE USER "root"@"%" IDENTIFIED BY "YourNewPass123!";GRANT ALL PRIVILEGES ON . TO "root"@"%" WITH GRANT OPTION;FLUSH PRIVILEGES; 下载 MySQL Shell 二进制包并解压:
wget https://dev.mysql.com/get/Downloads/MySQL-Shell/mysql-shell-8.0.33-linux-glibc2.28-x86_64.tar.gzsudo tar -zxvf mysql-shell-8.0.33-linux-glibc2.28-x86_64.tar.gz -C /usr/localsudo ln -s /usr/local/mysql-shell-8.0.33-linux-glibc2.28-x86_64 /usr/local/mysql-shellexport PATH=$PATH:/usr/local/mysql/bin:/usr/local/mysql-shell/bin\connect root@mysql-1:3306var cluster = dba.createCluster("myCluster")cluster.addInstance("root@mysql-2:3306")cluster.addInstance("root@mysql-3:3306")cluster.status() 此时已经成功构建了 MySQL InnoDB Cluster 单写模式集群(默认 Single-Primary)。
MySQL Router 是官方中间件,能够自动感知集群角色并实现 读写分离。在应用服务器或专用节点上安装 Router:
wget https://dev.mysql.com/get/Downloads/MySQL-Router/mysql-router-8.0.33-linux-glibc2.28-x86_64.tar.gzsudo tar -zxvf mysql-router-8.0.33-linux-glibc2.28-x86_64.tar.gz -C /usr/localsudo ln -s /usr/local/mysql-router-8.0.33-linux-glibc2.28-x86_64 /usr/local/mysql-routersudo mkdir -p /etc/mysqlroutersudo chown -R $USER:$USER /etc/mysqlroutermysqlsh --uri root@mysql-1:3306 -- dba configureMySQLRouter --router=system --master-key-reader=keyreader --master-key-writer=keywriter --config=/etc/mysqlrouter/mysqlrouter.conf 或者手动编辑 /etc/mysqlrouter/mysqlrouter.conf,示例如下:
[DEFAULT]logging_folder=/var/log/mysqlrouterplugin_folder=/usr/local/mysql-router/lib/mysqlrouterruntime_folder=/var/run/mysqlrouterconfig_folder=/etc/mysqlrouter[logger]level = INFO[routing:primary]bind_address=0.0.0.0:6446destinations=mysql-1:3306,mysql-2:3306,mysql-3:3306routing_strategy=first-availableprotocol=classic[routing:secondary]bind_address=0.0.0.0:6447destinations=mysql-1:3306,mysql-2:3306,mysql-3:3306routing_strategy=round-robinprotocol=classic 启动 Router:
sudo /usr/local/mysql-router/bin/mysqlrouter -c /etc/mysqlrouter/mysqlrouter.conf &netstat -tlnp | grep 6446 应用可通过 6446 端口(自动转发到主节点写操作)和 6447 端口(轮询到各节点读操作)实现透明的读写分离。
为确保数据安全,配置 SSL/TLS 加密。首先为 MySQL 集群创建 CA 和证书:
# 在任意一台机器上创建证书目录sudo mkdir /etc/mysql-sslcd /etc/mysql-sslsudo openssl genrsa 2048 > ca-key.pemsudo openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca.pem -subj "/CN=MySQL-CA"sudo openssl req -newkey rsa:2048 -days 3600 -nodes -keyout server-key.pem -out server-req.pem -subj "/CN=mysql-1"sudo openssl rsa -in server-key.pem -out server-key.pemsudo openssl x509 -req -in server-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pemsudo openssl req -newkey rsa:2048 -days 3600 -nodes -keyout client-key.pem -out client-req.pem -subj "/CN=client"sudo openssl rsa -in client-key.pem -out client-key.pemsudo openssl x509 -req -in client-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 02 -out client-cert.pemsudo chown -R mysql:mysql /etc/mysql-sslsudo chmod 600 /etc/mysql-ssl/*.pem 修改各节点的 /etc/my.cnf,添加 SSL 配置:
[mysqld]ssl_ca=/etc/mysql-ssl/ca.pemssl_cert=/etc/mysql-ssl/server-cert.pemssl_key=/etc/mysql-ssl/server-key.pem[client]ssl-ca=/etc/mysql-ssl/ca.pemssl-cert=/etc/mysql-ssl/client-cert.pemssl-key=/etc/mysql-ssl/client-key.pem 重启 MySQL 使配置生效:
sudo pkill mysqldsudo /usr/local/mysql/bin/mysqld_safe --user=mysql & 验证 SSL 是否启用:
mysql -uroot -p -e "SHOW VARIABLES LIKE "%ssl%";" Router 连接也需要使用 SSL,可在 Router 配置文件的 [DEFAULT] 或 routing 段添加 connect_ssl_mode=REQUIRED 以及证书路径。
使用 MySQL 客户端通过 Router 连接,测试写入和读取:
# 通过 6446 端口写入(应转发到主节点)mysql -h 127.0.0.1 -P 6446 -u root -p -e "CREATE DATABASE test; USE test; CREATE TABLE t1 (id INT); INSERT INTO t1 VALUES (1);"mysql -h 127.0.0.1 -P 6447 -u root -p -e "SELECT * FROM test.t1;" 同时检查集群状态和 SSL 连接信息:
mysqlsh --uri root@mysql-1:3306 -- cluster status 至此,一个基于 Ubuntu 22.04 x86_64 架构、通过 二进制部署 方式搭建的 MySQL InnoDB Cluster 单写模式集群,已实现 读写分离 和 SSL/TLS 加密,可投入生产使用。
🔐 安全提示:生产环境中请使用正规 CA 签发的证书,并定期更换密钥。同时建议开启 MySQL 的审计日志、访问控制等安全功能。
本文由主机测评网于2026-02-27发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20260227511.html