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