news 2026/9/4 8:03:18

ARM架构下MySQL 5.7.44安装部署全指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ARM架构下MySQL 5.7.44安装部署全指南

简介:面向ARM64架构Linux系统的MySQL 5.7.44二进制包,适配国产麒麟v10等环境,解决非x86平台编译安装难、依赖多的问题,适合运维与开发人员在服务器、嵌入式或物联网网关等场景快速部署数据库。压缩包内含2000个文件,其中test用例有876个,便于安装后验证功能;inc/h头文件与so动态库支撑二次开发,opt/cnf/ini配置模板辅助参数调优,sql与sh脚本覆盖初始化和自动部署流程,整包约519MB。目前已有1893人学习。借助包内程序、库文件、配置样例和测试用例,使用者可快速完成MySQL安装、调优与验证,同时获得5.7.44版本的安全修复,省去源码编译环节,提升国产平台上线效率。 这个包我盯了很久。mysql-5.7.44-linux-aarch64.tar.gz,看起来就是一个再普通不过的 MySQL 二进制包,但真正要动手装的时候,你会发现网上能找到的教程基本都是 x86_64 的,照搬过来在 ARM 机器上跑,轻则报错,重则直接把数据目录搞残。“arm架构”这四个字,才是这个包真正的门槛。我最近在一台 ARM Linux 服务器上完整走了一遍安装、初始化、配置、启动、优化的流程,踩了不少坑,也整理出了一套可以直接照做的路径。这篇东西就是给那些准备在 ARM 环境下部署 MySQL 5.7.44 的同行看的,尤其是手里有旧业务、只能继续用 5.7 的老项目。

1. 为什么 ARM 服务器非要单独的 MySQL 包

MySQL 官方提供的 Linux 二进制包是按 CPU 架构分别编译的,常见的有 x86_64 和 aarch64 两套。aarch64 就是 ARM 的 64 位指令集,标题里的linux-aarch64指的就是这一套。ARM 架构的服务器这几年在机房里的占比越来越高,功耗低、核心数多,很多云厂商也开始提供 ARM 实例,但软件生态的迁移速度明显跟不上硬件普及的速度,MySQL 就是其中一类容易踩坑的基础软件。

很多第一次接触 ARM 服务器的同学会想:都是 Linux,x86 的包拷过来加个--force是不是也能跑?答案是跑不了。MySQL 的二进制里包含大量针对特定处理器指令集编译的机器码,ARM 和 x86 的指令集完全不通,强行执行只会出现Exec format error。所以第一步必须确认:你的机器是 ARM 的,那你只能选aarch64或者armv7l对应的包,而 64 位环境就用aarch64这个。

另外一个容易被忽略的点是,5.7.44 是 MySQL 5.7 系列的后期版本,很多人还在用 5.7 的原因不是不想升级,而是业务代码里大量使用了 5.7 的行为特性,比如ORDER BY隐式排序、分区表限制、JSON 函数支持度等,迁到 8.0 需要回归测试,周期太长。所以 5.7.44 目前依然是许多生产环境的稳妥选择,ARM 架构下继续用这个版本完全合理。

2. 下载前先确认环境,省得白折腾

2.1 机器架构和系统版本要摸清楚

不要以为写的是 ARM 就万事大吉,ARM 也有 32 位和 64 位之分。先执行下面三条命令,确认你手里机器的真实情况:

uname -m cat /etc/os-release lscpu | grep Architecture
  • uname -m输出aarch64,说明是 64 位 ARM,这个包能用。
  • 输出armv7l或者armv6l,是 32 位 ARM,标题里这个aarch64包用不了,得另找 32 位版本。
  • 输出x86_64,那直接去下载普通 x86 版本,别在这浪费时间。

系统发行版方面,mysql-5.7.44-linux-aarch64.tar.gz这种官方二进制包对发行版不敏感,CentOS、Ubuntu、Debian、openEuler 这类常见的发行版都能跑,前提是 glibc 版本不要太老。官方编包一般使用 glibc 2.12 或 2.17 的兼容基线,太老的系统建议先升级glibc,否则动态链接库会对不上,运行时会报version GLIBC_X not found

2.2 依赖库必须提前装齐

MySQL 5.7 的二进制包有几个运行时依赖,缺了任何一个,mysqld启动时会直接崩溃或者报共享库加载错误。最常见的是这三个:

libaio.so.1 libnuma.so.1 libncurses.so.5

在 Debian/Ubuntu 系上安装:

apt-get update apt-get install -y libaio1 libaio-dev libnuma-dev libncurses5

在 CentOS/RHEL 系上安装:

yum install -y libaio libaio-devel numactl numactl-devel ncurses-libs

这里有一个非常典型的坑:libaio 这个库在最小化安装的 ARM 系统中经常没带上,缺失时mysqld启动会直接失败,而且日志里只写一句error while loading shared libraries: libaio.so.1。这个我在后面专门讲排错的时候会重点展开。

2.3 下载链接与文件完整性校验

mysql-5.7.44-linux-aarch64.tar.gz的包名在不同镜像站点可能有细微差异,有的站点会写成mysql-5.7.44-linux-glibc2.12-aarch64.tar.gz,多了一个glibc2.12的标识,表示编译时用的 glibc 兼容级别,实际安装流程完全一样。建议优先从 MySQL 官方下载页或者可信的镜像源获取,下载完成后务必校验 MD5:

md5sum mysql-5.7.44-linux-aarch64.tar.gz

官方文档里给出的 MD5 值要严格比对,不对就千万别解压。ARM 环境下因为下载中断或者磁盘问题导致包损坏的概率其实不低,我见过有人解压到一半发现文件缺失,然后疯狂排查系统问题,最后才意识到是包坏了。

3. 从 tar.gz 到可用的 MySQL 服务:完整操作实录

3.1 用户、目录与解压的规范姿势

MySQL 官方强烈建议用专用的系统用户运行,不要用 root,这是安全基线的一部分。先创建用户和用户组:

groupadd mysql useradd -r -g mysql -s /bin/false mysql

-s /bin/false表示这个用户不能登录 shell,只用来跑服务,减少被攻击时的危害面。

然后是解压路径。我习惯放在/usr/local下面,解压后做一个软链,好处是以后升级版本只需要替换软链指向,不影响配置和启动脚本:

tar -xzvf mysql-5.7.44-linux-aarch64.tar.gz -C /usr/local cd /usr/local ln -s mysql-5.7.44-linux-aarch64 mysql

数据目录单独规划。不要把数据放在解压目录里,生产环境一定要单独建数据盘或者分区,这样将来重装系统、升级版本,数据可以完整保留:

mkdir -p /data/mysql chown -R mysql:mysql /data/mysql chmod 750 /data/mysql

3.2 my.cnf 的核心配置思路

5.7 对配置文件的位置有固定搜索顺序,/etc/my.cnf是最常用的。下面给出一份适合大部分 ARM 服务器的入门配置,重点是内存相关的参数不要按 x86 服务器的经验拍脑袋写。

[mysqld] basedir=/usr/local/mysql datadir=/data/mysql socket=/tmp/mysql.sock pid-file=/data/mysql/mysqld.pid port=3306 character-set-server=utf8mb4 lower_case_table_names=1 max_connections=500 innodb_buffer_pool_size=1G innodb_log_file_size=256M innodb_flush_log_at_trx_commit=1 sync_binlog=1 server-id=1 log-bin=/data/mysql/binlog

几个参数需要解释一下:

  • innodb_buffer_pool_size:InnoDB 的缓冲池,一般设为物理内存的 50% 到 70%。但 ARM 服务器的内存往往比 x86 服务器小,比如有些 ARM 开发板只有 4G 内存,设 1G 是一个比较稳妥的起点。
  • innodb_flush_log_at_trx_commit=1sync_binlog=1是保证数据安全性的典型配置,代价是写入性能下降;如果只是内部测试环境,可以改成02,能明显提升写入速度。
  • lower_case_table_names=1表示表名不区分大小写,MySQL 官方文档说 Linux 平台默认是 0,但很多从 Windows 迁移过来的业务代码都习惯小写表名,设成 1 可以减少迁移后的兼容性问题,但需要注意:改这个参数必须在初始化数据目录之前确定,否则后续改会非常麻烦。

3.3 初始化数据目录与初始密码

确认目录权限没问题后,执行初始化命令:

cd /usr/local/mysql bin/mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql

这一步的作用是创建 MySQL 系统表空间、数据字典和 root 初始密码。注意--initialize会生成一个临时随机密码,打印到错误日志里;如果希望初始密码为空方便首次登录,可以使用--initialize-insecure,但生产环境绝对不要用这个。

初始化完成后,错误日志(默认在/data/mysql/*.err,CentOS 上也有可能在/var/log/mysqld.log)里会出现类似这一行:

[Note] A temporary password is generated for root@localhost: xxxxxxxx

把这一串临时密码复制下来。初始化阶段如果遇到报错,先别急着重试,去看日志最后几行,大部分原因都能在上面的[ERROR]级别日志里直接找到。磁盘满了、目录权限不对、内存不足,都会在这个阶段暴露。

3.4 首次启动、修改密码与创建业务账号

初始化成功后,启动服务:

/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &

等 3 到 5 秒后检查进程和端口:

ps -ef | grep mysqld ss -tlnp | grep 3306

进程在、3306 端口在监听,说明基本成了。然后用临时密码登录:

/usr/local/mysql/bin/mysql -uroot -p

登录后 MySQL 会强制要求先改密码,因为 5.7 默认安装了密码校验插件:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewStrongPassword';

接下来创建一个业务专用账号,避免所有应用都拿 root 去连库:

CREATE USER 'appuser'@'%' IDENTIFIED BY 'AppUserPass123'; GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'%'; FLUSH PRIVILEGES;

到这里,一个最小可用的 MySQL 5.7.44 服务就已经跑起来了。

4. ARM 环境下最容易翻车的几个坑

4.1 libaio 缺失:启动即崩的元凶

这个坑出现频率太高,必须单独拿出来说。在干净安装的 ARM 系统上,尤其是用 Docker 基础镜像或者云厂商最小化镜像初始化的环境,经常会缺少libaio。启动mysqld的时候你会看到:

error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

很多人这时候开始怀疑是不是包有问题,重下好几次,但其实只是因为少装了一个系统库。安装完libaio(Ubuntu 用apt-get install libaio1,CentOS 用yum install libaio)之后问题立刻消失。这个报错在 x86 系统里同样会出现,但在 ARM 最小化镜像里出现的概率尤其大,因为镜像裁剪者通常不会考虑数据库依赖。

4.2 初始化时报错 Could not allocate memory

ARM 设备的内存偏小,如果 my.cnf 里把innodb_buffer_pool_size调得过大,初始化的时候可能会报:

[ERROR] InnoDB: Cannot allocate memory for the buffer pool

原因很简单:buffer pool不是一次性分配成功的,而是在启动阶段连续分配大量内存,物理内存不足时内核拒绝分配。对策有两个方向:一是调低innodb_buffer_pool_size,比如 1G 内存的机器就设成 256M;二是确保没有其他大内存服务在跑。在 ARM 开发板上跑 MySQL 的人,往往同时还在跑 Nginx、Java 应用、Redis,这就更容易触发内存不足。

4.3 systemd 服务和 init 脚本的差异

mysql-5.7.44-linux-aarch64.tar.gz这个包自带的是support-files/mysql.server脚本,这个脚本是 System V init 风格的,在很多新版 Linux 系统上直接执行也能工作,但无法开机自启。建议写一个 systemd 服务文件,内容模板如下:

[Unit] Description=MySQL 5.7.44 Server After=network.target [Service] Type=forking User=mysql Group=mysql PIDFile=/data/mysql/mysqld.pid ExecStart=/usr/local/mysql/support-files/mysql.server start ExecStop=/usr/local/mysql/support-files/mysql.server stop ExecReload=/usr/local/mysql/support-files/mysql.server restart PrivateTmp=true [Install] WantedBy=multi-user.target

保存为/etc/systemd/system/mysqld.service,然后:

systemctl daemon-reload systemctl enable mysqld systemctl start mysqld

要注意PIDFile路径必须和my.cnfpid-file一致,否则 systemd 会一直警告找不到 PID 文件,甚至误判服务启动失败。

4.4 数据目录初始化失败后的清理动作

初始化失败后,数据目录里很可能已经残留了部分系统表文件。如果直接重新执行--initialize,会报[ERROR] --initialize specified but the data directory has files in it。正确的处理方法是把数据目录里的残留文件全部删掉再重试:

rm -rf /data/mysql/*

但前提是你确认目录里没有重要的业务数据。如果是第一次初始化,那没问题;如果是从旧实例迁移过来的,那绝对不能直接删除,要先备份。很多人就是因为手快,一条rm -rf把之前的数据全带走了。

5. ARM 服务器上 MySQL 的调优与安全加固

5.1 根据实际内存做一轮参数调整

MySQL 跑起来能用了,离“能用得好”还有距离。ARM 服务器的内存模型和 x86 有些差异,最明显的一点是:很多 ARM 服务器同时是低功耗设计,内存频率和带宽没有 x86 服务器那么夸张,所以 InnoDB 缓冲池大小和连接数要更加克制。你可以等业务稳定跑一段时间后,用下面这句 SQL 看一下当前实际的缓冲池命中率:

SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read_hit%';

如果命中率在 99% 以下,说明缓冲池偏小;如果长期在 99.9% 以上,并且内存还有富余,可以适当调大innodb_buffer_pool_size。另外,max_connections不要太贪,ARM 服务器上每个连接都会消耗线程栈内存,默认 500 连接在某些 4G 内存的机器上会直接把内存吃光,可以先从 200 开始跑。

连接缓存和线程池方面的参数,5.7 默认的thread_cache_size只有 9,可以调到 16 到 32。表缓存table_open_cache默认 2000,对于大部分业务够用。这些参数都不用一次性追求最优,跑起来之后观察SHOW GLOBAL STATUS里的Threads_connectedOpen_tablesThreads_created三个指标,逐步调整。

5.2 安全基线:远程访问、匿名用户和测试库

安装完成后有几件安全事项必须立刻做:

  1. 删除匿名用户:
DELETE FROM mysql.user WHERE User=''; FLUSH PRIVILEGES;
  1. 删除默认测试数据库:
DROP DATABASE IF EXISTS test;
  1. 限制远程 root 登录:
SELECT user, host FROM mysql.user WHERE User='root';

生产环境下 root 一般只允许 localhost 登录。如果业务确实需要远程连接,单独创建带最小权限的账号,而不是直接允许 root 远程。

  1. 开启防火墙规则,只放行必要来源的 3306 端口。ARM 服务器很多跑的是边缘计算或内网业务,端口暴露过宽是大忌。

5.3 ARM 环境下备份和版本升级的额外建议

ARM 架构下的 MySQL 数据文件和 x86 架构在逻辑层面是二进制兼容的,但跨架构做物理备份恢复时,最好先把数据用mysqldump导出成逻辑 SQL,再在另一套架构上导入,避免潜在的字节序差异和 InnoDB 兼容性问题。MySQL 官方的二进制包之间是通用的,也就是说你把/data/mysql目录从 x86 迁移到 ARM 实例上直接用,很多情况下确实能跑,但这不是官方推荐的路径,真出了问题没人替你兜底。

定时写一个简单的逻辑备份脚本放到 cron 里,比如每天凌晨 2 点执行:

/usr/local/mysql/bin/mysqldump -uroot -p'YourPassword' --single-transaction --all-databases | gzip > /backup/mysql_$(date +\%F).sql.gz

--single-transaction参数在 InnoDB 引擎下可以做到不锁表备份,是 5.7 时代最常用的备份方式。

走完这一整套流程,ARM 架构上的 MySQL 5.7.44 已经是一个可以稳定服务的状态了。我自己反复验证过多次,最关键的一点就是把“ARM 架构”当成一个正经的部署场景来对待,而不是默认它和 x86 完全一致。如果你也是第一次在 ARM 机器上装 MySQL,按这个流程走一遍,应该能少走不少弯路。最后再提一句,所有配置改动后都要用mysqladmin -uroot -p ping确认连接正常再切流,别改完配置直接杀进程,那种操作方式最容易把小问题放大成大故障。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/4 9:47:16

华为VCN500客户端安装配置与常见故障排查指南

简介:华为VCN500客户端安装包是华为桌面云解决方案的客户端软件,适用于需要远程接入虚拟桌面、统一运维终端设备的企业IT管理员与桌面云部署人员。资源包内共包含4个文件,主要提供3个exe安装程序与1个xml配置文件,整体压包大小321…

作者头像 李华
网站建设 2026/9/4 14:14:03

综合能源系统实战:建模-仿真-优化-控制全链路解析

简介:面向高校教师、研究生及工程人员的综合能源系统教学资源包,按建模—仿真—优化—控制全流程组织内容。资源以HTML教学页、Markdown文档、Julia脚本、CSS样式与字体文件等273个文件构成,压缩包约2.42MB,覆盖基础概念、数学建模…

作者头像 李华
网站建设 2026/9/3 0:49:01

iOS春招笔试复盘:从weak原理到上架全流程的实战考点

老实说,收到这份“2023年度小满春招iOS研发岗第一批笔试”的邮件时,我多少有点意外。春招笔试我见过不少,绝大多数是牛客网上的选择题加两道算法题,做完就等通知。小满这批不一样,它把笔试题和实际工程场景绑得很紧&am…

作者头像 李华
网站建设 2026/9/4 1:05:23

AI电销机器人源码部署实战:从选型到调优

简介:这是一份面向AI电销机器人部署场景的轻量级源码包,主要服务于具备基础Linux操作经验的开发者、运维人员及希望快速上手AI语音销售系统的初学者。资源以部署教程与配置说明为核心,明确了4核8G Centos7.9.64系统、宝塔面板、Nginx、MySQL、…

作者头像 李华