云服务器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 # 错误日志

🔗 相关文章推荐


💬 问题反馈

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


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

Read more

Linux Virtual Server (LVS)

Linux Virtual Server (LVS)

Linux Virtual Server (LVS) 一、LVS基础认知 1.1 LVS简介 LVS(Linux Virtual Server)是Linux内核层实现的高性能、高可用负载均衡集群技术,由章文嵩博士开发,现为Linux内核标准模块。其核心作用是将前端请求流量分发到后端多台真实服务器(RS),提升服务的并发处理能力和可用性,阿里四层SLB就是基于LVS+keepalived实现。 1.2 集群与分布式核心区别 系统性能扩展分为向上扩展(Scale UP,增强单台设备性能)和向外扩展(Scale Out,增加设备数量),LVS属于Scale Out方案,核心解决多设备的调度分配问题。 特性集群(Cluster)分布式(Distributed)部署逻辑同一业务部署在多台服务器,功能/数据/代码一致一个业务拆分为多个子业务,各服务器功能/数据/代码不同效率提升方式提高单位时间内执行的任务数缩短单个任务的执行时间故障影响单台服务器故障,其他服务器可顶替单台节点故障,对应子业务直接失效典型应用LVS负载均衡集群、Nginx集群Hadoop计算、

By Ne0inhk
Flutter 组件 ignorium 的适配 鸿蒙Harmony 实战 - 驾驭代码生成忽略审计、实现鸿蒙端构建产物精准管理与资源泄露防护方案

Flutter 组件 ignorium 的适配 鸿蒙Harmony 实战 - 驾驭代码生成忽略审计、实现鸿蒙端构建产物精准管理与资源泄露防护方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 ignorium 的适配 鸿蒙Harmony 实战 - 驾驭代码生成忽略审计、实现鸿蒙端构建产物精准管理与资源泄露防护方案 前言 在鸿蒙(OpenHarmony)生态的超大规模工程开发中,代码生成(Code Generation)技术(如 build_runner)是提效的利器,但同时也带来了一个令人头疼的并发症:构建产物的急剧膨胀。面对动辄数千个生成的 .g.dart、.fb.dart 以及各种缓存占位文件。如果缺乏一套严密的忽略审计机制,不仅会导致 IDE 索引变慢、IDE 搜索结果被垃圾信息淹没,更严重的是,某些带有敏感信息的生成代码可能会被误提交到仓库中。 我们需要一种“逻辑可控”的构建过滤器。 ignorium 是一套专为代码生成与静态分析设计的忽略路径审计引擎。它允许你通过定义严密的模式规则。精确控制哪些生成文件应该被存留,哪些应该在构建后立即从宿主机环境抹除。

By Ne0inhk

Linux:初始网络(下)

或许你有一个疑问,“发请求、收响应”,却不清楚数据在网线里到底是怎么从一台主机走到另一台主机的。这篇博客在上一篇博客基础上,将最基础的局域网通信原理出发,拆解数据封装与解包的核心逻辑,再延伸到跨网段的网络传输,帮你建立起网络传输的完整宏观认知,所以大家要认真阅读啦~~ 一、同局域网通信:以太网内的主机如何直接对话 局域网是我们最常接触的网络场景,比如家里的路由器连接的电脑、手机,公司内网的办公设备,都属于同一个局域网。我们先从最核心的问题切入,理解局域网通信的底层逻辑 1. 核心问题:同一局域网的两台主机,能直接通信吗? 答案是:完全可以!局域网内的主机通信,本质是基于以太网协议、通过 MAC 地址完成的二层直连通信,原理就像我们在同一个教室里上课:老师喊出同学的名字,全班同学都能听到这个声音,但只有名字对应的同学会做出回应,其他同学会自动忽略这个信息 2. 局域网通信的唯一身份标识:MAC 地址 在以太网的局域网里,每一台主机的唯一性,靠的就是 MAC 地址来保证。 * 核心定义:MAC 地址用来识别数据链路层中相连的节点,是网卡的 “物理身份证”

By Ne0inhk
Flutter for OpenHarmony:leak_tracker 自动监测内存泄漏,精准定位未释放对象(内存性能优化) 深度解析与鸿蒙适配指南

Flutter for OpenHarmony:leak_tracker 自动监测内存泄漏,精准定位未释放对象(内存性能优化) 深度解析与鸿蒙适配指南

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 前言 内存泄漏(Memory Leak)是移动应用开发中最隐蔽的杀手。在 Flutter 中,虽然 Dart 有垃圾回收(GC)机制,但如果一个对象(如 Widget State、Controller)被全局变量、单例、或者未取消的 StreamSubscription 意外引用,GC 就无法回收它。 这会导致: 1. 内存占用持续飙升,最终 OOM (Out of Memory) 崩溃。 2. UI 卡顿,因为 GC 频繁触发(Stop-the-world)。 3. 后台保活失败,被系统激进查杀。 在

By Ne0inhk