在 CentOS 系统上安装 MySQL,目前主要有两种主流路径:一种是使用官方提供的 YUM 仓库(推荐,适合大多数生产环境),另一种是直接下载 RPM 包手动安装(适合离线环境或特定版本需求)。
考虑到国内网络环境和稳定性,强烈建议使用第一种方式。以下是基于 CentOS 7/8 的标准操作流程,以 MySQL 8.0 为例(这是目前最通用的长期支持版本)。
核心步骤概览
- 添加 MySQL 官方 YUM 源
- 安装 MySQL Server
- 启动服务并设置开机自启
- 获取初始密码并修改 root 密码
- 配置远程访问权限(可选但常用)
详细操作指南
第一步:添加 MySQL 官方 YUM 源
不要直接用 yum install mysql-server,因为那通常会安装 MariaDB(CentOS 7 的默认替代品)或者非常老旧的版本。我们需要指向 MySQL 官方的仓库。
执行以下命令下载并安装 MySQL 8.0 的 repo 文件:
sudo wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
sudo yum localinstall mysql80-community-release-el7-3.noarch.rpm -y
注意:如果你需要安装其他版本(如 5.7),请将上述链接中的
mysql80替换为mysql57。建议通过yum repolist all | grep mysql检查当前启用的版本子库,确保mysql80是 enabled 状态。
第二步:安装 MySQL Server
源配置好后,直接运行安装命令:
sudo yum install mysql-community-server -y
这个过程可能需要几分钟,取决于你的服务器带宽和 CPU 性能。安装完成后,你会看到 “Complete!” 提示。
第三步:启动服务并设置开机自启
# 启动 MySQL 服务
sudo systemctl start mysqld
# 设置开机自启动
sudo systemctl enable mysqld
# 查看服务状态,确认是否正常运行
sudo systemctl status mysqld
如果状态显示 active (running),说明服务已正常启动。
第四步:安全初始化与修改 Root 密码
MySQL 8.0 在安装后会生成一个临时的随机密码,存储在日志文件中。你需要先找到它,然后立即修改。
1. 查找临时密码:
sudo grep 'temporary password' /var/log/mysqld.log
输出类似如下内容:
[Note] A temporary password is generated for root@localhost: abc123!XYZ
记下冒号后面的字符串(例如 abc123!XYZ)。
2. 运行安全脚本(强烈建议):
sudo mysql_secure_installation
按提示操作:
- VALIDATE PASSWORD COMPONENT: 询问是否启用密码强度验证插件。生产环境建议选
Y(1表示低,2表示中,3表示高)。 - Change the root password?: 输入
Y,然后输入你刚才找到的临时密码进行验证,接着设置一个新的、符合复杂度要求的 root 密码。 - Remove anonymous users?: 选
Y。 - Disallow root login remotely?: 选
N(如果你想允许远程连接,这里先选 N,后续再单独配置用户权限;如果只允许本地登录,选 Y)。 - Remove test database?: 选
Y。 - Reload privilege tables now?: 选
Y。
替代方案(如果不运行脚本):
你也可以直接登录 MySQL 命令行修改密码:
mysql -u root -p
# 输入临时密码进入后,执行:
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新强密码';
FLUSH PRIVILEGES;
exit;
第五步:配置远程访问(云服务器必备)
默认情况下,MySQL 只允许本地 localhost 登录。作为云服务器,你通常需要远程连接管理数据库。
1. 防火墙放行端口:
如果是阿里云、腾讯云等厂商,除了系统内部防火墙,还需要在云控制台的“安全组”中放行 3306 端口(TCP)。
在系统内部,如果使用 firewalld:
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
sudo firewall-cmd --reload
2. 创建允许远程登录的用户(推荐做法):
出于安全考虑,不建议直接给 root@'%' 授权。建议创建一个专门用于远程连接的用户。
mysql -u root -p
进入 MySQL 后执行:
-- 创建新用户,% 表示允许任意 IP 连接
CREATE USER 'your_username'@'%' IDENTIFIED BY 'your_strong_password';
-- 授予所有权限(生产环境建议最小权限原则,如仅 grant select, insert, update, delete)
GRANT ALL PRIVILEGES ON *.* TO 'your_username'@'%' WITH GRANT OPTION;
-- 刷新权限
FLUSH PRIVILEGES;
EXIT;
重要提示:MySQL 8.0 默认的认证插件是
caching_sha2_password。部分旧版客户端(如 Navicat 旧版本、某些 Java 驱动)可能不支持。如果遇到连接报错,可以将该用户的认证方式改回mysql_native_password:ALTER USER 'your_username'@'%' IDENTIFIED WITH mysql_native_password BY 'your_strong_password'; FLUSH PRIVILEGES;
常见问题排查
-
启动失败?
检查/var/log/mysqld.log,通常是因为数据目录权限问题或端口冲突。确保没有其他程序占用 3306 端口:netstat -tuln | grep 3306。 -
忘记密码怎么办?
- 停止服务:
sudo systemctl stop mysqld - 跳过权限表启动:
sudo mysqld_safe --skip-grant-tables & - 无密码登录 MySQL,然后执行
UPDATE mysql.user SET authentication_string=PASSWORD('newpassword') WHERE User='root'; - 重启服务恢复正常模式。
- 停止服务:
-
字符集乱码?
MySQL 8.0 默认字符集通常是utf8mb4,一般无需额外配置。如果发现中文乱码,检查my.cnf(通常在/etc/my.cnf或/etc/my.cnf.d/下)中的[mysqld]段,确保包含:character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci修改后重启服务。
总结
对于 CentOS 云服务器,YUM 安装 + 官方源 是最稳定、最易维护的方式。务必记得处理临时密码、防火墙/安全组以及远程用户权限这三个关键点。如果是生产环境,建议定期备份数据,并考虑使用云厂商提供的 RDS 服务以减少运维负担。
云技术博客