绝大多数ARM64服务器(如鲲鹏、飞腾)无需编译安装,MySQL官方自8.0.27起已提供aarch64预编译包,优先使用二进制安装;仅当系统极度精简、缺失glibc≥2.28、无对应发行版rpm包或需定制引擎时才考虑源码编译。

确认是否真有必要编译安装
绝大多数 ARM64 服务器(如鲲鹏、飞腾、苹果 M 系列)上,mysql 官方已提供预编译的 aarch64 二进制包,优先用它——编译安装是兜底方案,不是默认推荐路径。只有当遇到以下任一情况时才考虑源码编译:
- 系统发行版极度精简(如某些国产定制 OS),连
glibc ≥ 2.28都不满足,且无法升级 - 官方未发布对应你系统版本(如 el7 / el8 / rocky9)的
.rpm-bundle.tar包 - 需要启用特殊存储引擎(如
rocksdb)、打定制补丁或强制关闭某些安全特性
盲目编译会显著拉长部署周期,且容易因 cmake 版本、Boost 头文件路径、openssl ABI 兼容性等问题卡在中间步骤。
必须提前装齐的依赖和工具链
ARM 平台编译 MySQL 8.0 的失败,90% 出现在依赖环节。别跳过这步,尤其注意版本硬约束:
-
gcc必须 ≥ 5.3(推荐 7.3+ 或 11+),g++同版本;旧版 gcc 编译出的mysqld可能运行时报Illegal instruction -
cmake必须 ≥ 3.14(MySQL 8.0.17+ 要求),低于此值会报CMake Error: The source directory does not appear to contain CMakeLists.txt -
openssl-devel(非openssl)必须 ≥ 1.1.1(8.0.28+ 强制要求 OpenSSL 3.0,否则链接失败) -
ncurses-devel、bison、flex、libaio-devel、zlib-devel缺一不可 - 若用系统自带 Boost,需确认版本 ≥ 1.69;更稳妥是下载
mysql-boost-8.x.x.tar.gz并指定-DWITH_BOOST=路径
在麒麟 V10、统信 UOS 上,建议直接 yum install -y gcc-c++ cmake make bison flex ncurses-devel openssl-devel libaio-devel zlib-devel,再手动升级 cmake 和 gcc。
cmake 配置的关键参数与常见陷阱
ARM 下编译 MySQL,cmake 命令里几个参数决定成败,不能照抄 x86 教程:
-
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql:安装路径,避免写成/usr或/opt/mysql,否则后续systemd单元文件可能找不到二进制 -
-DMYSQL_DATADIR=/data/mysql:务必设为独立磁盘路径,别用默认/usr/local/mysql/data,否则初始化失败后清理麻烦 -
-DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_0900_ai_ci:显式指定,避免编译后字符集异常 -
-DWITH_SSL=system:强制使用系统 OpenSSL,禁用内置;若用openssl3,需确保pkg-config --modversion openssl输出 ≥ 3.0 -
-DWITH_SYSTEMD=ON:开启 systemd 支持,否则无法用systemctl start mysqld - 删掉
-DENABLED_LOCAL_INFILE=1等非必要开关,减少 ABI 冲突面
执行前先清空构建目录:rm -rf build && mkdir build && cd build;然后运行 cmake .. -DCMAKE_INSTALL_PREFIX=...(其余参数)。若报错 Could NOT find OpenSSL,检查 pkg-config --libs openssl 是否有输出,没有就重装 openssl-devel。
初始化与启动时最易忽略的权限和配置
编译安装完成后,make && make install 只是第一步。真正让 mysqld 跑起来,下面三件事漏掉一个就起不来:
- 创建
mysql用户并赋予数据目录属主:useradd -r -s /bin/false mysql && chown -R mysql:mysql /data/mysql - 初始化数据库必须用
mysql用户执行:/usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/data/mysql;若用 root 执行,生成的ibdata1文件属主错误,启动时报Permission denied - systemd 服务文件要重写:
/usr/lib/systemd/system/mysqld.service通常不存在,需手动创建,关键字段包括:ExecStart=/usr/local/mysql/bin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --user=mysql,且RuntimeDirectory=mysqld和StateDirectory=mysql要配对
最后检查:systemctl daemon-reload && systemctl enable mysqld && systemctl start mysqld。如果 journalctl -u mysqld -n 50 显示 Failed to start mysqld.service: Unit not found,说明 systemd 文件路径或名称不对;显示 Can't open the mysql.plugin table,大概率是初始化没用 --user=mysql。


















