ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Rocky Linux 10安装MySQL 9.7全攻略:从零配置到安全优化

Rocky Linux 10安装MySQL 9.7全攻略:从零配置到安全优化 最近在部署新的服务器环境时选择了Rocky Linux 10作为操作系统并需要安装最新的MySQL 9.7版本。过程中发现虽然MySQL 8.0的教程很多但针对Rocky Linux 10和MySQL 9.7的完整中文指南却比较零散尤其是在配置优化和安全加固方面。本文将为你提供一份从零开始的详细安装与配置教程涵盖从系统准备、软件安装、安全初始化到远程连接和基础优化的全流程。无论你是运维工程师还是后端开发者都能按照步骤成功搭建一个稳定、安全的MySQL数据库服务。1. 环境准备与系统检查在开始安装MySQL之前确保你的Rocky Linux 10系统已经准备就绪。一个干净、稳定的基础环境是后续步骤顺利进行的保障。1.1 系统更新与依赖检查首先我们需要将系统更新到最新状态并安装一些必要的工具。通过SSH连接到你的Rocky Linux 10服务器执行以下命令# 1. 更新系统所有包到最新版本 sudo dnf update -y # 2. 安装常用的工具如wget、vim、net-tools等 sudo dnf install -y wget vim net-tools bash-completion # 3. 检查系统版本确认是Rocky Linux 10 cat /etc/redhat-release执行cat /etc/redhat-release后你应该看到类似Rocky Linux release 10.x (Blue Onyx)的输出。这一步很重要因为不同大版本的系统其软件仓库和依赖库可能不同。1.2 关闭SELinux与防火墙临时用于测试环境对于学习和测试环境为了避免SELinux和防火墙带来的额外配置复杂度我们可以暂时将其关闭。请注意在生产环境中你需要根据安全策略仔细配置防火墙规则和SELinux而不是直接关闭。# 1. 临时关闭SELinux重启后失效 sudo setenforce 0 # 2. 永久关闭SELinux需要重启系统 # 编辑SELinux配置文件 sudo vim /etc/selinux/config # 将 SELINUXenforcing 修改为 SELINUXdisabled # 保存并退出 # 3. 停止并禁用防火墙firewalld sudo systemctl stop firewalld sudo systemctl disable firewalld # 4. 检查防火墙状态应为 inactive (dead) sudo systemctl status firewalld重要提醒在生产服务器上请务必配置精确的防火墙规则只开放必要的端口如MySQL的3306端口给特定IP并保持SELinux在 enforcing 模式下的适当策略。1.3 添加MySQL官方存储库Rocky Linux 10的默认AppStream仓库可能不包含最新的MySQL 9.7。为了获得官方支持、自动更新和最新的功能我们需要添加MySQL的官方YUM存储库。访问MySQL官方社区版下载页面找到YUM Repository的RPM包链接。或者直接使用wget下载。执行以下命令# 下载MySQL 9.7的YUM仓库安装包 # 请注意具体的RPM包链接可能会随版本更新而变化请以官网为准。 # 这里以目前常见的el9版本为例Rocky Linux 10兼容RHEL 9的包 sudo wget https://dev.mysql.com/get/mysql80-community-release-el9-7.noarch.rpm # 安装下载的仓库包 sudo dnf install -y mysql80-community-release-el9-7.noarch.rpm # 检查是否添加成功会列出所有启用的MySQL仓库 sudo dnf repolist enabled | grep mysql安装成功后你会看到名为mysql-9.7-community的仓库被启用。如果默认启用的不是9.7版本你可能需要运行sudo dnf config-manager --disable mysql80-community和sudo dnf config-manager --enable mysql97-community来切换。2. 安装MySQL 9.7服务器存储库配置好后安装过程就变得非常简单。2.1 执行安装命令使用DNF包管理器一键安装MySQL服务器社区版及其客户端# 安装MySQL服务器和客户端 sudo dnf install -y mysql-community-server mysql-community-client # 安装常用的MySQL工具和兼容库可选但推荐 sudo dnf install -y mysql-community-common mysql-community-libs安装过程会自动处理所有依赖关系。mysql-community-server是核心数据库服务mysql-community-client包含了mysql命令行工具。2.2 启动MySQL服务并设置开机自启安装完成后需要启动服务并确保它在系统重启后能自动运行。# 启动MySQL服务 sudo systemctl start mysqld # 设置MySQL服务开机自启 sudo systemctl enable mysqld # 检查MySQL服务运行状态 sudo systemctl status mysqld运行sudo systemctl status mysqld后如果看到active (running)的字样并且下面没有红色的错误日志说明MySQL服务已经成功启动。3. 安全初始化与密码配置MySQL 9.7在首次启动后会为root用户生成一个临时的随机密码。我们必须找到这个密码并运行安全脚本来进行初始化设置。3.1 获取临时root密码临时密码记录在MySQL的日志文件中。# 查看MySQL的错误日志其中包含了初始密码 sudo grep ‘temporary password’ /var/log/mysqld.log命令输出会类似于2024-05-XXTXX:XX:XX.XXXXXXZ 6 [Note] [MY-010454] [Server] A temporary password is generated for rootlocalhost: JqkfT2sa!eG请务必记下rootlocalhost:后面的字符串JqkfT2sa!eG这就是你的临时密码。3.2 运行安全配置向导使用mysql_secure_installation脚本是加固MySQL安装安全性的标准步骤。它会引导你完成以下操作设置新的root密码。移除匿名用户。禁止root用户远程登录可选但建议。移除测试数据库。重新加载权限表。# 运行安全初始化脚本 sudo mysql_secure_installation按照提示进行操作输入刚才找到的临时密码。系统会询问你是否要更改root密码。输入y并设置一个强密码。MySQL 9.7默认有密码强度策略密码需包含大小写字母、数字和特殊字符长度至少8位。移除匿名用户输入y。禁止root账户远程登录输入y。这是关键的安全实践root权限应仅限于本地连接。远程管理请使用具有特定权限的普通用户。删除测试数据库test输入y。立即重新加载权限表输入y。完成以上步骤后你的MySQL安装就基本安全了。3.3 验证安装与登录现在使用你刚设置的新root密码登录MySQL验证安装是否成功。# 使用root用户和密码登录MySQL命令行 mysql -u root -p输入密码后你将看到MySQL的命令行提示符mysql。执行一些简单命令测试-- 显示当前MySQL版本 SELECT VERSION(); -- 显示所有数据库 SHOW DATABASES; -- 退出MySQL命令行 EXIT;如果SELECT VERSION();返回9.7.x之类的版本号恭喜你MySQL 9.7已经成功安装并运行。4. 基础配置与优化默认的MySQL配置可能不适合你的服务器硬件和应用需求。我们需要进行一些基础调整。4.1 配置MySQL服务器my.cnfMySQL的主配置文件通常是/etc/my.cnf或/etc/mysql/my.cnf。在Rocky Linux上我们编辑/etc/my.cnf。# 备份原始配置文件 sudo cp /etc/my.cnf /etc/my.cnf.bak # 使用vim编辑配置文件 sudo vim /etc/my.cnf在[mysqld]部分添加或修改以下关键参数。请根据你的服务器内存大小进行调整以下配置假设服务器内存为4GB[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_timeout28800 # 非交互式连接超时时间 interactive_timeout28800 # 交互式连接超时时间 # 内存与缓存设置针对4GB内存的示例 innodb_buffer_pool_size1G # InnoDB缓冲池大小通常是物理内存的50%-70% key_buffer_size256M # MyISAM键缓冲区大小 query_cache_size0 # MySQL 8.0已移除查询缓存9.7应设置为0或忽略 tmp_table_size64M max_heap_table_size64M # InnoDB存储引擎设置 innodb_log_file_size256M # 重做日志文件大小 innodb_flush_log_at_trx_commit1 # 事务提交时刷写日志1为最安全2性能更好但可能丢1秒数据 innodb_lock_wait_timeout50 # 锁等待超时时间 # 二进制日志用于主从复制或时间点恢复按需开启 # server-id1 # log-binmysql-bin # binlog_formatROW # 慢查询日志用于性能分析 slow_query_log1 slow_query_log_file/var/log/mysql-slow.log long_query_time2 # 超过2秒的查询被记录保存并退出编辑器后必须重启MySQL服务使配置生效sudo systemctl restart mysqld sudo systemctl status mysqld # 确认重启成功4.2 创建用于远程连接的管理用户出于安全考虑我们不应该直接用root用户进行远程连接。最佳实践是创建一个具有所需权限的专用用户。使用root用户登录MySQLmysql -u root -p执行以下SQL语句创建一个新用户并授权。将‘your_strong_password’替换为强密码将‘your_remote_ip’替换为允许连接的服务器的IP地址或者使用‘%’允许任何IP连接不推荐仅用于测试。-- 创建一个新用户例如 ‘admin’‘your_remote_ip’ CREATE USER ‘admin’‘your_remote_ip’ IDENTIFIED BY ‘your_strong_password’; -- 授予该用户对所有数据库的所有权限相当于远程的root生产环境请按需授权 GRANT ALL PRIVILEGES ON *.* TO ‘admin’‘your_remote_ip’ WITH GRANT OPTION; -- 或者授予更细粒度的权限例如对特定数据库‘mydb’的所有权限 -- GRANT ALL PRIVILEGES ON mydb.* TO ‘app_user’‘%’; -- 刷新权限使授权立即生效 FLUSH PRIVILEGES; -- 查看用户权限 SELECT host, user FROM mysql.user;退出MySQL命令行EXIT;5. 配置防火墙开放MySQL端口如果你在生产环境中没有禁用防火墙firewalld那么需要开放MySQL的默认端口3306以便远程客户端能够连接。# 启动防火墙如果之前停止了 sudo systemctl start firewalld sudo systemctl enable firewalld # 永久开放3306端口 sudo firewall-cmd --zonepublic --add-port3306/tcp --permanent # 重新加载防火墙配置 sudo firewall-cmd --reload # 查看已开放的端口确认3306在列表中 sudo firewall-cmd --zonepublic --list-ports6. 常见问题与故障排查即使按照步骤操作你也可能会遇到一些问题。下面是一些常见问题的解决方法。6.1 安装失败公钥检查错误问题现象执行sudo dnf install mysql-community-server时出现GPG key retrieval failed或Signature verification failed错误。原因未导入或无法验证MySQL仓库的GPG密钥。解决方案# 手动导入MySQL的GPG密钥 sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023 # 再次尝试安装 sudo dnf install -y mysql-community-server6.2 启动失败权限问题问题现象sudo systemctl status mysqld显示失败日志/var/log/mysqld.log中有Permission denied或Cannot create directory错误。原因/var/lib/mysql数据目录的权限不正确。解决方案# 停止MySQL服务 sudo systemctl stop mysqld # 确保数据目录的属主和属组是mysql:mysql sudo chown -R mysql:mysql /var/lib/mysql # 重新启动服务 sudo systemctl start mysqld6.3 远程客户端无法连接问题现象从另一台机器使用mysql -h server_ip -u admin -p连接时提示Host ‘xxx.xxx.xxx.xxx’ is not allowed to connect to this MySQL server。原因用户授权的主机部分不正确例如创建用户时用了‘admin’‘localhost’。服务器防火墙未开放3306端口。MySQL配置文件中bind-address绑定了127.0.0.1只监听本地。排查步骤检查用户权限在服务器上登录MySQL执行SELECT host, user FROM mysql.user;确认你的用户如admin对应的host是‘%’或你的客户端IP。检查防火墙在服务器上执行sudo firewall-cmd --list-ports确认3306端口已开放。检查绑定地址查看/etc/my.cnf确认没有bind-address 127.0.0.1这一行或者将其改为bind-address 0.0.0.0监听所有接口。修改后需重启MySQL。网络测试在客户端使用telnet server_ip 3306测试端口连通性。如果不通说明是网络或防火墙问题。6.4 忘记root密码问题现象无法用root密码登录MySQL。解决方案使用--skip-grant-tables模式启动MySQL然后修改密码。# 1. 停止MySQL服务 sudo systemctl stop mysqld # 2. 以跳过权限表的方式启动MySQL安全模式 sudo mysqld_safe --skip-grant-tables --skip-networking # 3. 无密码登录MySQL mysql -u root # 4. 在MySQL命令行中刷新权限并修改密码MySQL 9.7 mysql FLUSH PRIVILEGES; mysql ALTER USER ‘root’‘localhost’ IDENTIFIED BY ‘YourNewStrongPassword!’; mysql EXIT; # 5. 关闭安全模式的MySQL进程然后正常启动服务 # 首先找到mysqld_safe进程ID并kill掉或者重启服务器。 # 更简单的方法是直接重启服务器或者 sudo pkill mysqld_safe sudo pkill mysqld sudo systemctl start mysqld7. 生产环境最佳实践与进阶建议将MySQL用于生产环境时除了基本安装还需要考虑高可用、备份、监控和安全。7.1 安全加固定期更换密码为所有数据库用户设置强密码策略并定期更换。最小权限原则为每个应用程序创建独立的数据库用户并只授予其操作特定数据库所需的最小权限SELECT, INSERT, UPDATE, DELETE避免使用ALL PRIVILEGES。禁用LOCAL INFILE在/etc/my.cnf的[mysqld]部分添加local-infile0防止通过LOAD DATA LOCAL INFILE读取客户端文件。启用SSL连接如果客户端与服务器不在同一可信网络应配置SSL加密数据传输。审计日志考虑启用MySQL企业版审计插件或使用第三方审计工具记录所有数据库活动。7.2 备份与恢复策略物理备份使用mysqlbackup企业版或Percona XtraBackup开源进行在线热备份对大型数据库效率高。逻辑备份使用mysqldump进行逻辑备份适合中小型数据库和数据迁移。# 全库备份 mysqldump -u root -p --all-databases --single-transaction --routines --events full_backup_$(date %Y%m%d).sql # 单库备份 mysqldump -u root -p mydatabase mydatabase_backup.sql定时任务使用crontab设置定时备份任务并将备份文件传输到远程存储或对象存储。定期恢复测试定期从备份文件中执行恢复测试确保备份有效。7.3 性能监控与优化监控工具部署如PrometheusGrafanamysqld_exporter监控栈可视化监控MySQL的QPS、连接数、慢查询、缓冲池命中率等关键指标。慢查询分析定期分析/var/log/mysql-slow.log使用mysqldumpslow或pt-query-digest工具找出性能瓶颈SQL并进行优化如添加索引、重写查询。配置调优根据服务器硬件CPU、内存、磁盘类型和工作负载读多写少、写多读少、OLTP、OLAP持续调整my.cnf中的参数特别是innodb_buffer_pool_size、innodb_log_file_size、innodb_flush_method等。7.4 高可用考虑对于关键业务单点MySQL实例存在风险。可以考虑以下架构主从复制搭建一个或多个只读从库分担读负载并作为主库的备份。组复制使用MySQL Group Replication提供内置的高可用和自动故障转移。中间件分片对于超大规模数据考虑使用MyCat、ProxySQL或Vitess等进行分库分表。至此你已经成功在Rocky Linux 10上完成了MySQL 9.7的安装、基础配置、安全加固和远程访问设置。这套流程涵盖了从零搭建一个可用数据库服务的主要环节。数据库管理是一个持续的过程建议你结合具体的应用场景深入学习和实践备份恢复、性能优化和高可用架构以构建更健壮的数据服务。如果在实践中遇到其他问题多查看/var/log/mysqld.log官方文档和社区讨论大部分问题都能找到解决方案。
返回列表