Rocky Linux 9 安装MySQL 8.0避坑指南:从安装到安全加固

张开发
2026/4/9 21:50:55 15 分钟阅读

分享文章

Rocky Linux 9 安装MySQL 8.0避坑指南:从安装到安全加固
Rocky Linux 9 安装MySQL 8.0避坑指南从安装到安全加固在数据库领域MySQL 8.0以其卓越的性能和丰富的功能成为众多开发者和企业的首选。然而在Rocky Linux 9这样的新兴发行版上部署MySQL时往往会遇到一些特有的挑战。本文将带你避开这些坑从基础安装到高级安全配置手把手构建一个既稳定又安全的MySQL环境。1. 环境准备与基础安装在开始安装之前确保你的Rocky Linux 9系统已经更新到最新状态sudo dnf update -y sudo dnf upgrade -yMySQL 8.0在Rocky Linux 9的默认仓库中已经可用安装过程非常简单sudo dnf install mysql-server -y注意如果你之前安装过MariaDB或其他MySQL分支建议先彻底移除相关软件包避免潜在的冲突sudo dnf remove mariadb* -y sudo rm -rf /var/lib/mysql/安装完成后启动MySQL服务并设置为开机自启sudo systemctl enable --now mysqld提示如果在启动过程中遇到问题可以通过journalctl -xe命令查看详细的系统日志这往往是排查问题的第一步。2. 关键配置优化MySQL的默认配置通常需要根据服务器硬件和应用需求进行调整。以下是几个关键参数的优化建议参数默认值推荐值说明innodb_buffer_pool_size128M物理内存的50-70%InnoDB缓冲池大小max_connections151根据应用需求调整最大连接数innodb_log_file_size48M1-2G重做日志文件大小tmp_table_size16M64-256M临时表大小max_allowed_packet64M根据应用需求调整最大数据包大小编辑配置文件/etc/my.cnf添加以下优化参数[mysqld] # 字符集设置 character-set-server utf8mb4 collation-server utf8mb4_0900_ai_ci # 性能优化 innodb_buffer_pool_size 2G innodb_log_file_size 1G innodb_flush_log_at_trx_commit 2 innodb_read_io_threads 8 innodb_write_io_threads 8 # 连接设置 max_connections 300 wait_timeout 600 interactive_timeout 600修改配置后需要重启MySQL服务使更改生效sudo systemctl restart mysqld3. 安全加固实战MySQL安装后的初始状态存在多个安全隐患必须进行加固。mysql_secure_installation是一个便捷的工具但我们需要更全面的安全措施。3.1 基础安全设置首先运行安全安装脚本sudo mysql_secure_installation过程中会提示你设置root密码移除匿名用户禁止root远程登录移除测试数据库重新加载权限表重要提示如果你在脚本执行过程中遇到[ERROR] unknown variable default-character-setutf8mb4错误这是因为MySQL 8.0不再支持该参数只需从配置文件中移除即可。3.2 进阶安全措施除了基础安全设置外还需要手动执行以下命令-- 创建专用管理账户 CREATE USER adminlocalhost IDENTIFIED BY 复杂密码; GRANT ALL PRIVILEGES ON *.* TO adminlocalhost WITH GRANT OPTION; -- 限制用户连接频率 ALTER USER adminlocalhost WITH MAX_QUERIES_PER_HOUR 1000 MAX_UPDATES_PER_HOUR 100 MAX_CONNECTIONS_PER_HOUR 100; -- 启用密码过期策略 ALTER USER adminlocalhost PASSWORD EXPIRE INTERVAL 90 DAY; -- 安装密码验证组件 INSTALL COMPONENT file://component_validate_password; SET GLOBAL validate_password.policy STRONG;3.3 防火墙配置确保防火墙仅允许必要的IP访问MySQL端口sudo firewall-cmd --permanent --add-rich-rulerule familyipv4 source address允许的IP port protocoltcp port3306 accept sudo firewall-cmd --reload4. 常见问题解决方案4.1 初始化密码问题MySQL 8.0在初始化时会生成一个临时root密码存储在日志文件中sudo grep temporary password /var/log/mysqld.log如果找不到密码可以尝试以下重置方法sudo systemctl stop mysqld sudo mysqld --skip-grant-tables --skip-networking mysql -u root在MySQL客户端中执行FLUSH PRIVILEGES; ALTER USER rootlocalhost IDENTIFIED BY 新密码; exit;然后重启MySQL服务sudo killall mysqld sudo systemctl start mysqld4.2 性能调优建议对于高负载环境可以考虑以下额外优化连接池管理使用ProxySQL或MySQL Router管理连接查询缓存MySQL 8.0已移除查询缓存考虑使用应用层缓存监控设置启用performance_schema收集性能数据-- 启用性能监控 UPDATE performance_schema.setup_instruments SET ENABLED YES, TIMED YES; UPDATE performance_schema.setup_consumers SET ENABLED YES;4.3 备份策略建立可靠的备份机制至关重要。以下是使用mysqldump的自动化备份示例#!/bin/bash DATE$(date %Y%m%d) BACKUP_DIR/backups/mysql mkdir -p $BACKUP_DIR mysqldump --single-transaction --routines --triggers --all-databases | gzip $BACKUP_DIR/full_backup_$DATE.sql.gz find $BACKUP_DIR -type f -mtime 30 -delete将上述脚本加入cron实现每日自动备份0 2 * * * /path/to/backup_script.sh5. 日常维护与监控5.1 关键指标监控定期检查以下MySQL状态变量SHOW GLOBAL STATUS LIKE Threads_connected; SHOW GLOBAL STATUS LIKE Innodb_row_lock%; SHOW GLOBAL STATUS LIKE Slow_queries; SHOW GLOBAL STATUS LIKE Aborted_connects;5.2 日志分析配置确保正确配置了错误日志和慢查询日志[mysqld] log_error /var/log/mysql/mysql-error.log slow_query_log 1 slow_query_log_file /var/log/mysql/mysql-slow.log long_query_time 2 log_queries_not_using_indexes 1使用pt-query-digest工具分析慢查询日志sudo dnf install percona-toolkit -y pt-query-digest /var/log/mysql/mysql-slow.log5.3 定期维护任务设置以下定期维护任务每周优化碎片化严重的表每月检查并修复可能损坏的表每季度审查用户权限-- 优化特定表 OPTIMIZE TABLE 表名; -- 检查所有表状态 CHECK TABLE 表名; -- 修复损坏的表 REPAIR TABLE 表名;

更多文章