如果你正在寻找一份能在 Rocky Linux 10 上稳定运行、性能强劲且易于管理的数据库方案那么 MySQL 9.7 绝对值得你投入时间。作为 CentOS 的“精神续作”Rocky Linux 以其企业级的稳定性和长期支持而闻名而 MySQL 9.7 则带来了性能、安全和管理上的诸多新特性。然而从官方仓库直接yum install mysql-server可能会让你失望——因为默认仓库提供的往往是较旧的版本。这篇文章要解决的正是这个看似简单却暗藏“坑点”的核心问题如何在 Rocky Linux 10 上绕过默认仓库的旧版本安全、高效地安装并配置最新的 MySQL 9.7 社区版并完成生产环境级别的初始化设置。很多教程只告诉你安装却忽略了版本选择、安全加固、远程访问配置和性能调优的起点导致部署的数据库要么版本落后要么存在安全隐患。本文将带你走完从零到一的完整流程。你将不仅学会安装更能理解每一步背后的原因掌握排查常见问题的方法并建立起适用于生产环境的最佳实践。无论你是正在搭建新的应用后端还是需要升级现有数据库环境这篇指南都能为你提供清晰的路径和可靠的参考。1. 为什么选择 Rocky Linux 10 MySQL 9.7 组合在开始敲命令之前我们先明确这个技术栈的价值。这不仅仅是两个流行软件的简单叠加而是一个为追求稳定性和现代特性的开发者/运维人员量身定制的组合。Rocky Linux 10 的优势稳定性与兼容性作为 RHEL 的 1:1 二进制兼容复刻版它继承了企业级 Linux 的稳定内核、严谨的软件包管理和长期支持通常长达10年。这意味着你的数据库运行环境底层极其可靠。熟悉的生态如果你熟悉 CentOS 或 RHEL那么切换到 Rocky Linux 几乎零成本。yum/dnf包管理器、systemd服务管理、firewalld防火墙等操作习惯完全一致。活跃的社区由原 CentOS 创始人发起拥有庞大且活跃的社区支持遇到问题更容易找到解决方案。MySQL 9.7 的核心改进相较于更早的 8.0 版本MySQL 9.7 在多个维度进行了增强请注意版本号可能随官方发布变化本文以 9.7 为例方法通用性能提升优化了查询执行器、InnoDB 存储引擎并对读写负载有更好的支持。更强的安全性默认的身份验证插件、更灵活的密码策略以及增强的审计功能。改进的 JSON 支持提供了更多 JSON 函数和更好的性能对于现代 Web 应用至关重要。运维便利性诸如INSTANTDDL 操作的增强某些表结构变更无需重建表使得在线维护对业务影响更小。组合价值判断 这个组合非常适合需要长期稳定运行的中大型应用、微服务后端、或者作为数据仓库的基础。它避免了使用滚动发行版如某些 Linux 发行版可能带来的意外变更风险同时又能享受到数据库软件的最新特性。对于个人学习或追求极致轻量的场景或许有更简单的选择但对于严肃的项目部署这个组合是一个“稳健而先进”的优选方案。2. 环境准备与关键概念澄清在动手安装前请确保你的环境符合要求并理解我们将要采取的方法。2.1 系统环境要求操作系统Rocky Linux 10。你可以通过cat /etc/redhat-release或hostnamectl命令确认。权限你需要拥有root权限或sudo权限来执行安装和配置命令。网络服务器需要能访问互联网以下载 MySQL 官方仓库配置和软件包。资源建议至少 2GB 内存和 20GB 磁盘空间具体取决于你的数据规模。2.2 安装策略为什么不用默认仓库Rocky Linux 的默认 AppStream 或 BaseOS 仓库为了稳定性通常不会立即包含 MySQL 的最新主要版本。直接dnf install mysql-server安装的可能是 MySQL 8.0甚至更早的版本。因此我们的核心策略是添加 MySQL 官方的 Yum 仓库MySQL Yum Repository。这样做的好处是获取最新版本直接从 Oracle 官方获取最新的 MySQL 9.7 包。自动依赖管理dnf会自动解决所有依赖关系。便于未来升级配置好仓库后未来可以通过dnf update轻松升级到小版本更新。重要提醒从第三方仓库安装软件时务必确保来源可信。MySQL 官方仓库是首选。2.3 与 MariaDB 的区分你可能听说过 MariaDB它是 MySQL 的一个流行分支。在 Rocky Linux 默认仓库中mysql-server包可能实际上指向的是 MariaDB。为了避免混淆和冲突在安装 MySQL 官方版本之前如果系统之前安装过 MariaDB 或旧版 MySQL必须彻底移除它们。我们会在下一步详细操作。3. 步骤一清理旧版本与添加 MySQL 官方仓库这是确保安装纯净、无冲突的关键一步。3.1 检查并移除现有 MySQL/MariaDB首先检查系统是否已安装相关软件包sudo dnf list installed | grep -E ‘mysql|mariadb‘如果发现有已安装的包如mariadb-server,mysql-community-server等需要移除它们。同时清理相关的数据和配置文件警告此操作会删除现有数据库数据仅在新环境或确定不需要旧数据时执行# 1. 停止运行中的服务 sudo systemctl stop mysqld sudo systemctl stop mariadb # 2. 移除软件包 sudo dnf remove -y mysql* mariadb* # 3. 删除残留的数据文件和配置文件 sudo rm -rf /var/lib/mysql sudo rm -rf /etc/my.cnf /etc/my.cnf.d/ /etc/mysql/ # 4. 删除残留的日志文件可选 sudo rm -rf /var/log/mysql* /var/log/mariadb*3.2 添加 MySQL 官方 Yum 仓库访问 MySQL 官方社区版下载页面通常可以找到仓库安装包。但更通用的方法是直接下载并安装仓库配置 RPM 包。安装 MySQL 仓库配置包 前往 MySQL 官方 Yum 仓库页面 查看最新地址或直接使用以下命令下载适用于 EL9兼容 Rocky Linux 10的仓库包。请注意版本号如mysql80-community-release-el9-5.noarch.rpm可能会更新请以官网为准。# 下载仓库安装包这里以 el9 版本为例通常兼容 Rocky Linux 10 sudo dnf install -y https://dev.mysql.com/get/mysql80-community-release-el9-5.noarch.rpm这个操作会在/etc/yum.repos.d/目录下添加mysql-community.repo等文件。验证仓库是否添加成功sudo dnf repolist enabled | grep mysql你应该能看到mysql-community相关的仓库被启用。默认启用的是 8.0 系列我们需要启用 9.7 系列仓库 编辑 MySQL 仓库配置文件sudo vim /etc/yum.repos.d/mysql-community.repo找到[mysql80-community]部分将其enabled设置为0。然后找到[mysql97-community]或类似名称的部分具体名称请根据文件内容确定可能是[mysql9.7-community]将其enabled设置为1。# /etc/yum.repos.d/mysql-community.repo 文件片段示例 [mysql80-community] nameMySQL 8.0 Community Server baseurlhttp://repo.mysql.com/yum/mysql-8.0-community/el/9/$basearch/ enabled0 # 修改为 0禁用 8.0 gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql [mysql97-community] # 或 [mysql9.7-community] nameMySQL 9.7 Community Server baseurlhttp://repo.mysql.com/yum/mysql-9.7-community/el/9/$basearch/ enabled1 # 确保此处为 1启用 9.7 gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql保存并退出。4. 步骤二安装 MySQL 9.7 服务器仓库配置好后安装就变得非常简单。更新 DNF 缓存sudo dnf makecache安装 MySQL 社区版服务器sudo dnf install -y mysql-community-server这个命令会安装mysql-community-server包及其所有依赖包括客户端、共享库等。验证安装mysql --version如果安装成功你会看到类似mysql Ver 9.7.xx for Linux on x86_64 (MySQL Community Server - GPL)的输出确认版本是 9.7 系列。5. 步骤三启动服务与初始安全配置安装完成后MySQL 服务并不会自动启动并且有一个临时的 root 密码。我们需要进行安全初始化。启动 MySQL 服务并设置开机自启sudo systemctl start mysqld sudo systemctl enable mysqld sudo systemctl status mysqld检查状态确保服务是active (running)。获取临时 root 密码 在 MySQL 首次启动时会在日志文件中生成一个临时 root 密码。sudo grep ‘temporary password‘ /var/log/mysqld.log输出类似A temporary password is generated for rootlocalhost: JqkfT3LaQwe。请记下这个密码JqkfT3LaQwe。运行安全配置脚本 使用mysql_secure_installation脚本进行安全加固。这是一个交互式脚本。sudo mysql_secure_installation按照提示操作输入临时密码粘贴或输入刚才获取的临时密码。更改 root 密码Would you like to setup VALIDATE PASSWORD component?建议选择Y这会启用密码强度验证插件。然后设置一个强密码包含大小写字母、数字、特殊字符长度至少12位。移除匿名用户Remove anonymous users?选择Y。禁止 root 远程登录Disallow root login remotely?生产环境强烈建议选择Y。root 用户仅限本地连接更安全。远程管理请创建专用账户。移除测试数据库Remove test database and access to it?选择Y。重新加载权限表Reload privilege tables now?选择Y。至此MySQL 服务器已经安装并完成了基本的安全加固。6. 步骤四基础配置与远程连接可选但重要默认配置可能不适合你的应用。我们需要调整一些核心参数并配置远程访问如果需要。6.1 调整 MySQL 配置文件 (my.cnf)MySQL 的主配置文件通常是/etc/my.cnf或/etc/mysql/my.cnf并会包含/etc/my.cnf.d/目录下的文件。我们创建一个自定义配置文件。sudo vim /etc/my.cnf.d/custom.cnf添加以下基础配置你可以根据服务器硬件和应用需求调整[mysqld] # 基础设置 datadir/var/lib/mysql socket/var/lib/mysql/mysql.sock log-error/var/log/mysqld.log pid-file/var/run/mysqld/mysqld.pid # 字符集设置避免中文乱码 character-set-serverutf8mb4 collation-serverutf8mb4_unicode_ci # 连接设置 max_connections1000 # 最大连接数根据实际情况调整 connect_timeout10 wait_timeout600 interactive_timeout600 # InnoDB 设置 innodb_buffer_pool_size1G # 缓冲池大小建议设置为物理内存的 50%-70% innodb_log_file_size256M innodb_flush_log_at_trx_commit1 innodb_file_per_tableON # 二进制日志用于主从复制或时间点恢复不需要可注释掉 # server-id1 # log-binmysql-bin # binlog_formatrow [client] default-character-setutf8mb4 [mysql] default-character-setutf8mb4保存并退出。重要修改innodb_buffer_pool_size等内存相关参数时务必确保小于服务器可用内存。6.2 配置远程访问谨慎操作默认情况下MySQL 只允许本地 (localhost) 连接。如果你的应用部署在其他服务器上需要开启远程访问。在 MySQL 中创建远程访问用户不要直接使用 root 用户远程连接mysql -u root -p输入你设置的新 root 密码登录。-- 创建一个新用户例如 ‘app_user‘并允许从任何主机连接生产环境应指定IP CREATE USER ‘app_user‘‘%‘ IDENTIFIED BY ‘YourStrongPassword123!‘; -- 授予用户对所有数据库的所有权限生产环境建议按需授权 GRANT ALL PRIVILEGES ON *.* TO ‘app_user‘‘%‘ WITH GRANT OPTION; -- 或者更精细的授权例如只授权特定数据库 -- CREATE DATABASE myapp_db; -- GRANT ALL PRIVILEGES ON myapp_db.* TO ‘app_user‘‘%‘; -- 刷新权限使更改生效 FLUSH PRIVILEGES; -- 退出 EXIT;配置 Rocky Linux 防火墙 如果系统防火墙 (firewalld) 是开启的需要开放 MySQL 默认端口 3306。sudo firewall-cmd --permanent --add-servicemysql sudo firewall-cmd --reload sudo firewall-cmd --list-all | grep mysql # 确认规则已添加修改 MySQL 绑定地址如果需要 默认 MySQL 只绑定127.0.0.1。如果需要绑定到所有网络接口需修改配置文件。sudo vim /etc/my.cnf.d/custom.cnf在[mysqld]部分添加bind-address0.0.0.0安全警告bind-address0.0.0.0会让 MySQL 监听所有 IP请确保已通过防火墙和强密码进行保护。更安全的方式是绑定到特定内网 IP。重启 MySQL 服务使配置生效sudo systemctl restart mysqld sudo systemctl status mysqld # 确认重启成功7. 步骤五验证安装与基本操作现在让我们验证一切是否正常工作并进行一些基本操作。本地连接测试mysql -u root -p输入密码后应成功进入 MySQL 命令行提示符mysql。执行基本 SQL 命令-- 显示所有数据库 SHOW DATABASES; -- 创建一个测试数据库 CREATE DATABASE test_rocky10; -- 使用该数据库 USE test_rocky10; -- 创建一张表 CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, email VARCHAR(100), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- 插入一些数据 INSERT INTO users (username, email) VALUES (‘alice‘, ‘aliceexample.com‘), (‘bob‘, ‘bobexample.com‘); -- 查询数据 SELECT * FROM users; -- 退出 EXIT;远程连接测试如果配置了 从另一台机器使用 MySQL 客户端工具如mysql命令行或 HeidiSQL、DBeaver 等图形工具使用你创建的app_user和对应的 IP 地址进行连接测试。8. 常见问题与排查思路即使按照步骤操作你也可能遇到一些问题。下表列出了常见问题及解决方法问题现象可能原因排查方式解决方案sudo systemctl start mysqld失败1. 旧数据文件冲突2. 配置文件语法错误3. 权限问题4. 端口被占用sudo journalctl -xe -u mysqld查看详细错误日志。重点关注最后几行。1. 检查是否彻底清理了旧数据 (/var/lib/mysql)。2. 检查/etc/my.cnf.d/custom.cnf等配置文件语法。3. 确保/var/lib/mysql目录所有者是mysql:mysql(sudo chown -R mysql:mysql /var/lib/mysql)。4. 检查 3306 端口是否被其他进程占用 (sudo ss -tlnp | grep :3306)。忘记 root 密码安全初始化后忘记密码。-1. 停止 MySQL 服务sudo systemctl stop mysqld。2. 以跳过权限表的方式启动sudo mysqld_safe --skip-grant-tables 。3. 无密码登录mysql -u root。4. 执行FLUSH PRIVILEGES;然后ALTER USER ‘root‘‘localhost‘ IDENTIFIED BY ‘NewStrongPassword‘;。5. 退出并重启 MySQL 服务。远程客户端无法连接1. 防火墙未开放端口2. MySQL 未绑定正确地址3. 用户未授权远程访问4. 云服务器安全组未配置1.sudo firewall-cmd --list-all检查。2. MySQL 内执行SHOW VARIABLES LIKE ‘bind_address‘;。3. MySQL 内执行SELECT host, user FROM mysql.user;查看用户权限。4. 检查云服务商控制台的安全组/防火墙规则。1. 按 6.2 节配置防火墙。2. 在my.cnf中设置bind-address或注释掉该行。3. 按 6.2 节创建并授权远程用户。4. 在云控制台添加入站规则允许 TCP 3306 端口。连接数过多导致Too many connectionsmax_connections参数设置过低。MySQL 内执行SHOW VARIABLES LIKE ‘max_connections‘;SHOW STATUS LIKE ‘Threads_connected‘;1. 临时增加SET GLOBAL max_connections 2000;。2. 永久修改在my.cnf中调整max_connections并重启服务。安装时 GPG 密钥错误仓库的 GPG 密钥未正确导入或过期。错误信息通常包含GPG key retrieval failed或GPG check FAILED。手动导入密钥sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql然后重试安装。9. 生产环境最佳实践与后续建议将 MySQL 用于生产环境安装只是第一步。以下是一些至关重要的建议定期备份这是铁律。使用mysqldump进行逻辑备份或结合文件系统快照进行物理备份。制定并测试恢复流程。# 示例备份单个数据库 mysqldump -u root -p --single-transaction --routines --triggers myapp_db myapp_db_backup_$(date %Y%m%d).sql监控与日志启用慢查询日志 (slow_query_log ON)定期分析。考虑使用 Prometheus Grafana 或 Percona Monitoring and Management (PMM) 进行全方位监控。权限最小化原则永远不要给应用账户授予ALL PRIVILEGES ON *.*。按数据库、按表、按操作SELECT, INSERT, UPDATE, DELETE进行精确授权。配置优化根据服务器内存、CPU 和磁盘类型SSD/HDD精细调整my.cnf参数特别是innodb_buffer_pool_size,innodb_log_file_size,query_cache_size注意MySQL 8.0 已移除查询缓存等。考虑高可用对于关键业务研究并部署 MySQL 主从复制Replication、组复制Group Replication或使用 InnoDB Cluster以实现读写分离和故障切换。版本升级策略关注 MySQL 官方发布的生命周期和漏洞公告。在小版本升级前务必在测试环境充分验证。跨大版本升级如 8.0 到 9.7需要更详细的规划和测试。通过本文你不仅成功在 Rocky Linux 10 上部署了最新的 MySQL 9.7更理解了每一步操作背后的意义并掌握了故障排查和安全加固的基本方法。这个“稳定操作系统 现代数据库”的组合为你构建可靠的后端服务打下了坚实的基础。建议你将此文档作为基线配置保存并根据实际项目需求进行迭代和优化。