云服务器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. 准备工作
1.1 创建应用目录
# 创建应用目录(可选,用于存放应用文件)sudomkdir -p /opt/lottery cd /opt/lottery 1.2 更新系统包
# 更新软件包列表sudoapt-get update !
![![]](https://qiniu.meowparty.cn/coder.2023/2026-03-16/fc899eed6a3847de85ea65bc36cc4aa0.png)
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 配置云服务器防火墙/安全组(重要!)
在云服务器控制台配置防火墙规则:
- 登录云服务器控制台
- 找到你的服务器实例
- 进入"防火墙"或"安全组"配置
- 添加入站规则:
- 应用类型: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
可能原因:
- MySQL未配置允许远程连接
- 防火墙未开放3306端口
- 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:修改配置后仍然无法连接
解决步骤:
- 确认配置文件已保存
- 确认MySQL服务已重启:
sudo systemctl restart mysql - 确认MySQL正在运行:
sudo systemctl status mysql - 确认监听地址正确:
sudo netstat -tlnp | grep 3306
问题4:连接超时
可能原因:
- 云服务器防火墙/安全组未配置
- 网络不通
排查步骤:
# 在本地测试网络连通性 telnet 你的公网IP 3306# 或nc -zv 你的公网IP 33068. 安全建议
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隧道:
- 在连接设置中选择"SSH"标签
- 勾选"使用SSH隧道"
- 填写SSH信息(主机、端口、用户名、密码)
- 在"常规"标签中,主机填写
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>&110. 总结
本文详细介绍了在云服务器上安装和配置MySQL 8.0远程连接的完整流程:
- ✅ 安装MySQL 8.0
- ✅ 配置root用户密码和认证方式
- ✅ 配置远程访问权限
- ✅ 修改bind-address允许远程连接
- ✅ 配置防火墙规则
- ✅ 验证远程连接
关键配置点:
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 # 错误日志🔗 相关文章推荐
💬 问题反馈
如果在配置过程中遇到问题,欢迎在评论区留言,我会及时回复!
如果这篇文章对你有帮助,请点赞👍、收藏⭐、转发📤,让更多人受益!