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

云服务器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 创建应用目录

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

1.2 更新系统包

# 更新软件包列表sudoapt-get update 

!

![]

2. 安装MySQL 8.0

2.1 安装MySQL Server

# 安装MySQL服务器sudoapt-getinstall mysql-server 
在这里插入图片描述

安装过程中会:

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

2.2 启动并设置开机自启

# 启动MySQL服务sudoservice mysql start # 检查MySQL服务状态sudoservice 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 fromuser;-- 修改root用户认证插件为mysql_native_password,并设置密码ALTERUSER'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连接。要允许远程连接,需要修改用户的主机权限。

# 登录MySQLsudo mysql -u root -p 

执行以下SQL:

-- 切换到mysql数据库use mysql;-- 方法一:修改现有root用户的host为%(允许所有IP)UPDATEuserSET host='%'WHEREuser='root'AND host='localhost';-- 方法二(推荐):创建新的root用户用于远程连接CREATEUSER'root'@'%' IDENTIFIED WITH mysql_native_password BY'your_password';GRANTALLPRIVILEGESON*.*TO'root'@'%'WITHGRANTOPTION;-- 刷新权限 FLUSH PRIVILEGES;-- 验证修改结果SELECTuser, host FROM mysql.userWHEREuser='root';-- 退出exit;
在这里插入图片描述

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

CREATEUSER'dbuser'@'%' IDENTIFIED WITH mysql_native_password BY'strong_password';GRANTALLPRIVILEGESON your_database.*TO'dbuser'@'%'; FLUSH PRIVILEGES;

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

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

# 编辑MySQL配置文件sudovi /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地址和端口sudonetstat -tlnp |grep3306

预期输出

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认证。

解决方案

ALTERUSER'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监听地址sudonetstat -tlnp |grep3306# 2. 检查bind-address配置sudogrep -i "bind-address" /etc/mysql/mysql.conf.d/mysqld.cnf # 3. 检查防火墙规则sudo ufw status |grep3306# 4. 检查MySQL错误日志sudotail -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用户远程连接

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

-- 创建专用用户CREATEUSER'app_user'@'%' IDENTIFIED WITH mysql_native_password BY'strong_password';-- 只授予必要数据库的权限GRANTALLPRIVILEGESON 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/bashecho"=== MySQL服务状态 ==="sudo systemctl status mysql |head -10 echo -e "\n=== MySQL监听地址 ==="sudonetstat -tlnp |grep3306echo -e "\n=== bind-address配置 ==="sudogrep -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 # 错误日志

🔗 相关文章推荐


💬 问题反馈

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


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

Could not load content