当前位置:首页 > 系统教程 > 正文

Linux运维总结:基于Ubuntu 22.04 x86_64架构CPU二进制部署MySQL InnoDB Cluster单写模式集群

Linux运维总结:基于Ubuntu 22.04 x86_64架构CPU二进制部署MySQL InnoDB Cluster单写模式集群 MySQL Cluster  Ubuntu 22.04部署 读写分离 单写模式 第1张

本文是一篇完整的MySQL InnoDB Cluster部署实战教程,基于Ubuntu 22.04部署环境,采用x86_64架构CPU的二进制包进行安装。我们将实现单写模式下的集群,并通过MySQL Router实现读写分离。即使你是运维新手,只要按照步骤操作,也能成功搭建一套生产可用的MySQL高可用方案。

1. 环境准备

准备三台Ubuntu 22.04服务器(或虚拟机),IP假设为192.168.1.10, 192.168.1.11, 192.168.1.12。确保CPU架构为x86_64,并关闭防火墙或开放相应端口(3306, 33060, 6446, 6447等)。

    # 关闭防火墙(测试环境)sudo ufw disable# 或开放端口(生产环境)sudo ufw allow 3306/tcpsudo ufw allow 33060/tcpsudo ufw allow 6446/tcpsudo ufw allow 6447/tcp  

配置主机名解析(可选,建议在/etc/hosts中写入):

    192.168.1.10 mysql-1192.168.1.11 mysql-2192.168.1.12 mysql-3  

2. 下载MySQL二进制包

从MySQL官网下载适用于Linux x86_64的二进制包(选择glibc2.17版本)。以8.0.32为例:

    wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.32-linux-glibc2.17-x86_64.tar.xz  

同时在所有节点下载MySQL Shell和MySQL Router(也可后续单独下载)。

3. 解压与安装

创建mysql用户和组,解压二进制包到/usr/local/mysql:

    sudo groupadd mysqlsudo useradd -r -g mysql -s /bin/false mysqlsudo tar -xvf mysql-8.0.32-linux-glibc2.17-x86_64.tar.xz -C /usr/local/sudo ln -s /usr/local/mysql-8.0.32-linux-glibc2.17-x86_64 /usr/local/mysqlcd /usr/local/mysqlsudo mkdir mysql-filessudo chown mysql:mysql mysql-filessudo chmod 750 mysql-files  

将MySQL bin目录加入PATH(编辑~/.bashrc或全局profile):

    export PATH=/usr/local/mysql/bin:$PATH  

4. 初始化MySQL实例

在三台节点上分别执行初始化,生成临时密码。

    sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data  

注意记录输出的临时root密码。

5. 配置my.cnf

编辑/etc/my.cnf(或/etc/mysql/my.cnf),以下为基础配置,注意server_id需唯一:

    [mysqld]server_id=1   # 节点2改为2,节点3改为3gtid_mode=ONenforce_gtid_consistency=ONlog_bin=mysql-binbinlog_format=ROWrelay_log=relay-loginnodb_dedicated_server=ONdisabled_storage_engines=MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORYreport_host=mysql-1   # 对应节点主机名mysqlx_port=33060[client]port=3306socket=/tmp/mysql.sock  

确保数据目录权限正确。

6. 启动MySQL服务

使用mysqld_safe启动:

    sudo /usr/local/mysql/bin/mysqld_safe --user=mysql &  

或配置systemd服务(略)。登录并修改root密码:

    mysql -uroot -p"临时密码"ALTER USER "root"@"localhost" IDENTIFIED BY "新密码";  

7. 安装MySQL Shell

下载并安装MySQL Shell(二进制包同样解压即可)。添加bin到PATH。

    wget https://dev.mysql.com/get/Downloads/MySQL-Shell/mysql-shell-8.0.32-linux-glibc2.17-x86-64bit.tar.gztar -xzf mysql-shell-8.0.32-linux-glibc2.17-x86-64bit.tar.gz -C /usr/local/export PATH=/usr/local/mysql-shell-8.0.32-linux-glibc2.17-x86-64bit/bin:$PATH  

8. 创建InnoDB Cluster

在任意节点(如mysql-1)使用MySQL Shell连接实例,并创建集群。

    mysqlsh --uri root@mysql-1:3306\sqlALTER USER root@"%" IDENTIFIED BY "新密码";   # 允许远程连接\jsvar cluster = dba.createCluster("myCluster", {adoptFromGR: false, multiMaster: false, force: true});cluster.addInstance("root@mysql-2:3306");   # 输入密码cluster.addInstance("root@mysql-3:3306");  

这里通过单写模式(multiMaster: false)创建集群,即只有主节点可写,其余为只读从节点。

9. 配置读写分离

使用MySQL Router实现应用层的读写分离。在应用服务器或单独节点安装Router。

    wget https://dev.mysql.com/get/Downloads/MySQL-Router/mysql-router-8.0.32-linux-glibc2.17-x86_64.tar.xztar -xJf mysql-router-8.0.32-linux-glibc2.17-x86_64.tar.xz -C /usr/local/  

引导配置Router连接到集群:

    sudo /usr/local/mysql-router-8.0.32-linux-glibc2.17-x86_64/bin/mysqlrouter --bootstrap root@mysql-1:3306 --user=mysql  

根据提示设置读写端口(默认6446写,6447读)。启动Router:

    sudo /usr/local/mysql-router-8.0.32-linux-glibc2.17-x86_64/bin/mysqlrouter -c /usr/local/mysql-router-8.0.32-linux-glibc2.17-x86_64/mysqlrouter.conf &  

10. 测试集群与读写分离

通过Router端口连接,验证读写流量是否正确分发。

    mysql -h 127.0.0.1 -P 6446 -u root -p   # 写端口,应连接至主节点mysql -h 127.0.0.1 -P 6447 -u root -p   # 读端口,可能连接任一从节点  

执行SELECT @@server_id;验证。同时测试在主库写入数据,从库能否同步。

总结

至此,我们成功在Ubuntu 22.04上使用二进制包部署了MySQL InnoDB Cluster,并实现了单写模式读写分离。整个过程不依赖包管理器,适用于离线环境。建议生产环境开启防火墙并配置SSL加密,确保数据安全。

—— 运维总结,愿对你有所帮助。