ARM64 CentOS 7安装MySQL 5.7:yum源配置到初始化完整指南

发布时间:2026/10/3 23:18:31
ARM64 CentOS 7安装MySQL 5.7:yum源配置到初始化完整指南 前阵子在一台ARM64架构的CentOS 7服务器上装MySQL 5.7一开始觉得这事挺简单——yum装个包、初始化、启动十几分钟搞定。结果真正动手才发现ARM64架构下装MySQL 5.7跟x86_64完全是两回事官方通用包装不上、yum源需要单独配、连二进制包都要自己找合适的版本这一路坑踩下来代码没跑起来时间倒是耗进去整整一下午。折腾完之后我特意把整个过程整理成了这篇文章希望能让需要CentOS 7、MySQL 5.7、ARM64三者同时凑齐的朋友少走这些弯路。内容适合服务器运维、项目部署和那些手里刚好有鲲鹏、飞腾、Ampere这类ARM服务器的同学我会把从系统确认、环境准备、仓库配置到数据库初始化的完整链路都讲明白每个坑都配上排查方法。1. 写在前面ARM64版CentOS 7装MySQL 5.7到底难在哪1.1 先确认你手里的机器真的是ARM64很多人拿到一台服务器没看架构就往下装软件我这次就差点栽在开头。Linux上看CPU架构非常直接三条命令任选其一uname -m # 输出 aarch64 或 arm64都是ARM64架构 # 输出 x86_64就是传统Intel/AMD架构 lscpu | grep Architecture cat /proc/cpuinfo | grep -i model name\|CPU partCentOS 7的ARM64版本内核和用户空间都必须针对aarch64编译也就是说你装系统时用的ISO镜像本身就是CentOS-7-aarch64开头的那种而不是x86_64的镜像。如果你是用虚拟机装ARM版本的CentOS 7那宿主机要么是真实的ARM服务器要么是通过QEMU这类方式模拟出来的aarch64环境。虚拟化环境下还要多确认一步是不是真的模拟出了ARM别装了个x86_64的CentOS再说MySQL装不上。ARM64和x86_64的差别用个生活中的例子来说就是两种不同的语言体系x86_64是英语的话ARM64就相当于中文同一个软件如果只在英语世界里写了一遍中文世界跑不起来。Linux二进制、共享库、rpm包都跟CPU指令集直接绑定ARM64机器上装x86_64的rpm包装完一定启动不了这一点是绕不过去的。这也是为啥我看到有人直接yum install mysql-community-server报“no package”或者“not found”时第一反应都是让他先查架构。1.2 为什么常见的安装方法在ARM64上会翻车MySQL官方对Linux提供的安装包历史上很长时间只发布x86_64和少数几种架构的二进制5.7也不是一开始就有aarch64的rpm包。如果按照网上大多数教程直接下载那几个经典的tar.gz包例如mysql-5.7.x-linux-glibc2.12-x86_64.tar.gz在aarch64机器上解压是解压了可里面全是x86_64的二进制一执行直接报Exec format error根本跑不起来。那有人会想编译安装总行吧源码总跟架构无关。这话没错但MySQL 5.7的源码编译依赖非常多cmake、boost、gcc、openssl、ncurses缺一个都编不过ARM64平台上编译一个大版本动辄两三个小时中间遇到单个测试项失败还不好定位。我的建议是能不用编译就别编译有仓库就用仓库有二进制包就用二进制包后面我会给出几种实测能走的路径。另外还有一个容易被忽略的点CentOS 7本身已经停止维护了自带的基础yum源早就被官方撤掉如果你手里的ARM64 CentOS 7一直没换过源yum install什么都失败。这个问题看起来跟MySQL无关但90%的“装不上”最终都卡在这里。所以正式安装MySQL前必须先解决yum源问题这件事我在后面单独讲。1.3 三条可行路线先看结论根据我这段时间在ARM64 CentOS 7上的实际测试有三条能跑通的路方案内容适合场景难度方法A用MySQL官方Yum仓库安装mysql-community-server 5.7网络正常、能用repo.mysql.com的场景低方法B用Percona仓库安装percona-server-57官方源不可用或需要更灵活备份工具的场景中方法C下载Generic Linux ARM64版tar.gz手动部署离线环境、需要自定义安装目录的场景高我这次重点讲方法A因为它是大多数人最理想的状态也是我最终采用的方式。方法B和方法C我把关键操作列出来给有需要的人做备选。2. 环境准备先把系统收拾利索再动手2.1 系统版本、内核与基本的坑安装MySQL之前先用几个命令把环境摸清楚cat /etc/redhat-release # 期望输出 CentOS Linux release 7.x uname -r # 内核版本多数ARM64 CentOS 7用3.10.0-xxx.el7.aarch64 free -h df -hMySQL 5.7跑起来最低内存建议是512MB到1GB当然这只是能启动的下限现场大数据量、多连接的情况建议2GB起步。磁盘上/var/lib/mysql作为默认数据目录至少留出几个GB的空间df -h看清楚再动。还有一个经常会掉坑的地方CentOS 7的minimal安装通常不带perl、net-tools、wget这些包而MySQL安装脚本和systemd在做依赖检查时需要它们。提前一次性装好yum install -y wget perl net-tools vim如果你想使用Percona方案后面还需要用到libaio和numactl-libs这个方法A装了mysql-community-server后系统会自动带上但手动方式就要自己装。2.2 关闭SELinux和防火墙的选择CentOS 7默认开启SELinuxMySQL在标准策略下启动有时会遇到权限拒绝最典型的表现就是mysqld起来以后立刻退出日志里全是Permission denied。排查的时候可以把SELinux临时切到permissive试试setenforce 0如果想彻底关闭改/etc/selinux/config把SELINUXenforcing改成SELINUXdisabled注意这行改完要重启系统才完全生效。生产环境建议保持强制模式但也得配好对应策略不过我个人在内部测试机上直接关掉省心最重要。防火墙的取舍取决于你需不需要远程连数据库。本地安装不开放端口firewalld保持默认就行如果应用服务器在另一台机器上那就要开放3306端口。先把规则准备好等MySQL配置完成之后再统一放行这样能避免端口开着但数据库密码是初始密码这种危险状态。2.3 换一个能用的yum源几乎所有人都会忽略的前提这一点我必须放到最前面反复说因为CentOS 7的默认源已经失效了。当你在ARM64 CentOS 7上执行yum install的时候报错、超时、404一大半都是因为/etc/yum.repos.d/里的repo文件还在指向已被关闭的官方仓库。处理方式很简单把系统自带的CentOS-Base.repo里的镜像地址替换成阿里云或者华为云的镜像地址只要镜像源明确支持aarch64就行。以阿里云为例替换核心是这一组配置[base] nameCentOS-$releasever - Base baseurlhttps://mirrors.aliyun.com/centos-vault/7.9.2009/os/$basearch/ gpgcheck1 gpgkeyhttps://mirrors.aliyun.com/centos-vault/7.9.2009/os/$basearch/RPM-GPG-KEY-CentOS-7 [extras] nameCentOS-$releasever - Extras baseurlhttps://mirrors.aliyun.com/centos-vault/7.9.2009/extras/$basearch/ gpgcheck1 gpgkeyhttps://mirrors.aliyun.com/centos-vault/7.9.2009/os/$basearch/RPM-GPG-KEY-CentOS-7 [updates] nameCentOS-$releasever - Updates baseurlhttps://mirrors.aliyun.com/centos-vault/7.9.2009/updates/$basearch/ gpgcheck1 gpgkeyhttps://mirrors.aliyun.com/centos-vault/7.9.2009/os/$basearch/RPM-GPG-KEY-CentOS-7注意里面的$basearch变量在ARM64机器上会被自动替换成aarch64所以这个配置是架构无关的。CentOS 7的yum源问题几乎每次都会有同学卡在这里但处理完之后世界就清静了。配置完之后执行yum clean all yum makecache yum repolist如果能正常列出好多包说明源已经通了。3. 核心安装过程用官方Yum仓库装MySQL 5.73.1 配置MySQL官方仓库管理MySQL官方Yum仓库的RPM是mysql57-community-release-el7-*.noarch.rpm这个包本身是noarch的任何架构都能装。下载并安装wget https://repo.mysql.com/mysql57-community-release-el7-11.noarch.rpm yum localinstall -y mysql57-community-release-el7-11.noarch.rpm安装完成后/etc/yum.repos.d/下会多出mysql-community.repo和mysql-community-source.repo两个文件。打开一下mysql-community.repo重点看MySQL 5.7的enabled配置vim /etc/yum.repos.d/mysql-community.repo在5.7小节里确认enabled1其他版本小节比如8.0enabled0。如果你之前部署过8.0的仓库别忘了改回来。然后执行yum makecache看看能不能拉到MySQL相关的包信息。如果这一步就报错多半是repo文件里有baseurl不可达的问题先把仓库文件里指向mysql官方CDN的baseurl换成国内镜像源或者临时用percona仓库代替。接下来看看官方仓库里到底有没有ARM64的5.7包yum list mysql-community-server --showduplicates正常情况下会看到mysql-community-server.x86_64和一两个aarch64的记录。如果只有x86_64说明你下载的release包版本太老或者仓库缓存有问题我的建议是换个较新的release版本比如el7-11、el7-10然后重新makecache。3.2 安装服务器与客户端仓库通了以后安装就是一条命令的事yum install -y mysql-community-server mysql-community-client这里我把client也带上因为后面登录数据库直接用mysql命令没必要单独下载客户端。安装过程会提示导入MySQL GPG公钥确认即可。安装完看一下版本mysqld --version输出类似mysqld Ver 5.7.44 for Linux on aarch64 (MySQL Community Server (GPL))看到aarch64就放心了架构匹配说明装对了。很多同学在这步只看到5.7.44就以为完事不看后面的aarch64其实这也是一种排查信息缺失。如果装完发现mysqld版本是8.x那就是yum配置的默认版本优先级出了问题。处理方法直接把mysql-community-release里8.0小节的enabled改成05.7小节的enabled改成1然后yum install再跑一次。3.3 备选方案用Percona Server 5.7顶上有些场景下官方仓库的aarch64包真就不兼容或者下不动。我现在也会直接用Percona Server 5.7做替代因为它跟MySQL 5.7二进制兼容命令、配置、JDBC驱动全都一样而且Percona在ARM64上的支持历史比MySQL官方还要更长一些。Percona的安装步骤也不复杂yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm percona-release setup ps57 yum install -y percona-server-server-57 percona-server-client-57安装完成后service的名字在CentOS 7上叫mysqld跟官方版一致。Percona还会额外装一些工具比如xtrabackup这个对后续备份运维来说反而是加分项。3.4 备选方案Generic ARM64二进制包手动部署如果你的环境完全离线或者需要把MySQL放到自定义目录比如/data/mysql那方法A/方法B的rpm方式就不太合适。MySQL官方在5.7后期版本里确实发布了针对aarch64的Linux Generic二进制包下载的时候要认准文件名里带aarch64字样的。实际下载地址形如wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.44-linux-glibc2.12-aarch64.tar.gz注意我标出来的aarch64关键字不要下成x86_64版本。解压之后手动放到/usr/local/mysql进行数据目录初始化tar -xzf mysql-5.7.44-linux-glibc2.12-aarch64.tar.gz -C /usr/local/ mv /usr/local/mysql-5.7.44-linux-glibc2.12-aarch64 /usr/local/mysql useradd -r -s /sbin/nologin mysql mkdir -p /data/mysql chown -R mysql:mysql /data/mysql /usr/local/mysql/bin/mysqld --initialize --usermysql --basedir/usr/local/mysql --datadir/data/mysql二进制包方式的坑主要在依赖系统里必须提前装好libaio和numactl库否则mysqld起不来。先执行yum install -y libaio numactl-libs再启动并且把/etc/my.cnf里的basedir、datadir、socket路径都对应改好。这种方式之后我会专门再写一篇详细版这里先列主干。4. 初始化、配置与启动让数据库真正能干活4.1 初始化数据目录rpm方式安装后MySQL已经把mysqld放到/usr/sbin/数据目录默认/var/lib/mysql。首次启动前要执行初始化5.7之后的初始化命令是mysqld --initialize系统会自动生成临时root密码。CentOS 7上通常直接用systemd来启动并初始化mysqld --initialize --usermysql如果这条命令没报错数据目录就已经准备好了如果报错绝大多数是/var/lib/mysql目录权限问题执行chown -R mysql:mysql /var/lib/mysql再重新初始化。注意初始化只会做一次重复执行会报“Data Dictionary already initialized”之类的错误所以看到这个提示不要慌说明目录已经初始化过了。4.2 启动服务、查看状态、设置开机自启CentOS 7上一切围绕systemd进行systemctl start mysqld systemctl status mysqld systemctl enable mysqld启动失败时第一步永远是看错误日志tail -f /var/log/mysqld.log常见日志几类缺库缺文件排查libaio、libnuma一类依赖路径错误查看my.cnf里datadir与--initialize时是否一致SELinux权限把SELinux临时关掉再试一次确认问题后再决定怎么配策略socket文件路径错客户端连不上时看/var/lib/mysql/mysql.sock是否存在4.3 获取临时密码并完成安全配置5.7初始化的临时密码会写进日志格式是password is generated for rootlocalhost后面的那一段字符串grep temporary password /var/log/mysqld.log拿到临时密码后用root登录mysql -uroot -p第一次登录会让你改密码也可以直接执行ALTER USER rootlocalhost IDENTIFIED BY 你的新密码; FLUSH PRIVILEGES;注意5.7默认的validate_password插件会强制密码复杂度至少要包含大小写字母、数字、特殊符号长度8位以上。如果你在开发环境想关掉这个限制可以这样SET GLOBAL validate_password_policyLOW; SET GLOBAL validate_password_length6; ALTER USER rootlocalhost IDENTIFIED BY 123456;但这只对当前会话生效想让配置持久化把它写进my.cnf或者使用mysql_secure_installation一步步做安全加固。mysql_secure_installation会问你删除匿名用户、禁止root远程登录、删除test库生产环境建议全选yes。4.4 字符集与排序规则避免中文变问号MySQL 5.7默认字符集是latin1如果不改数据表里存中文会出现乱码风险。这也是老生常谈但总有人忘的一步。建议启动前就在/etc/my.cnf里配置好[mysqld] character-set-serverutf8mb4 collation-serverutf8mb4_general_ci init_connectSET NAMES utf8mb4 [client] default-character-setutf8mb4设置完之后重启MySQLsystemctl restart mysqld最后验证一下SHOW VARIABLES LIKE %character%; SHOW VARIABLES LIKE %collation%;character_set_server和character_set_database都应该是utf8mb4。这里多说一句较新的MySQL 8.0默认就是utf8mb4而5.7需要我们手动配这也是5.7环境部署中经常会漏掉的步骤。4.5 开启远程访问授权和防火墙本地安装只连localhost的话不需要额外配置。如果应用服务器不在同一台主机上那远程连接就要做两件事分配账号权限、放行防火墙。第一步创建一个专门给远程用账号最好不要用rootCREATE USER remote_user% IDENTIFIED BY 你的密码; GRANT ALL PRIVILEGES ON *.* TO remote_user%; FLUSH PRIVILEGES;第二步放开3306端口。CentOS 7默认用firewalldfirewall-cmd --permanent --add-port3306/tcp firewall-cmd --reload如果你把防火墙停掉或者换用了iptables也要对应地做端口放行。第三步确认mysqld的bind-address配置。默认值是0.0.0.0代表监听所有网卡如果把my.cnf里改成了127.0.0.1那远程就永远连不上只能本地连接。出现“Cant connect to MySQL server on xxx (10060)”这类错误时排查顺序是网络、端口、账号host、bind-address这四个检查一遍基本就能定位。5. 实战中常见的坑和排查实录5.1 yum源失效导致所有安装都以404告终这个现象在ARM64 CentOS 7上触发概率极高。如果你执行yum install mysql-community-server结果提示没有可用包或者报一堆404那基本就是repo指向了已经关闭的CentOS 7官方源。处理方式参考2.3节把Base.repo改成aliyun或huaweicloud的vault镜像。这里我再补一句修改repo文件之后记得rm -rf /var/cache/yum/*把缓存彻底清掉再重新makecache。5.2 mysqld启动不了日志直接刷Permission denied这类情况通常集中在两个方向SELinux和目录权限。先看status的输出再用grep去捞日志journalctl -u mysqld --no-pager -n 50如果看到响亮的Permission denied就先setenforce 0验证再决定是否关闭或配策略。目录权限方面chown -R mysql:mysql /var/lib/mysql是基础操作另外还要留意mysqld运行用户是否对/var/log/mysqld.log有写权限。5.3 初始化生成的临时密码找不到了初始化完成以后/var/log/mysqld.log里就一行临时密码但有几次日志刷新太快我没找到。这时候的解决方法是重置密码。先停止服务然后以跳过授权表的方式临时启动systemctl stop mysqld mysqld_safe --skip-grant-tables 然后登录mysql -uroot手动改密码FLUSH PRIVILEGES; ALTER USER rootlocalhost IDENTIFIED BY 新密码; FLUSH PRIVILEGES;改完退出把mysqld_safe停掉再用systemctl start mysqld正常启动。注意mysqld_safe只是紧急救援手段生产环境确认密码改好后就立刻恢复正常模式。5.4 ARM64机器上没有ping通外网的判断顺序经常有同学在装MySQL时顺便遇到ping不通百度的问题然后两边互相干扰无从下手。排查思路很简单ping本机网关通不通代表链路ping 223.5.5.5一个公共DNS通就说明外网可达但DNS解析有问题都不通就检查网卡、网关、IP配置DNS解析问题要改/etc/resolv.conf设置一个可用的nameserver比如nameserver 223.5.5.5和nameserver 114.114.114.114。这个问题独立于MySQL安装但如果不理顺yum源、MySQL下载、wget全都会一起失败。5.5 架构不对装出来的各种奇怪表现这个是ARM64环境特有的。如果你不小心下了一个x86_64的MySQL二进制在aarch64机器上执行会直接提示Exec format error或者chmod x之后还是不行这时候就可以确定是架构不匹配。慢慢养成一个习惯所有下载的二进制和rpm先问一句“这包是不是aarch64的”。6. 一段实用经验收尾之前再做这几件事6.1 验证安装结果安装和配置都结束之后我自己会习惯性地把整条路径从头到尾完整验证一遍systemctl status mysqld | head -5 mysql -uroot -p -e select version(); mysql -uroot -p -e show variables like port; mysql -uroot -p -e show variables like character_set_server;6.2 一些粗调建议与习惯如果你是部署给生产项目用的5.7默认配置其实挺保守。常见粗调项[mysqld] max_connections500 innodb_buffer_pool_size1G innodb_log_file_size256M配完之后systemctl restart mysqld即可。buffer pool的大小根据物理内存调整通常设为物理内存的50%~70%左右小机器就适当调低。不要一上来就堆一个大buffer pool否则系统内存紧张还可能触发OOM。我个人的习惯是装完MySQL后顺手给/etc/my.cnf做一次完整备份命名成my.cnf.bak.日期之后每次改配置前都保持这个习惯回滚会快很多。最后再分享一个小技巧ARM64机器上安装软件判断软件包是否匹配架构最直接的方法就是装好之后跑一下--version看输出里有没有aarch64后缀。MySQL这种运行时间长的服务装之前花20分钟确认架构、仓库、字符集、防火墙这四件事一定比装完之后报错再修快得多。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询