云服务器MySQL 8.0安装与远程连接配置完整教程

📋 文章摘要

本文详细介绍在腾讯云轻量应用服务器(Ubuntu 20.04 LTS)上安装MySQL 8.0,并配置远程连接的完整过程。包括MySQL安装、root用户密码设置、远程访问配置、防火墙设置等关键步骤,以及常见问题的解决方案。

关键词:MySQL 8.0、云服务器、远程连接、Ubuntu、数据库配置


🖥️ 环境说明

  • 服务器:腾讯云轻量应用服务器
  • 操作系统:Ubuntu 20.04 LTS
  • MySQL版本:8.0.42
  • 服务器配置:4核4G3M
  • 公网IP:你的公网IP

📚 目录

  1. 准备工作
  2. 安装MySQL 8.0
  3. 配置MySQL root用户
  4. 配置MySQL远程访问
  5. 配置防火墙
  6. 验证远程连接
  7. 常见问题排查
  8. 安全建议

1. 准备工作

1.1 创建应用目录

# 创建应用目录(可选,用于存放应用文件)
sudo mkdir -p /opt/lottery
cd /opt/lottery

1.2 更新系统包

# 更新软件包列表
sudo apt-get update

!![]


2. 安装MySQL 8.0

2.1 安装MySQL Server

# 安装MySQL服务器
sudo apt-get install mysql-server

在这里插入图片描述

安装过程中会:

  • 自动安装MySQL 8.0及其依赖
  • 自动启动MySQL服务
  • 创建MySQL系统用户和数据库

2.2 启动并设置开机自启

# 启动MySQL服务
sudo service mysql start

# 检查MySQL服务状态
sudo service mysql status

# 设置MySQL开机自启
sudo systemctl enable mysql

在这里插入图片描述

预期输出

● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since ...

3. 配置MySQL root用户

3.1 问题:Ubuntu下MySQL root用户默认使用auth_socket认证

在Ubuntu系统中,MySQL 8.0的root用户默认使用auth_socket插件认证,这意味着只能通过sudo mysql方式登录,不能使用密码登录。

3.2 解决方案:修改root用户认证方式

# 使用sudo方式登录MySQL(无需密码)
sudo mysql -u root

在这里插入图片描述

进入MySQL后执行:

-- 切换到mysql数据库
use mysql;

-- 查看当前用户信息
select host, user, authentication_string from user;

-- 修改root用户认证插件为mysql_native_password,并设置密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';

-- 刷新权限
FLUSH PRIVILEGES;

-- 退出
exit;

在这里插入图片描述

注意:将your_password替换为你的实际密码,建议使用强密码(至少8位,包含大小写字母、数字、特殊字符)。

3.3 验证密码登录

# 现在可以使用密码登录了
mysql -u root -p
# 输入刚才设置的密码

4. 配置MySQL远程访问

4.1 修改root用户允许远程连接

默认情况下,MySQL的root用户只能从localhost连接。要允许远程连接,需要修改用户的主机权限。

# 登录MySQL
sudo mysql -u root -p

执行以下SQL:

-- 切换到mysql数据库
use mysql;

-- 方法一:修改现有root用户的host为%(允许所有IP)
UPDATE user SET host='%' WHERE user='root' AND host='localhost';

-- 方法二(推荐):创建新的root用户用于远程连接
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

-- 刷新权限
FLUSH PRIVILEGES;

-- 验证修改结果
SELECT user, host FROM mysql.user WHERE user='root';

-- 退出
exit;

在这里插入图片描述

安全提示:生产环境建议创建专用用户而不是直接使用root,例如:

CREATE USER 'dbuser'@'%' IDENTIFIED WITH mysql_native_password BY 'strong_password';
GRANT ALL PRIVILEGES ON your_database.* TO 'dbuser'@'%';
FLUSH PRIVILEGES;

4.2 修改MySQL配置文件允许远程连接

MySQL默认只监听127.0.0.1(localhost),需要修改配置使其监听所有网络接口。

# 编辑MySQL配置文件
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

找到[mysqld]部分,修改或添加以下配置:

[mysqld]
# 允许所有IP连接(0.0.0.0表示监听所有网络接口)
bind-address = 0.0.0.0

# 如果原配置中有 bind-address = 127.0.0.1,需要注释掉或改为0.0.0.0
# bind-address = 127.0.0.1  # 注释掉这行

重要:不要只是注释掉bind-address,要明确设置为0.0.0.0

保存文件后,重启MySQL服务:

# 重启MySQL服务
sudo systemctl restart mysql

# 检查MySQL服务状态
sudo systemctl status mysql

4.3 验证MySQL监听地址

# 检查MySQL监听的IP地址和端口
sudo netstat -tlnp | grep 3306

预期输出

tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      20157/mysqld

如果显示0.0.0.0:3306,说明MySQL正在监听所有网络接口,配置成功。

如果显示127.0.0.1:3306,说明MySQL只监听本地,需要检查配置文件。


在这里插入图片描述

5. 配置防火墙

5.1 配置系统防火墙(ufw)

# 开放3306端口(MySQL默认端口)
sudo ufw allow 3306/tcp

# 检查防火墙状态
sudo ufw status

在这里插入图片描述

注意:如果ufw显示inactive(未激活),说明系统防火墙未启用。在云服务器环境中,主要依赖云服务商提供的防火墙/安全组。

5.2 配置云服务器防火墙/安全组(重要!)

在云服务器控制台配置防火墙规则:

  1. 登录云服务器控制台
  2. 找到你的服务器实例
  3. 进入"防火墙"或"安全组"配置
  4. 添加入站规则
    • 应用类型:MySQL (3306) 或 自定义
    • 协议:TCP
    • 端口:3306
    • 来源:全部IPv4地址(或限制为你的IP更安全)
    • 策略:允许

腾讯云配置示例

  • 规则方向:入站
  • 类型:MySQL (3306) 或 自定义
  • 协议端口:TCP:3306
  • 来源:0.0.0.0/0(或你的IP地址)
  • 策略:允许

6. 验证远程连接

6.1 从服务器本地测试远程连接

# 从服务器自己测试远程连接
mysql -u root -p -h你的公网IP
# 输入密码,如果连接成功说明配置正确

6.2 使用Navicat等工具测试

在本地电脑使用数据库管理工具(如Navicat、DBeaver、MySQL Workbench)测试连接:

连接配置

  • 主机:你的公网IP(你的服务器公网IP)
  • 端口:3306
  • 用户名:root
  • 密码:你设置的密码
  • 连接超时:30秒

如果连接成功,说明远程连接配置完成!


7. 常见问题排查

问题1:ERROR 1698 (28000): Access denied for user ‘root’@‘localhost’

原因:Ubuntu下MySQL root用户默认使用auth_socket认证。

解决方案

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
FLUSH PRIVILEGES;

问题2:2002 - Can’t connect to server

可能原因

  1. MySQL未配置允许远程连接
  2. 防火墙未开放3306端口
  3. bind-address配置错误

排查步骤

# 1. 检查MySQL监听地址
sudo netstat -tlnp | grep 3306

# 2. 检查bind-address配置
sudo grep -i "bind-address" /etc/mysql/mysql.conf.d/mysqld.cnf

# 3. 检查防火墙规则
sudo ufw status | grep 3306

# 4. 检查MySQL错误日志
sudo tail -50 /var/log/mysql/error.log

问题3:修改配置后仍然无法连接

解决步骤

  1. 确认配置文件已保存
  2. 确认MySQL服务已重启:sudo systemctl restart mysql
  3. 确认MySQL正在运行:sudo systemctl status mysql
  4. 确认监听地址正确:sudo netstat -tlnp | grep 3306

问题4:连接超时

可能原因

  1. 云服务器防火墙/安全组未配置
  2. 网络不通

排查步骤

# 在本地测试网络连通性
telnet 你的公网IP 3306
# 或
nc -zv 你的公网IP 3306

8. 安全建议

8.1 不要直接使用root用户远程连接

推荐做法:创建专用数据库用户

-- 创建专用用户
CREATE USER 'app_user'@'%' IDENTIFIED WITH mysql_native_password BY 'strong_password';

-- 只授予必要数据库的权限
GRANT ALL PRIVILEGES ON your_database.* TO 'app_user'@'%';

-- 刷新权限
FLUSH PRIVILEGES;

8.2 限制访问IP

在云服务器防火墙中,不要设置为0.0.0.0/0(允许所有IP),应该只允许你的IP地址访问。

8.3 使用强密码

  • 至少16位
  • 包含大小写字母、数字、特殊字符
  • 定期更换密码

8.4 考虑使用SSH隧道(最安全)

如果可能,使用SSH隧道连接MySQL,这样不需要直接暴露3306端口到公网。

Navicat配置SSH隧道

  1. 在连接设置中选择"SSH"标签
  2. 勾选"使用SSH隧道"
  3. 填写SSH信息(主机、端口、用户名、密码)
  4. 在"常规"标签中,主机填写127.0.0.1

9. 完整配置检查清单

配置完成后,执行以下命令验证所有配置:

#!/bin/bash
echo "=== MySQL服务状态 ==="
sudo systemctl status mysql | head -10

echo -e "\n=== MySQL监听地址 ==="
sudo netstat -tlnp | grep 3306

echo -e "\n=== bind-address配置 ==="
sudo grep -i "bind-address" /etc/mysql/mysql.conf.d/mysqld.cnf

echo -e "\n=== 用户权限 ==="
mysql -uroot -p -e "SELECT user, host FROM mysql.user WHERE user='root';" 2>/dev/null

echo -e "\n=== 防火墙状态 ==="
sudo ufw status

echo -e "\n=== 测试本地连接 ==="
mysql -uroot -p -e "SELECT 'Connection OK' as status;" 2>&1

10. 总结

本文详细介绍了在云服务器上安装和配置MySQL 8.0远程连接的完整流程:

  1. ✅ 安装MySQL 8.0
  2. ✅ 配置root用户密码和认证方式
  3. ✅ 配置远程访问权限
  4. ✅ 修改bind-address允许远程连接
  5. ✅ 配置防火墙规则
  6. ✅ 验证远程连接

关键配置点

  • bind-address = 0.0.0.0:允许所有IP连接
  • root@'%':允许root用户从任何IP连接
  • 云服务器防火墙开放3306端口

安全提醒

  • 生产环境建议创建专用用户
  • 限制访问IP范围
  • 使用强密码
  • 考虑使用SSH隧道

📝 参考命令速查

# MySQL服务管理
sudo systemctl start mysql      # 启动
sudo systemctl stop mysql       # 停止
sudo systemctl restart mysql    # 重启
sudo systemctl status mysql     # 查看状态

# MySQL连接
mysql -u root -p                # 本地连接
mysql -u root -p -h IP          # 远程连接

# 配置文件位置
/etc/mysql/mysql.conf.d/mysqld.cnf

# 日志文件
/var/log/mysql/error.log        # 错误日志

🔗 相关文章推荐


💬 问题反馈

如果在配置过程中遇到问题,欢迎在评论区留言,我会及时回复!


如果这篇文章对你有帮助,请点赞👍、收藏⭐、转发📤,让更多人受益!

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐