CentOS7虚拟机安装MySQL5.7详细教程与优化配置

发布时间:2026/10/28 6:35:51
CentOS7虚拟机安装MySQL5.7详细教程与优化配置

1. 环境准备与系统检查

在开始安装MySQL5.7之前,我们需要确保CentOS7虚拟机环境已经正确配置。我建议使用VMware Workstation 16 Pro作为虚拟化平台,分配至少2核CPU、4GB内存和20GB磁盘空间。这个配置足够运行基础的MySQL服务,同时留出余量用于学习操作。

注意:虽然1GB内存也能运行MySQL,但在执行复杂查询时容易发生OOM(内存溢出)问题。我曾在1.5GB内存的虚拟机上测试,导入200MB的SQL文件时频繁被系统kill进程。

首先验证系统版本:

cat /etc/redhat-release

正常应该显示类似"CentOS Linux release 7.9.2009 (Core)"的信息。如果是最小化安装,还需要确认基础工具链:

yum install -y wget vim net-tools

1.1 关闭SELinux和防火墙

对于学习环境,建议临时关闭安全增强功能以避免权限问题:

setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config systemctl stop firewalld systemctl disable firewalld

生产环境中不建议完全关闭这些安全机制,但学习环境下可以避免很多初学者常遇到的连接被拒绝问题。我曾在排查MySQL连接问题时花了3小时才发现是SELinux策略阻止的。

2. MySQL5.7安装过程详解

2.1 配置YUM源

MySQL官方提供了专门的YUM仓库,比EPEL源中的版本更新更稳定。这是我推荐的安装方式:

wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm rpm -ivh mysql57-community-release-el7-11.noarch.rpm

安装完成后检查仓库是否生效:

yum repolist enabled | grep "mysql.*-community.*"

应该能看到mysql-connectors-community和mysql-tools-community仓库。

2.2 执行安装

安装核心组件(这个过程大约需要5-10分钟,取决于网络速度):

yum install -y mysql-community-server

安装完成后验证版本:

mysqld --version

正常应显示"mysqld Ver 5.7.x for Linux on x86_64 (MySQL Community Server)"。

2.3 初始化数据库

首次启动前需要初始化数据目录:

systemctl start mysqld grep 'temporary password' /var/log/mysqld.log

这个临时密码非常重要,记下输出的随机密码(如:A temporary password is generated for root@localhost: Jqkf3s!aG2p%)

3. 安全配置与基础优化

3.1 修改root密码

使用临时密码登录并修改:

mysql -uroot -p ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';

MySQL5.7默认启用了密码强度验证插件,要求密码包含大小写字母、数字和特殊字符,长度至少8位。我曾尝试设置简单密码"123456"导致多次失败,这是新手常踩的坑。

3.2 运行安全向导

MySQL提供了交互式安全配置工具:

mysql_secure_installation

按提示完成以下设置:

  1. 更改root密码(如果前面已修改可跳过)
  2. 移除匿名用户
  3. 禁止root远程登录
  4. 移除测试数据库
  5. 重新加载权限表

3.3 基础性能优化

编辑MySQL配置文件:

vim /etc/my.cnf

在[mysqld]段添加以下参数(适用于1-2GB内存的虚拟机):

innodb_buffer_pool_size = 256M innodb_log_file_size = 64M max_connections = 100 query_cache_size = 32M character-set-server=utf8mb4 collation-server=utf8mb4_general_ci

重启服务使配置生效:

systemctl restart mysqld

4. 远程访问与日常管理

4.1 配置远程连接

默认情况下MySQL只允许本地连接,如需远程访问:

CREATE USER 'devuser'@'%' IDENTIFIED BY 'DevPass123!'; GRANT ALL PRIVILEGES ON *.* TO 'devuser'@'%'; FLUSH PRIVILEGES;

然后在客户端使用MySQL Workbench或Navicat连接时,需要指定:

  • 主机:虚拟机IP
  • 端口:3306
  • 用户名:devuser
  • 密码:DevPass123!

重要安全提示:在生产环境中绝对不要使用'%'通配符开放所有IP的访问权限,应该明确指定允许连接的客户端IP。

4.2 常用管理命令

服务控制:

systemctl start mysqld # 启动 systemctl stop mysqld # 停止 systemctl restart mysqld # 重启 systemctl status mysqld # 查看状态

日志查看:

tail -f /var/log/mysqld.log

4.3 备份与恢复

基础备份方法:

# 备份单个数据库 mysqldump -u root -p mydatabase > mydatabase_backup.sql # 恢复数据库 mysql -u root -p mydatabase < mydatabase_backup.sql

对于InnoDB数据库,建议使用Percona XtraBackup进行热备份,但这需要额外安装配置。

5. 常见问题排查指南

5.1 连接被拒绝问题

错误信息:"ERROR 1130 (HY000): Host '192.168.1.100' is not allowed to connect to this MySQL server"

解决方案:

  1. 检查用户权限:SELECT host,user FROM mysql.user;
  2. 确认防火墙已关闭
  3. 检查bind-address配置(/etc/my.cnf中不应有bind-address=127.0.0.1)

5.2 忘记root密码

重置步骤:

systemctl stop mysqld mysqld_safe --skip-grant-tables & mysql -u root

然后在MySQL中执行:

UPDATE mysql.user SET authentication_string=PASSWORD('MyNewPass') WHERE User='root'; FLUSH PRIVILEGES; exit

最后重启服务:

systemctl restart mysqld

5.3 中文乱码问题

确保数据库、表和连接都使用utf8mb4编码:

CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

在客户端连接时也需要指定编码:

mysql -u root -p --default-character-set=utf8mb4

6. 学习资源与进阶建议

对于想深入学习MySQL的开发者,我推荐以下路径:

  1. 基础操作熟练后,可以尝试主从复制配置:
# 在主服务器上 GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'ReplPass123!'; FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS; # 记录File和Position值 UNLOCK TABLES; # 在从服务器上 CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='repl', MASTER_PASSWORD='ReplPass123!', MASTER_LOG_FILE='记录的File值', MASTER_LOG_POS=记录的Position值; START SLAVE;
  1. 性能优化方面,建议学习EXPLAIN分析查询、索引优化和慢查询日志分析:
SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 1;
  1. 安全加固方面,可以研究MySQL企业版的安全组件,或者使用开源的Percona Server增强版。

我在实际运维中发现,很多开发者在虚拟机学习时习惯使用简单密码,这是非常危险的做法。即使是在测试环境,也应该养成使用强密码的习惯,因为很多安全漏洞都是从测试环境开始渗透的。