努力
加油

CentOS或Ubuntu系统云服务器安装MySQL的完整步骤是什么?

在云服务器上部署 MySQL,虽然看似简单,但不同发行版(CentOS 和 Ubuntu)的包管理器和默认配置差异很大。很多新手直接 yum install 或 apt-get install 后遇到连接不上、版本不对或者安全组没开的问题。

下面我分别梳理 CentOS 7/8+ 和 Ubuntu 18.04/20.04/22.04 LTS 上的标准生产环境安装步骤。这里以目前主流的 MySQL 8.0 为例,因为它是当前各大云厂商推荐的主流版本。


一、 CentOS 系统安装 MySQL 8.0

CentOS 7 默认源里是 MySQL 5.7,而 CentOS 8 及以后版本默认源中移除了 MySQL(被 MariaDB 取代),所以必须使用官方提供的 YUM 仓库。

1. 清理旧环境(可选但推荐)

如果你之前装过 MySQL 或 MariaDB,建议先清理干净,避免冲突:

sudo yum remove mysql mysql-server mysql-libs mariadb mariadb-server -y
sudo rm -rf /var/lib/mysql
sudo rm -rf /etc/my.cnf

2. 添加 MySQL 官方 YUM 源

下载 MySQL 8.0 的 repo 文件并安装:

# 下载 repo 文件
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

# 安装 repo 文件
sudo yum localinstall mysql80-community-release-el7-3.noarch.rpm -y

# 确认是否安装成功
yum repolist enabled | grep "mysql.*-community.*"

3. 安装 MySQL Server

sudo yum install mysql-community-server -y

注意:如果提示 GPG key 问题,可能需要先导入公钥,但通常 repo 文件里已经处理好了。

4. 启动服务并设置开机自启

sudo systemctl start mysqld
sudo systemctl enable mysqld
sudo systemctl status mysqld

5. 获取临时密码并修改 root 密码

MySQL 8.0 安装后会生成一个临时密码,记录在日志文件中:

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

你会看到类似 A temporary password is generated for root@localhost: xxxxxx 的输出。

登录并修改密码:

mysql -u root -p
# 输入上面的临时密码

进入 MySQL 命令行后,执行以下 SQL 修改密码(MySQL 8.0 强制要求强密码策略):

ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新强密码';
FLUSH PRIVILEGES;
exit;

提示:密码必须包含大小写字母、数字和特殊字符,长度至少 8 位。

6. 允许远程连接(关键步骤)

默认情况下,MySQL 只允许 localhost 连接。要允许外部 IP(包括你的本地电脑或 ECS 控制台)连接,需要创建新用户或修改 root 权限:

-- 创建允许任意 IP 访问的用户(推荐做法,不要直接改 root 的 host)
CREATE USER 'admin'@'%' IDENTIFIED BY 'AdminPassword123!';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit;

7. 防火墙与安全组配置

这是最容易踩坑的地方!

  1. 服务器内部防火墙 (firewalld):

    sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
    sudo firewall-cmd --reload
  2. 云厂商安全组(阿里云/腾讯云/AWS等):
    登录你的云控制台,找到该实例的安全组规则,入方向放行 TCP 协议的 3306 端口。如果不做这一步,即使 MySQL 配好了也连不上。


二、 Ubuntu 系统安装 MySQL 8.0

Ubuntu 的 APT 包管理器对 MySQL 的支持非常友好,流程相对简洁。

1. 更新软件包索引

sudo apt update
sudo apt upgrade -y

2. 安装 MySQL Server

sudo apt install mysql-server -y

注意:Ubuntu 20.04+ 默认安装的也是 MySQL 8.0。

3. 启动并检查服务

sudo systemctl start mysql
sudo systemctl enable mysql
sudo systemctl status mysql

4. 运行安全脚本

Ubuntu 安装后通常会提示运行 mysql_secure_installation 来加固安全:

sudo mysql_secure_installation

按照提示操作:

  • 启用 VALIDATE PASSWORD COMPONENT(密码强度验证插件):选 Y。
  • 移除匿名用户:选 Y。
  • 禁止 root 远程登录?:这里要注意。如果你希望远程连接,选 N(No)。但为了安全,更推荐的做法是保留“禁止 root 远程登录”,然后创建一个专门用于远程连接的非 root 用户(见下文)。
  • 移除 test 数据库:选 Y。
  • 重新加载权限表:选 Y。

5. 配置远程访问

方法 A:修改配置文件(不推荐用于生产环境高安全场景)
编辑 /etc/mysql/mysql.conf.d/mysqld.cnf,找到 bind-address = 127.0.0.1,将其改为 bind-address = 0.0.0.0,然后重启 MySQL。

方法 B:创建专用远程用户(推荐,更安全)

sudo mysql

进入命令行后:

-- 查看现有用户
SELECT user, host FROM mysql.user;

-- 创建一个允许从任何主机连接的用户
CREATE USER 'remote_user'@'%' IDENTIFIED BY 'YourStrongPassword123!';

-- 授权
GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%' WITH GRANT OPTION;

-- 刷新权限
FLUSH PRIVILEGES;
exit;

注意:如果使用 Ubuntu 22.04 及以上版本,默认认证插件可能是 auth_socket,这会导致通过密码无法远程登录。确保创建用户时指定了密码认证方式,或者在创建时使用:

CREATE USER 'remote_user'@'%' IDENTIFIED WITH mysql_native_password BY 'YourStrongPassword123!';

6. 防火墙配置

Ubuntu 默认可能安装了 ufw 防火墙:

sudo ufw allow 3306/tcp
sudo ufw reload

同样,别忘了去云厂商控制台的安全组中放行 3306 端口。


三、 常见问题与避坑指南

  1. 连接报错 Host 'xxx' is not allowed to connect to this MySQL server

    • 原因:MySQL 内部权限未开放,或者云安全组未放行。
    • 解决:检查上述“允许远程连接”步骤,并确保云控制台安全组已配置。
  2. 连接报错 Authentication plugin 'caching_sha2_password' cannot be loaded

    • 原因:客户端(如 Navicat、老旧 JDBC 驱动)不支持 MySQL 8.0 默认的 caching_sha2_password 认证插件。
    • 解决:将用户认证方式改回旧的 mysql_native_password:
      ALTER USER 'username'@'host' IDENTIFIED WITH mysql_native_password BY 'password';
      FLUSH PRIVILEGES;
  3. 内存不足导致 MySQL 启动失败

    • 云服务器如果配置较低(如 1G 或 2G 内存),MySQL 默认配置可能占用过多内存。
    • 解决:调整 /etc/my.cnf (CentOS) 或 /etc/mysql/mysql.conf.d/mysqld.cnf (Ubuntu),减小 innodb_buffer_pool_size(例如设为 128M 或 256M),并适当增加 swap 分区。
  4. 数据目录权限问题

    • 如果手动移动过数据目录,务必确保 chown -R mysql:mysql /var/lib/mysql,否则 MySQL 无法启动。

总结

  • CentOS:重点在于添加官方 YUM 源,处理临时密码,以及注意 firewalld 和安全组的双重限制。
  • Ubuntu:重点在于 apt 一键安装后的安全脚本配置,以及处理 auth_socket 和 caching_sha2_password 带来的兼容性问题。

无论哪种系统,云安全组放行 3306 端口 都是最容易被忽略却最关键的一步。建议在完成所有软件配置后,使用 telnet <公网IP> 3306 或 nc -zv <公网IP> 3306 测试端口连通性,再使用客户端工具连接。