在腾讯云 Ubuntu 服务器上部署 MySQL,虽然看似简单,但实际生产环境中往往伴随着权限配置、安全加固以及远程连接等一系列“坑”。很多新手直接 apt install 完就以为万事大吉,结果发现连不上数据库或者 root 密码登录失败。
下面是一份基于当前主流版本(Ubuntu 20.04/22.04 + MySQL 8.0)的实战指南,侧重于可用性和安全性。
第一步:系统环境准备与依赖更新
登录你的腾讯云服务器(通过 SSH 或腾讯云控制台终端)。首先,确保软件源是最新的,这能避免后续安装时遇到依赖冲突或旧版本漏洞。
sudo apt update
sudo apt upgrade -y
注意:如果服务器内存较小(如 1GB 以下),建议先开启 Swap 分区,防止 MySQL 启动时 OOM(内存溢出)崩溃。
第二步:安装 MySQL Server
Ubuntu 的默认仓库中通常包含 MySQL 5.7 或 8.0。目前推荐直接使用 MySQL 8.0,性能更好且安全性更强。
执行安装命令:
sudo apt install mysql-server -y
安装完成后,MySQL 服务通常会自动启动。你可以通过以下命令检查状态:
sudo systemctl status mysql
如果显示 active (running),说明服务已就绪。如果没有自动启动,手动启动并设置开机自启:
sudo systemctl start mysql
sudo systemctl enable mysql
第三步:初始安全配置(关键步骤)
刚安装的 MySQL 默认有一个 root 用户,但出于安全考虑,强烈不建议直接使用空密码或简单密码登录,也不建议允许 root 从远程主机登录。我们需要运行安全脚本进行加固。
执行:
sudo mysql_secure_installation
这个交互式向导会问你几个问题,以下是推荐的选择逻辑:
- VALIDATE PASSWORD COMPONENT: 询问是否启用密码强度验证插件。
- 选择
Y(启用)。 - 级别选择
2(Strong,强制包含大小写、数字、特殊字符)。
- 选择
- Remove anonymous users: 移除匿名用户。
- 选择
Y。
- 选择
- Disallow root login remotely: 禁止 root 用户远程登录。
- 选择
Y。这一步非常重要,防止暴力破解。
- 选择
- Remove test database: 删除测试数据库。
- 选择
Y。
- 选择
- Reload privilege tables now: 刷新权限表。
- 选择
Y。
- 选择
第四步:创建专用数据库用户(最佳实践)
在生产环境中,永远不要使用 root 账号连接应用程序。你需要创建一个专用的业务用户,并赋予其特定数据库的权限。
-
进入 MySQL 命令行:
sudo mysql -
创建数据库和用户(以示例为例):
-- 创建数据库 CREATE DATABASE myapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 创建用户 'myuser'@'localhost',替换为你的密码 CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'Your_Strong_Password_Here'; -- 授权该用户对特定数据库的操作权限 GRANT ALL PRIVILEGES ON myapp_db.* TO 'myuser'@'localhost'; -- 刷新权限 FLUSH PRIVILEGES; -- 退出 EXIT;技术细节:这里使用
utf8mb4是因为它支持 Emoji 表情和生僻字,比普通的utf8更通用。
第五步:配置远程访问(针对腾讯云环境)
很多开发者卡在最后一步:本地 Navicat 或 DBeaver 连不上服务器。这是因为 MySQL 默认只监听 127.0.0.1,且防火墙限制了端口。
1. 修改 MySQL 绑定地址
编辑 MySQL 配置文件:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
找到 bind-address 这一行:
# bind-address = 127.0.0.1
bind-address = 0.0.0.0
将其注释掉或改为 0.0.0.0,表示监听所有网卡 IP。保存并退出(Ctrl+O, Enter, Ctrl+X)。
2. 重启 MySQL 服务
sudo systemctl restart mysql
3. 腾讯云安全组放行
这是国内云厂商特有的“坑”。即使你在服务器内部放行了 3306 端口,腾讯云的安全组(Security Group)默认也是拦截外部流量的。
- 登录腾讯云控制台。
- 进入【云服务器】->【安全组】。
- 找到你的实例绑定的安全组。
- 添加入方向规则:
- 协议:TCP
- 端口范围:3306
- 来源:
0.0.0.0/0(如果是生产环境,建议限制为你本地的固定 IP 段,更安全)
4. 服务器防火墙放行(如果有 ufw)
如果你之前开启了 Ubuntu 自带的 ufw 防火墙,也需要放行:
sudo ufw allow 3306/tcp
sudo ufw reload
第六步:验证连接
现在,你可以尝试从本地电脑连接服务器 IP:3306。
如果使用命令行验证:
mysql -h <你的服务器公网IP> -P 3306 -u myuser -p
输入刚才设置的密码,如果能成功进入 mysql> 提示符,说明配置完成。
常见问题排查(Troubleshooting)
-
Authentication plugin ‘caching_sha2_password’ 不支持:
- 有些旧版客户端(如某些版本的 PHP 或老旧驱动)不支持 MySQL 8.0 默认的加密方式。
- 解决:将用户认证方式改回
mysql_native_password。ALTER USER 'myuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Your_Password'; FLUSH PRIVILEGES;
-
Connection Refused (连接被拒绝):
- 90% 的情况是腾讯云安全组没开,或者 MySQL 的
bind-address没改对。 - 再次确认
netstat -tuln | grep 3306或ss -tuln | grep 3306,看是否监听在0.0.0.0:3306。
- 90% 的情况是腾讯云安全组没开,或者 MySQL 的
-
中文乱码:
- 确保建库时指定了
utf8mb4。 - 检查
/etc/mysql/mysql.conf.d/mysqld.cnf中的[mysqld]部分是否包含:character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci
- 确保建库时指定了
总结
在腾讯云 Ubuntu 上装 MySQL,核心不在于“安装”,而在于安全组策略、bind-address 配置以及非 Root 用户的权限隔离。按照上述步骤操作,可以避开绝大多数常见的连接故障和安全隐患。对于高并发场景,后续还需关注 innodb_buffer_pool_size 等内核参数的调优。
云技术博客