【实战指南】RedHat8环境下MySQL8的完整部署与远程访问配置

张开发
2026/4/12 23:35:16 15 分钟阅读

分享文章

【实战指南】RedHat8环境下MySQL8的完整部署与远程访问配置
1. 环境准备与安装方式选择在RedHat8上部署MySQL8之前需要先确认基础环境是否就绪。我建议使用物理机或虚拟机安装干净的RedHat8系统内存建议至少4GB磁盘空间20GB以上。这里有个小技巧如果你用虚拟机测试记得在VMware中开启虚拟化引擎选项能显著提升数据库性能。MySQL8的安装方式主要有三种YUM/DNF安装最简单快捷适合大多数场景RPM包安装需要手动解决依赖关系源码编译安装最灵活但耗时最长对于新手来说YUM安装是最稳妥的选择。我在生产环境测试过多次RedHat8自带的DNF包管理器能完美处理MySQL8的依赖关系。有个容易踩的坑是有些教程会建议添加MySQL官方源但其实RedHat8默认源里的MySQL8已经足够稳定除非你需要特定小版本否则没必要增加复杂度。2. 使用YUM安装MySQL82.1 执行安装命令先更新系统包缓存是个好习惯dnf update安装核心组件只需要一行命令dnf install mysql-server mysql-client这里有个细节很多人不知道mysql-client其实包含了常用的命令行工具比如mysqladmin和mysqldump。我在第一次安装时漏了这个包结果排查了半天为什么无法连接本地数据库。2.2 验证安装结果安装完成后检查下是否成功安装了正确版本rpm -qi mysql-server重点关注输出的Version字段应该显示8.0.x版本。我遇到过系统自动安装了MariaDB的情况这时候需要先卸载冲突的包。3. 初始配置与安全加固3.1 配置文件详解MySQL8的主要配置文件位于/etc/my.cnf.d/mysql-server.cnf建议初始配置至少包含这些参数[mysqld] datadir/var/lib/mysql socket/var/lib/mysql/mysql.sock log-error/var/log/mysql/mysqld.log pid-file/run/mysqld/mysqld.pid character-set-serverutf8mb4 collation-serverutf8mb4_unicode_ci default_authentication_pluginmysql_native_password特别提醒default_authentication_plugin这个参数在MySQL8中很关键。早期版本默认使用更安全的caching_sha2_password但很多老程序不兼容会导致连接问题。3.2 启动服务与初始化启动服务前建议先检查下SELinux状态sestatus如果SELinux是Enforcing状态需要额外配置setsebool -P mysql_connect_any 1然后启动服务systemctl start mysqld systemctl enable mysqld运行安全初始化脚本mysql_secure_installation这个交互式脚本会引导你完成设置root密码移除匿名用户禁止root远程登录删除测试数据库重载权限表建议全部选择Y是。我在某次安全审计中发现很多初级管理员会跳过删除测试数据库这步这其实是个安全隐患。4. 数据库基本操作4.1 首次登录验证使用刚设置的root密码登录mysql -u root -p成功登录后你会看到MySQL的命令行界面。这里有个实用技巧输入status命令可以查看服务器状态包括版本、运行时间等关键信息。4.2 创建测试数据库我们来创建一个测试用的数据库CREATE DATABASE testdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;注意这里显式指定了字符集和排序规则。MySQL8虽然默认就是utf8mb4但显式声明可以避免后续迁移时的兼容性问题。5. 配置远程访问5.1 创建专用远程用户永远不要直接用root账号远程连接应该创建专用账号CREATE USER remote_admin% IDENTIFIED BY StrongPassword123!; GRANT ALL PRIVILEGES ON *.* TO remote_admin% WITH GRANT OPTION; FLUSH PRIVILEGES;这里有几个安全要点密码要足够复杂限制IP范围比用%更安全生产环境应该按需授权而不是ALL PRIVILEGES5.2 防火墙配置RedHat8默认使用firewalld开放3306端口的正确姿势是firewall-cmd --permanent --add-port3306/tcp firewall-cmd --reload验证端口是否开放firewall-cmd --list-ports我曾经遇到过端口开了但依然无法连接的情况后来发现是NetworkManager的配置问题。这时候可以尝试nmcli connection modify eth0 connection.zone public6. 性能调优建议6.1 基础参数调整根据服务器配置调整my.cnf中的这些参数innodb_buffer_pool_size 4G # 建议物理内存的50-70% innodb_log_file_size 256M max_connections 2006.2 监控设置启用性能监控INSTALL COMPONENT file://component_performance_schema;然后可以定期检查SELECT * FROM performance_schema.events_statements_summary_by_digest;这个视图能帮你发现执行效率低下的SQL语句。7. 备份与恢复7.1 基础备份方案使用mysqldump进行完整备份mysqldump -u root -p --all-databases full_backup.sql对于大型数据库建议加上这些参数mysqldump -u root -p --single-transaction --routines --triggers --all-databases full_backup.sql7.2 定时备份配置创建cron任务实现自动化备份0 2 * * * /usr/bin/mysqldump -u backup_user -ppassword --all-databases | gzip /backup/mysql_$(date \%Y\%m\%d).sql.gz记得测试恢复流程我见过太多只备份不验证的案例等真正需要恢复时才发现备份文件损坏。8. 常见问题排查8.1 连接问题如果无法远程连接按这个顺序检查用户权限是否正确防火墙是否放行MySQL是否绑定到0.0.0.0检查bind-address参数网络路由是否通畅8.2 性能问题慢查询日志是个好帮手slow_query_log 1 slow_query_log_file /var/log/mysql/mysql-slow.log long_query_time 2分析慢查询日志可以用mysqldumpslow -s t /var/log/mysql/mysql-slow.log最后提醒一点MySQL8默认开启了二进制日志binlog这会占用磁盘空间。如果不需要主从复制可以在my.cnf中关闭skip-log-bin

更多文章