mysql在云服务器上安装并配置MySQL服务

来源:这里教程网 时间:2026-02-28 20:47:41 作者:

云服务器上安装 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 不是本地玩具,每个账号、每条授权、每个端口开放,都必须有明确来源和用途。疏忽一处,就可能成为横向渗透的起点。

相关推荐