导读:本期聚焦于小伙伴创作的《MySQL如何在ARM架构服务器上编译安装并适配华为鲲鹏与飞腾处理器》,敬请观看详情。把MySQL从x86迁移到ARM平台时,直接拿官方二进制包往往启动报错或性能打折。华为鲲鹏与飞腾虽同属ARMv8指令集,但微架构差异让编译参数不能一刀切。本文从源码获取、依赖准备、CMake交叉配置到针对鲲鹏的NUMA优化和飞腾的指令集开关,梳理出一整套本地编译流程。实测在 Kunpeng 920 与 FT-2000+ 上,自编译版本比通用包 QPS 提升约百分之十八。只要选对 -march 和链接库,就能让数据库稳稳跑在国产芯片上。

在国产信创替代背景下,将MySQL部署到基于ARM架构的服务器已成为不少企业的刚需。华为鲲鹏与飞腾处理器虽然都兼容ARMv8-A指令集,但内部流水线、缓存层级和内存控制器设计并不相同,使用通用二进制或错误编译参数会导致原子操作性能下降、CRC32指令未加速等问题。因此,从源码出发针对具体CPU型号做编译安装,是兼顾稳定性与吞吐量的根本办法。

MySQL如何在ARM架构服务器上编译安装并适配华为鲲鹏与飞腾处理器

一、准备工作与源码获取

在开始编译前,需要先确认系统环境。华为鲲鹏服务器通常运行 openEuler 或 CentOS ARM 版,飞腾平台多为银河麒麟或统信UOS的ARM架构发行版。建议使用干净的最小化安装系统,避免不同版本开发库冲突。通过以下命令可以确认CPU具体型号:

lscpu | grep -E "Architecture|Model name|Vendor ID"
# 鲲鹏一般显示 Architecture: aarch64, Vendor ID: HiSilicon
# 飞腾显示 Vendor ID: Phytium

MySQL官方源码托管在GitHub与官网,推荐获取带有boost依赖的免单独下载版本,例如 mysql-8.0.36.tar.gz。下载后解压,并安装编译所需工具链。不同发行版的包名略有差异,但核心依赖一致:

  • gcc、g++(版本建议10以上,鲲鹏和飞腾对较新编译器优化更好)
  • cmake(构建系统,必须3.20+)
  • openssl-devel、ncurses-devel、libtirpc-devel
  • boost(若源码包未内含,需单独指定路径)

以openEuler为例,可使用如下指令一键安装:

yum install -y gcc-c++ cmake openssl-devel ncurses-devel 
  libtirpc-devel rpcgen bison git

依赖齐备后进入源码目录,此时不要急于执行cmake,应先规划安装路径与数据目录。通常将程序装在 /usr/local/mysql,数据放在 /data/mysql,并提前创建不可登录的运行用户 mysql,这能降低后续权限配置复杂度。

二、CMake参数针对ARM的适配要点

MySQL的构建系统通过CMake生成Makefile,其中编译标志直接决定生成的机器码能否发挥ARM处理器特性。对于鲲鹏920,其支持ARMv8.2中的LSE原子指令与CRC32,应显式指定 -march=armv8.2-a+lse+crc;飞腾FT-2000+ 虽也兼容ARMv8.1,但LSE支持度不如鲲鹏完善,保守使用 -march=armv8-a 可减少非法指令风险。

# 鲲鹏920示例配置
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql 
  -DMYSQL_DATADIR=/data/mysql 
  -DWITH_BOOST=./boost 
  -DCMAKE_C_FLAGS="-O2 -march=armv8.2-a+lse+crc" 
  -DCMAKE_CXX_FLAGS="-O2 -march=armv8.2-a+lse+crc" 
  -DWITH_SSL=system 
  -DENABLED_LOCAL_INFILE=1 
  -DWITH_INNOBASE_STORAGE_ENGINE=1

上述参数中,WITH_SSL=system 让MySQL复用系统OpenSSL,避免自带库在国产系统上证书路径异常。ENABLED_LOCAL_INFILE 视业务需要开启,若前端应用有批量导入需求则保留。存储引擎只编译InnoDB可缩短构建时间,但也意味着无法使用MyISAM等老引擎,需评估兼容性。

飞腾平台由于内存延迟略高,可在C_FLAGS中追加 -mtune=ft2000plus 提示编译器针对该微架构调度,但注意不要和 -march 冲突。此外,飞腾某些固件下NUMA节点信息有误,编译阶段虽无影响,运行阶段建议用 numactl --interleave=all 启动,防止跨节点访问拖慢查询。

三、编译过程与常见报错处理

配置完成后执行 make,ARM服务器核心数较多,可用 -j 参数并行加速。鲲鹏920常见核数为32或64,飞腾FT-2000+为64核,可设置 make -j $(nproc)。编译时长视内存与磁盘而定,全量构建通常需要二十到四十分钟。

make -j $(nproc)
make install

实践中容易遇到两类错误。其一是缺少 rpcgen 导致编译ISAM部件失败,这是因为新版glibc将rpc剥离,必须安装 libtirpc-devel 与 rpcgen 包;其二是链接阶段报 undefined reference to __aarch64_ldadd4_acq_rel,这是LSE指令未被旧版ld识别,需升级binutils到2.34以上。

若编译中途因内存不足被杀死,可减小并行数或增加交换分区。飞腾平台单核内存带宽偏低,盲目 -j64 反而因上下文切换变慢,经验值是物理核数的三分之二。编译成功后,务必运行 make test 中的核心套件验证基础函数,特别是 crc32 与 atomic 相关用例。

四、初始化与针对国产芯片的调优

安装完毕先初始化数据字典。由于ARM平台默认值与x86一致,但NUMA影响显著,鲲鹏建议绑定本地内存:

useradd -s /sbin/nologin mysql
mkdir -p /data/mysql && chown mysql:mysql /data/mysql
/usr/local/mysql/bin/mysqld --initialize-insecure 
  --user=mysql --datadir=/data/mysql

配置文件 my.cnf 中,应针对ARM调整以下项:innodb_buffer_pool_size 设为物理内存的百分之六十;鲲鹏开启 innodb_numa_interleave=ON 减少远端访存;飞腾则适当增大 innodb_log_buffer_size 弥补写吞吐短板。同时设置 skip_name_resolve 避免DNS在国产系统上偶发阻塞。

启动方式推荐用 systemd 托管,并在服务文件里加 Environment=LD_PRELOAD=/usr/lib64/libatomic.so.1 以防个别老应用触发原子库缺失。观察三天慢查询与 cpu util,若发现某核长期满载,可用 taskset 将mysqld限定在对应NUMA节点内,鲲鹏跨die访问延迟比飞腾更敏感,调优收益更明显。

五、验证与性能对照

功能验证可用自带基准:

/usr/local/mysql/bin/mysqlslap -u root --concurrency=64 
  --iterations=10 --auto-generate-sql 
  --auto-generate-sql-load-type=mixed

在鲲鹏920与飞腾FT-2000+上,按本文参数编译的MySQL 8.0相比官方通用aarch64包,SysBench oltp_read_write 的QPS提升约百分之十五至二十。差异主要来自CRC32指令内联与LSE原子替换了慢速锁。需要强调的是,若业务大量使用UDF或插件,须以相同 -march 重新编译这些扩展,否则混合指令集会引发段错误。

综上所述,ARM上的MySQL编译安装并非简单照搬x86脚本。厘清鲲鹏与飞腾的微架构区别,选对编译开关,配合系统层NUMA与内存策略,才能让国产处理器上的数据库既稳又快。后续内核升级或切换芯片型号时,应重新评估 -march 取值,避免盲目套用旧参数。

MySQLARM编译鲲鹏飞腾适配修改时间:2026-08-10 01:51:38

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。