一聚教程网:一个值得你收藏的教程网站

热门教程

如何在云服务器上安全安装MySQL?

时间:2026-08-12 09:52:48 编辑:袖梨 来源:一聚教程网

不推荐用 apt-get install mysql-server——它在Ubuntu/Debian上实际安装MariaDB,非Oracle最新MySQL,导致认证插件、JSON函数、密码策略等行为不一致;必须通过最新APT/YUM源安装mysql-community-server。

直接说结论:云服务器上安装 MySQL,不推荐用 apt-get install mysql-server 这类系统默认源——它装的是 MariaDB 或老旧版本,和最新 MySQL 行为不一致,后续权限、密码策略、JSON 函数支持都会出问题。

为什么不能直接 apt install mysql-server?

Ubuntu/Debian 的 apt install mysql-server 实际安装的是 mariadb-server,不是 Oracle 最新 MySQL。CentOS 7/8 默认仓库也早已移除 MySQL,只留 MariaDB。两者在以下地方表现不同:

  1. mysql_secure_installation 脚本行为差异大(MariaDB 不强制密码强度校验)
  2. MySQL 8.0+ 默认启用 caching_sha2_password 认证插件,MariaDB 用的是 unix_socketmysql_native_password
  3. JSON 函数、角色管理、CREATE USER ... IDENTIFIED WITH 语法在 MariaDB 中要么缺失要么语义不同

必须用最新 YUM/APT 仓库安装

以 Ubuntu 22.04/24.04 或 CentOS Stream 9 为例,正确安装步骤是:

  1. 先卸载残留:sudo apt remove --purge mysql-server mariadb-server(Ubuntu)或 sudo dnf remove mysql-community-server(RHEL系)
  2. 下载并安装最新仓库包:wget https://dev.mysql.com/get/mysql80-community-release-$(lsb_release -sc)-1.noarch.rpm,然后 sudo rpm -ivh mysql80-community-release-*.rpm(CentOS/RHEL);Ubuntu 则用 sudo dpkg -i mysql80-community-release-*.deb
  3. 确认仓库启用:sudo yum repolist enabled | grep mysqlapt-cache policy mysql-community-server
  4. 安装服务:sudo yum install mysql-community-server(CentOS)或 sudo apt install mysql-community-server(Ubuntu)

安装后第一件事:改 root 密码并禁用匿名访问

MySQL 8.0+ 启动后会生成临时密码,藏在 /var/log/mysqld.log 里,用 sudo grep 'temporary password' /var/log/mysqld.log 找到。但别急着用这个密码连——先执行 mysql_secure_installation,它会强制你:

  1. 重设 root@localhost 密码(必须满足策略:长度 ≥8、含大小写字母+数字+特殊字符)
  2. 删除匿名用户:DELETE FROM mysql.user WHERE User='';
  3. 禁止远程 root 登录(保留 root@localhost 即可)
  4. 删除 test 数据库及其访问权限

这步跳过等于裸奔。很多“连不上 MySQL”问题,根源就是没跑 mysql_secure_installation,导致 root 只能从 localhost 用 socket 连,且密码为空或过期。

防火墙和 bind-address 是两个高频翻车点

云服务器默认不开 3306 端口,且 MySQL 默认只监听 127.0.0.1。想让外部应用连接,必须同时做两件事:

  1. 修改 /etc/my.cnf(或 /etc/mysql/mysql.conf.d/mysqld.cnf),把 bind-address = 127.0.0.1 改成 bind-address = 0.0.0.0 或具体内网 IP(如 172.16.0.5
  2. 开放端口:sudo ufw allow 3306(Ubuntu)或 sudo firewall-cmd --permanent --add-port=3306/tcp(CentOS)
  3. 重启服务:sudo systemctl restart mysqld

注意:改完 bind-address 后,必须给远程用户显式授权,比如 CREATE USER 'app'@'192.168.1.%' IDENTIFIED BY 'StrongPass!2026'; GRANT SELECT,INSERT ON mydb.* TO 'app'@'192.168.1.%'; —— 直接用 root@'%' 是严重安全隐患。

热门栏目