云服务器上安装 MySQL 的推荐方式
在主流云服务器(如阿里云、腾讯云、AWS EC2)的 Linux 系统上,
apt(Ubuntu/Debian)或
yum/
dnf(CentOS/RHEL/Rocky)是最稳妥的安装途径。直接下载二进制包或源码编译不仅耗时,还容易因依赖缺失或 SELinux/AppArmor 策略导致
mysqld启动失败。
以 Ubuntu 22.04 为例:
sudo apt update sudo apt install mysql-server
安装完成后,
mysqld通常已自动启用并运行。可通过
sudo systemctl status mysql验证。注意:该方式安装的是 Oracle 官方维护的
mysql-server包(非 MariaDB),版本一般为 8.0.x,兼容性好、安全更新及时。
首次配置必须执行 mysql_secure_installation
云服务器默认开放公网端口风险极高,而新装 MySQL 的 root 用户默认仅允许本地 socket 登录,且无密码。不运行
mysql_secure_installation就等于留着后门。 它会强制设置 root 密码(建议用强密码,避免与云平台登录密码重复) 删除匿名用户:
Remove anonymous users? [Y/n]→ 必选
Y禁止 root 远程登录:
Disallow root login remotely? [Y/n]→ 选
Y(后续如需远程管理,应新建专用账号并限制 IP) 删除 test 数据库及权限:
Remove test database and access to it? [Y/n]→ 选
Y重载权限表:
Reload privilege tables now? [Y/n]→ 选
Y
执行后,root 只能通过
sudo mysql -u root -p本地登录,这是云环境最基本的安全基线。
修改绑定地址前先确认防火墙和安全组
MySQL 默认监听
127.0.0.1:3306,若需从其他机器连接(比如本地开发机连云数据库),需改
bind-address。但直接改成
0.0.0.0并不安全,且常被忽略两个关键层: 云平台安全组:必须手动放行 TCP 3306 端口,并严格限制源 IP(例如只允你办公室公网 IP 或跳板机 IP) 系统防火墙:Ubuntu 默认用
ufw,需执行
sudo ufw allow from 203.0.113.42 to any port 3306(替换为你自己的 IP);CentOS 用
firewalld,命令为
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.42" port port="3306" protocol="tcp" accept'配置文件位置:
/etc/mysql/mysql.conf.d/mysqld.cnf(Ubuntu)或
/etc/my.cnf(CentOS),修改
bind-address = 0.0.0.0后必须重启:
sudo systemctl restart mysql
没配安全组就改 bind-address,服务起得来也连不上;配了安全组却没开系统防火墙,同样连不通——这两层漏一不可。
创建远程访问账号时别用 root,也别给 %
全通权限
应用连接数据库应使用独立账号,而非 root。错误做法:
CREATE USER 'app'@'%' IDENTIFIED BY 'pwd'; GRANT ALL ON *.* TO 'app'@'%';—— 这等于把整台云服务器的数据库权限暴露给任意 IP。
正确做法是精确限定:
CREATE USER 'app'@'203.0.113.42' IDENTIFIED BY 'strong_password_here'; GRANT SELECT, INSERT, UPDATE ON myapp_db.* TO 'app'@'203.0.113.42'; FLUSH PRIVILEGES;
说明:
'app'@'203.0.113.42'中的 IP 必须与你应用服务器的真实出口 IP 一致(不是内网 IP) 权限按最小必要原则授予,
ALL和
*.*在生产环境禁止出现 MySQL 8.0+ 默认认证插件是
caching_sha2_password,某些旧客户端不兼容,如遇连接失败,可显式指定:
ALTER USER 'app'@'203.0.113.42' IDENTIFIED WITH mysql_native_password BY 'strong_password_here';
云服务器上的 MySQL 不是本地玩具,每个账号、每条授权、每个端口开放,都必须有明确来源和用途。疏忽一处,就可能成为横向渗透的起点。
