手把手教你用rpm在银河麒麟V10 ARM系统上安装MySQL 8.0.27(含完整命令)
在银河麒麟V10 ARM架构上部署MySQL 8.0.27:一份避坑指南与实战手册
最近在国产化替代的浪潮下,不少开发者和运维同学都开始接触银河麒麟这类国产操作系统。我手头正好有几台搭载飞腾或鲲鹏处理器的服务器,系统清一色是银河麒麟V10,需要在上面部署MySQL 8.0.27。本以为和CentOS上装MySQL大同小异,结果实际操作下来,从依赖包缺失到权限配置,踩的坑一个接一个。这篇文章,我就把自己从零开始、成功在银河麒麟V10 ARM系统上安装并配置好MySQL 8.0.27的完整过程,以及遇到的那些“坑”和解决方案,毫无保留地分享出来。无论你是初次接触国产操作系统,还是对Linux命令不太熟悉但任务在身,这份结合了原理和实操的指南,应该能帮你少走很多弯路。
1. 环境准备与前期“排雷”
在动手安装任何软件之前,理清环境状况是避免后续混乱的关键。银河麒麟V10基于Linux内核,其软件包管理继承了RPM体系,但它的软件源和依赖库与常见的CentOS或Ubuntu存在差异,尤其是在ARM架构下。
首先,我们需要确认两件事:系统架构和现有数据库环境。
打开终端,输入以下命令查看系统信息:
uname -m cat /etc/os-release对于ARM架构的服务器,uname -m通常会返回aarch64。确认这一点至关重要,因为它决定了我们后续下载的安装包版本。
接下来,检查系统是否预装了其他数据库软件,比如MariaDB。在银河麒麟V10中,有时会存在与MySQL冲突的MariaDB组件。直接安装MySQL而不处理它们,百分百会报错。
我们可以用以下命令查询:
rpm -qa | grep -i mariadb rpm -qa | grep -i mysql如果发现了MariaDB相关的包,比如mariadb-libs-5.5.64-1.el7.aarch64,必须将其移除。这里不建议使用yum remove或apt remove,因为可能会触发复杂的依赖解析,甚至影响系统其他组件。更稳妥的方法是使用rpm -e(erase)命令进行强制卸载,并忽略依赖检查:
sudo rpm -e --nodeps mariadb-libs-5.5.64-1.el7.aarch64注意:请将上面的包名替换为你实际查询到的名称。
--nodeps参数意味着“不检查依赖”,这在此处是安全的,因为我们即将用MySQL完全替代其功能。
完成清理后,最好再更新一下系统基础软件包,确保环境稳定:
sudo yum update -y2. 获取正确的MySQL安装包并解压
MySQL官方为不同架构和操作系统提供了编译好的RPM Bundle包。对于银河麒麟V10 ARM,我们需要找到对应aarch64架构和el7(Enterprise Linux 7)兼容版本的包。MySQL 8.0.27的版本号与发布编号需要仔细核对。
一个可靠的下载地址是MySQL官方的Archives站点。我们可以直接在服务器上使用wget命令下载。这里有一个小技巧:先在一个临时目录(如~/mysql_install)下进行操作,方便管理文件。
mkdir -p ~/mysql_install && cd ~/mysql_install wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.27-1.el7.aarch64.rpm-bundle.tar下载完成后,你会得到一个tar压缩包。使用tar命令解压它:
tar xvf mysql-8.0.27-1.el7.aarch64.rpm-bundle.tar解压后,你会看到一系列.rpm文件,它们共同组成了完整的MySQL。这些包必须按照特定的顺序安装,因为存在严格的依赖关系。错误的安装顺序会导致失败。
解压出来的文件列表通常如下,理解每个包的作用有助于在出问题时排查:
| RPM 包名称 | 核心功能描述 |
|---|---|
mysql-community-common | 包含MySQL服务器和客户端的公共文件,如配置文件、字符集定义等。 |
mysql-community-libs | 客户端库文件,是其他客户端工具的基础依赖。 |
mysql-community-libs-compat | 兼容旧版本客户端库,为了向后兼容。 |
mysql-community-client | 标准的MySQL客户端工具,如mysql,mysqldump。 |
mysql-community-client-plugins | 客户端插件,例如用于SHA-256密码认证的插件。 |
mysql-community-server | MySQL服务器主程序,最核心的包。 |
mysql-community-devel | 开发用的头文件和库,用于编译连接MySQL的程序。 |
mysql-community-embedded-compat | 嵌入式MySQL库的兼容版本。 |
3. 按序安装RPM包与解决依赖冲突
现在进入核心安装环节。请严格按照下面的顺序执行rpm -ivh命令。-i表示安装,-v显示详细信息,-h显示进度条。由于我们是在一个“干净”的环境下安装,且已经处理了MariaDB,但为了应对银河麒麟系统库可能存在的微小差异,我们统一加上--nodeps(忽略依赖检查)和--force(强制安装)参数。
sudo rpm -ivh mysql-community-common-8.0.27-1.el7.aarch64.rpm --nodeps --force sudo rpm -ivh mysql-community-libs-8.0.27-1.el7.aarch64.rpm --nodeps --force sudo rpm -ivh mysql-community-libs-compat-8.0.27-1.el7.aarch64.rpm --nodeps --force sudo rpm -ivh mysql-community-client-8.0.27-1.el7.aarch64.rpm --nodeps --force sudo rpm -ivh mysql-community-client-plugins-8.0.27-1.el7.aarch64.rpm --nodeps --force sudo rpm -ivh mysql-community-server-8.0.27-1.el7.aarch64.rpm --nodeps --force # 以下两个包对于仅运行数据库服务而言不是必须的,可根据需要安装 sudo rpm -ivh mysql-community-devel-8.0.27-1.el7.aarch64.rpm --nodeps --force sudo rpm -ivh mysql-community-embedded-compat-8.0.27-1.el7.aarch64.rpm --nodeps --force执行完上述命令后,MySQL的主要组件就已经安装到你的系统里了。可以通过rpm -qa | grep mysql来验证所有包是否都已存在。
第一个大坑:OpenSSL兼容库缺失在银河麒麟V10上,尝试初始化或启动MySQL服务时,你很可能会遇到一个经典错误:
mysqld: error while loading shared libraries: libssl.so.1.0.0: cannot open shared object file: No such file or directory这是因为MySQL 8.0.27这个特定版本编译时链接了较旧版本的OpenSSL库(1.0.0),而银河麒麟V10系统自带的OpenSSL版本较新,不包含这个兼容库。解决方法是从其他兼容的源(如CentOS 8的镜像)下载对应的compat-openssl10包并安装。
wget http://mirror.centos.org/centos/8/AppStream/aarch64/os/Packages/compat-openssl10-1.0.2o-3.el8.aarch64.rpm sudo rpm -ivh compat-openssl10-1.0.2o-3.el8.aarch64.rpm这个包提供了libssl.so.1.0.0和libcrypto.so.1.0.0文件,完美解决了依赖问题。
4. 数据库初始化与安全加固
安装完所有包并解决了OpenSSL依赖后,我们开始初始化MySQL的数据目录。这是生成系统表、创建root用户初始密码的关键步骤。
使用mysqld --initialize命令进行初始化。这个命令会:
- 在
/var/lib/mysql目录下创建MySQL系统数据库(如mysql,sys,performance_schema)。 - 为root用户生成一个临时的随机密码。
sudo mysqld --initialize --user=mysql重要提示:务必以
root权限执行,并指定--user=mysql。执行成功后,一定要立即查看日志末尾,获取生成的root临时密码。密码记录在MySQL的错误日志中,默认位置是/var/log/mysqld.log。
sudo grep 'temporary password' /var/log/mysqld.log输出会类似:A temporary password is generated for root@localhost: JqkR7Eeio8>?。把JqkR7Eeio8>?这个密码复制保存下来,下一步登录要用。
第二个大坑:数据目录权限初始化完成后,启动服务前,必须确保/var/lib/mysql目录的所有权和权限正确。通常mysqld --initialize会处理好,但为了绝对可靠,我们可以手动设置:
sudo chown -R mysql:mysql /var/lib/mysql sudo chmod -R 750 /var/lib/mysql我个人的经验是,在银河麒麟上,有时初始化后目录属主可能不对,导致后续mysqld进程没有写入权限而启动失败。所以这一步检查一下没坏处。
现在,可以启动MySQL服务了:
sudo systemctl start mysqld sudo systemctl enable mysqld # 设置开机自启 sudo systemctl status mysqld # 检查运行状态看到active (running)就表示服务启动成功了。
5. 首次登录、修改密码与基础配置
服务启动后,用刚才记录的临时密码登录:
mysql -u root -p输入临时密码。成功后,你会进入MySQL命令行提示符mysql>。但此时你几乎什么也做不了,因为MySQL强制要求你必须先修改root密码。
在MySQL 8.0中,修改密码的语法与旧版本不同:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewStrongPassword123!';请将'YourNewStrongPassword123!'替换为你自己的强密码。MySQL 8.0默认启用了密码强度验证插件,密码需要包含大小写字母、数字和特殊字符,且长度通常不少于8位。
修改成功后,执行FLUSH PRIVILEGES;(虽然ALTER USER通常会自动刷新),然后退出exit。
基础安全配置建议:除了修改root密码,生产环境还应考虑:
- 移除匿名用户:
DELETE FROM mysql.user WHERE User=''; - 禁止root远程登录(或使用强密码+SSL):
CREATE USER 'admin'@'%' IDENTIFIED BY 'StrongPass!'; GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;然后DROP USER 'root'@'%'; - 调整默认的
my.cnf配置,如设置合适的字符集(utf8mb4)、调整连接数和缓冲区大小等。配置文件通常位于/etc/my.cnf或/etc/mysql/my.cnf。
6. 故障排查与性能调优初探
即使按照上述步骤,你可能还是会遇到一些问题。这里列举几个我遇到过的及其解决方法:
问题一:启动mysqld服务失败,日志显示“Permission denied”
检查SELinux状态。银河麒麟可能默认启用SELinux。临时关闭:
sudo setenforce 0。永久关闭需编辑/etc/selinux/config,设置SELINUX=disabled,然后重启。更优解是配置正确的MySQL SELinux策略。
问题二:客户端无法连接,提示“Can‘t connect to local MySQL server through socket”
首先确认服务是否真的在运行:
sudo systemctl status mysqld。其次,检查MySQL的socket文件路径。在MySQL命令行执行show variables like '%socket%';,确认客户端连接时使用的socket路径(--socket参数)与此一致。
问题三:内存占用过高在ARM服务器上,尤其是内存资源不那么充裕的情况下,需要对MySQL进行一些基础调优。编辑/etc/my.cnf,在[mysqld]段落下添加或修改以下参数:
[mysqld] # 基础调优示例,请根据服务器实际内存调整 innodb_buffer_pool_size = 256M # 对于1G内存的机器,设为256M是安全的起点 key_buffer_size = 32M max_connections = 50 # 控制并发连接数,避免过多连接耗尽资源 thread_cache_size = 8 query_cache_type = 0 # MySQL 8.0已移除查询缓存,此项无效,但可明确禁用 table_open_cache = 1024修改配置后,重启服务生效:sudo systemctl restart mysqld。
问题四:ARM架构下的性能考量ARM架构(如鲲鹏、飞腾)与x86架构在指令集和内存模型上有差异。虽然MySQL官方提供了ARM64的二进制包,但在极端高并发或复杂查询场景下,可能需要对一些编译参数或内核参数进行微调。不过,对于绝大多数应用场景,官方二进制包的默认配置已经足够稳定和高效。一个实用的建议是,关注操作系统层面的性能设置,如CPU调度器、透明大页(Transparent Huge Pages)等,这些对数据库性能的影响有时比数据库内部参数更直接。
整个安装和初步配置过程到这里就基本完成了。从清理环境、解决依赖、按序安装、处理权限、初始化、改密到基础调优,每一步都藏着可能让你折腾半天的小细节。尤其是在国产化平台上进行部署,更需要耐心和细致的排查。我自己的几台服务器在按照这个流程走通之后,MySQL 8.0.27都运行得非常稳定。如果你在操作中遇到了上面没提到的问题,多查看/var/log/mysqld.log这个日志文件,十有八九答案就在里面。
