绝大多数arm64服务器应优先使用官方aarch64二进制包或rpm安装,仅当系统缺失glibc≥2.28、无对应发行版包或需定制引擎时才考虑源码编译。

确认是否真需要自己部署 MySQL 8.0
ARM 平台部署 MySQL 的最大误区,是把“能编译”当成“该编译”。MySQL 自 8.0.27 起已提供完整 aarch64 预编译包,覆盖主流发行版(el7/el8/el9/rocky9/alma9/ubuntu22.04+)。盲目源码编译会卡在:cmake 版本不兼容、Boost 头文件路径错、openssl ABI 冲突、glibc 符号缺失等环节,且生成的 mysqld 在旧内核上可能报 Illegal instruction。
只有满足以下任一条件才建议源码编译:
- 系统是极度精简的国产 OS(如某些定制麒麟 V10),连
glibc ≥ 2.28都不满足,且无法升级 - 你的发行版(如 openEuler 20.03 LTS)没有对应的
mysql-community-server-8.x.x-1.<em>.aarch64.rpm</em>包 - 必须启用
rocksdb引擎、打安全补丁、或禁用data-at-rest encryption等硬性定制需求
用 RPM 安装(推荐给 CentOS/Rocky/Alma/Oracle Linux)
RPM 是 ARM64 上最稳定、最省心的安装方式,但顺序和依赖不能错。以 mysql-8.0.35-1.el9.aarch64.rpm-bundle.tar 为例:
- 先卸载冲突项:
rpm -e --nodeps mariadb-libs(否则mysql-community-libs安装失败) - 解压后按依赖顺序安装(顺序错会导致
Failed dependencies):mysql-community-common→mysql-community-client-plugins→mysql-community-libs→mysql-community-client→mysql-community-icu-data-files→mysql-community-server - 初始化前确保用户存在:
useradd -r -s /bin/false mysql,否则mysqld --initialize --user=mysql报错unknown user - 若提示
perl-JSON缺失,补装:yum install -y perl-JSON perl-Module-Install.noarch
初始化命令必须带 --user=mysql,且首次启动前检查 /var/lib/mysql 权限是否为 mysql:mysql,否则服务起不来。
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
用二进制包部署(推荐给 Ubuntu/Debian 或自定义路径需求)
下载 mysql-8.0.35-linux-glibc2.28-aarch64.tar.xz(注意后缀含 glibc2.28,匹配 el8+/ubuntu20.04+),解压后关键动作如下:
- 创建标准化目录:
mkdir -p /mydata/{data,binlog,log},避免用默认/var/lib/mysql(权限混乱、备份难隔离) - 配置
/etc/my.cnf显式指定路径:datadir = /mydata/datalog-error = /mydata/log/error.logslow_query_log_file = /mydata/log/slow.logbinlog_dir = /mydata/binlog - 初始化时用绝对路径:
/mydata/soft/mysql/bin/mysqld --initialize --user=mysql --datadir=/mydata/data - 务必设置
lower_case_table_names=1(ARM Linux 默认区分大小写,但多数应用假定不区分)
性能关键参数建议同步调整:innodb_buffer_pool_size 设为物理内存的 70%,innodb_io_capacity 设为 SSD 实测 IOPS 的 70%(如 NVMe 可设 5000),innodb_flush_neighbors=0(SSD 必关)。
Docker 部署(适合快速验证或容器化环境)
ARM64 下 docker pull mysql:8.0 自动拉取 aarch64 镜像(Docker 20.10+ 支持多架构 manifest),但要注意:
- 不要用
arm64v8/mysql:8.0—— 该镜像已归档,不再更新,且缺少mysql-shell等工具 - 挂载卷必须用绝对路径,且宿主机目录提前
chown -R 999:999 /mydata/mysql-data(MySQL 容器内默认用户 uid=999) - 字符集必须显式传参,否则容器内仍是
latin1:docker run -d --name mysql8 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_COLLATION_SERVER=utf8mb4_unicode_ci -e MYSQL_CHARACTER_SET_SERVER=utf8mb4 -v /mydata/mysql-data:/var/lib/mysql -p 3306:3306 mysql:8.0 - 若需开启 Binlog 做主从或 CDC,加参数:
-e MYSQL_LOG_BIN=1 -e MYSQL_BINLOG_FORMAT=ROW
真正容易被忽略的是:容器内 mysqld 启动后,wait_timeout 和 max_connections 仍沿用镜像默认值(8h 和 151),生产环境必须通过 my.cnf 挂载或 command 覆盖。










