努力
加油

腾讯云Ubuntu服务器安装MySQL数据库的完整教程?

在腾讯云 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

这个交互式向导会问你几个问题,以下是推荐的选择逻辑:

  1. VALIDATE PASSWORD COMPONENT: 询问是否启用密码强度验证插件。
    • 选择 Y(启用)。
    • 级别选择 2(Strong,强制包含大小写、数字、特殊字符)。
  2. Remove anonymous users: 移除匿名用户。
    • 选择 Y。
  3. Disallow root login remotely: 禁止 root 用户远程登录。
    • 选择 Y。这一步非常重要,防止暴力破解。
  4. Remove test database: 删除测试数据库。
    • 选择 Y。
  5. Reload privilege tables now: 刷新权限表。
    • 选择 Y。

第四步:创建专用数据库用户(最佳实践)

在生产环境中,永远不要使用 root 账号连接应用程序。你需要创建一个专用的业务用户,并赋予其特定数据库的权限。

  1. 进入 MySQL 命令行:

    sudo mysql
  2. 创建数据库和用户(以示例为例):

    -- 创建数据库
    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)

  1. 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;
  2. Connection Refused (连接被拒绝):

    • 90% 的情况是腾讯云安全组没开,或者 MySQL 的 bind-address 没改对。
    • 再次确认 netstat -tuln | grep 3306 或 ss -tuln | grep 3306,看是否监听在 0.0.0.0:3306。
  3. 中文乱码:

    • 确保建库时指定了 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 等内核参数的调优。