发布时间:2026/8/13 13:58:52
Ubuntu 22.04部署MySQL 8.0:从安装到远程连接配置全攻略 1. 项目概述为什么在Ubuntu上部署MySQL 8.0是个技术活最近在给一个内部项目搭建后端服务数据库选型毫无悬念地定了MySQL 8.0。新项目嘛肯定要用新特性比如窗口函数、更好的JSON支持还有默认更安全的caching_sha2_password认证插件。服务器环境是Ubuntu 22.04 LTS一个非常稳定且流行的选择。整个安装和配置过程听起来就是几条命令的事对吧apt update,apt install mysql-server然后改个配置允许远程连接似乎就搞定了。但实际做下来我发现从安装、初始化、到最终实现安全可靠的远程访问中间每一步都可能藏着“坑”。尤其是对于从Windows环境或者旧版MySQL比如5.7迁移过来的开发者MySQL 8.0在Ubuntu上的默认行为和一些安全策略的改变会让你在远程连接时频频碰壁。这不仅仅是改一个bind-address那么简单它还涉及到用户认证方式的变更、防火墙规则、以及Ubuntu系统本身对MySQL服务的封装变化。我这次就遇到了几个“新坑”比如安装后没有提示设置root密码以及使用新认证插件后常规客户端工具连接失败的问题。所以我决定把这次从零开始在Ubuntu 22.04上安装MySQL 8.0并配置远程连接的全过程连同我踩过的坑和解决方案详细记录下来。无论你是刚接触Linux服务部署的新手还是遇到过类似连接问题的老手这篇记录都能提供一个清晰的、可复现的路径。2. 核心思路与方案选型apt安装 vs 二进制包在Ubuntu上安装MySQL主流有两种方式使用系统自带的APT包管理器安装或者从MySQL官网下载二进制压缩包进行手动安装。我选择了APT安装原因如下为什么选择APT安装集成与便捷性APT安装的MySQL会完美集成到Ubuntu的服务管理体系中使用systemctl。安装包会自动处理依赖、创建专用的mysql系统用户和组、配置数据目录/var/lib/mysql和日志目录。对于生产或开发环境这种集成减少了大量手动配置的繁琐工作。自动更新与安全通过APT安装的软件包可以方便地接收来自Ubuntu官方仓库的安全更新和Bug修复只需运行sudo apt update sudo apt upgrade即可。这对于需要长期维护的服务至关重要。配置管理APT安装会提供默认的配置文件/etc/mysql/mysql.conf.d/mysqld.cnf并且其配置结构清晰便于管理和覆盖。为什么不选择二进制包安装手动安装二进制包虽然能获得最新版本并允许更灵活地指定安装路径和参数但需要自行处理初始化脚本、服务注册、环境变量等。对于大多数追求快速部署和稳定维护的场景APT安装是更优解。尤其是MySQL 8.0其版本在Ubuntu 22.04的默认仓库中已经足够新通常是8.0.x的最新稳定分支完全满足开发和生产需求。关于远程连接的方案考量 允许远程连接本质上是修改MySQL的监听地址和用户权限。这里有一个关键点安全前置。我的思路是先完成本地无密码登录和基本安全设置然后再有控制地开放远程访问并为远程连接创建专用的、权限最小化的用户而非直接使用root用户远程登录。这个顺序能有效避免在配置过程中就把自己锁在门外。3. 详细安装与初始化步骤3.1 系统更新与MySQL仓库添加可选首先更新本地软件包索引确保获取到最新的仓库信息。sudo apt update sudo apt upgrade -yUbuntu 22.04的默认仓库已经包含了MySQL 8.0所以通常不需要额外添加MySQL官方仓库。但如果你需要非常特定的版本可以考虑从MySQL官网下载APT仓库配置包。本次我们使用默认仓库。3.2 安装MySQL服务器执行安装命令。这个包mysql-server是一个元包会自动引入最新的MySQL 8.0社区服务器版。sudo apt install mysql-server -y安装过程很快期间你会看到它自动安装了mysql-common,mysql-client-core等依赖包。安装完成后MySQL服务会自动启动。你可以通过以下命令验证服务状态sudo systemctl status mysql.service如果看到active (running)的字样说明服务已成功启动并运行。注意与一些旧教程或其它Linux发行版不同在Ubuntu 22.04上使用APT安装MySQL 8.0时安装过程中不会弹出交互式窗口让你设置root密码。这是第一个容易让人困惑的“坑”。MySQL采用了一种新的默认安全策略。3.3 初始安全配置与root密码设置由于安装后root用户没有密码但默认的auth_socket插件允许通过Unix Socket文件进行免密本地登录。我们需要运行MySQL自带的安全配置向导。sudo mysql_secure_installation执行这个脚本后你会遇到一系列交互式提问VALIDATE PASSWORD COMPONENT询问是否安装密码验证组件。这个组件可以强制要求用户设置符合一定强度规则的密码。对于开发环境可以选择No对于生产环境建议选择Yes并选择一个密码策略等级0-LOW, 1-MEDIUM, 2-STRONG。设置root密码无论上一步如何选择这里都会提示你为root用户设置密码。请务必设置一个强密码并牢记。移除匿名用户默认安装会创建一个匿名用户空用户允许任何人无需密码登录MySQL。必须选择Yes移除这是重要的安全加固步骤。禁止root远程登录是否禁止root账户从远程主机登录强烈建议选择Yes。root权限太大不应暴露在网络上。远程管理应通过普通用户登录必要时再sudo提权。移除测试数据库默认存在一个名为test的数据库所有用户都可以访问。出于安全考虑选择Yes移除。立即重载权限表使上述所有安全变更立即生效选择Yes。完成这些步骤后你的MySQL实例就有了一个设置了密码的root用户并且进行了一些基础安全加固。3.4 验证本地登录现在尝试用root密码登录本地MySQL。mysql -u root -p输入你刚才设置的密码应该能成功进入MySQL命令行提示符mysql。执行一个简单命令验证SELECT VERSION(), USER(), CURRENT_DATE;如果能正确返回MySQL版本、当前用户和日期说明本地安装和密码设置完全成功。输入exit;退出。4. 配置MySQL允许远程连接这是核心步骤也是最容易出错的地方。需要修改两个主要配置MySQL的绑定地址和相应用户的访问权限。4.1 修改MySQL配置文件监听所有网络接口默认情况下MySQL只监听本地回环地址127.0.0.1。我们需要让它监听0.0.0.0所有IPv4地址或特定的服务器IP。编辑MySQL的主配置文件。在Ubuntu上主要的服务配置通常在/etc/mysql/mysql.conf.d/mysqld.cnf。sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf找到bind-address这一行。它可能被注释掉以#开头也可能值是127.0.0.1。# Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. bind-address 127.0.0.1将127.0.0.1修改为0.0.0.0。如果你只想监听某个特定网卡也可以改为服务器的内网IP。bind-address 0.0.0.0保存并退出编辑器。重要提示修改为0.0.0.0意味着MySQL将在服务器所有网络接口上接受连接。请确保你已经通过防火墙如UFW限制了访问来源这在后续步骤会讲到。4.2 为远程访问创建专用用户强烈推荐绝对不要直接允许root用户远程登录。最佳实践是创建一个拥有必要权限的专用用户。首先用root身份登录MySQLmysql -u root -p然后在MySQL命令行中执行以下操作。假设我要创建一个用户名为remote_user密码为StrongPassword123!的用户并允许他从任何主机%连接但只对mydatabase这个数据库拥有所有权限。-- 创建一个新用户并指定使用mysql_native_password插件兼容性考虑后面会讲 CREATE USER remote_user% IDENTIFIED WITH mysql_native_password BY StrongPassword123!; -- 授予该用户对特定数据库的所有权限 GRANT ALL PRIVILEGES ON mydatabase.* TO remote_user%; -- 如果你希望用户能创建数据库、管理其他用户等权限更大可以授予全局权限慎用 -- GRANT ALL PRIVILEGES ON *.* TO remote_user% WITH GRANT OPTION; -- 立即刷新权限使更改生效 FLUSH PRIVILEGES;完成用户创建和授权后输入exit;退出MySQL。关于认证插件第二个“坑” MySQL 8.0默认使用caching_sha2_password认证插件它比旧的mysql_native_password更安全。然而许多旧的MySQL客户端工具或某些编程语言的旧驱动可能还不支持这个新插件会导致连接失败报错如“authentication plugin caching_sha2_password cannot be loaded”。上面创建用户时我显式指定了IDENTIFIED WITH mysql_native_password就是为了最大程度兼容各种客户端。如果你确定所有客户端都支持新插件可以省略WITH mysql_native_password部分MySQL会使用默认插件。4.3 配置服务器防火墙UFW如果你的Ubuntu服务器启用了UFWUncomplicated Firewall你需要开放MySQL的默认端口3306。切勿直接开放给所有人0.0.0.0/0除非你知道自己在做什么。更安全的做法是只允许特定的IP地址或IP段访问。例如只允许你的办公网络IP如203.0.113.100或一个子网如192.168.1.0/24连接。# 查看UFW状态确认防火墙已启用 sudo ufw status # 允许特定IP访问3306端口 sudo ufw allow from 203.0.113.100 to any port 3306 # 或者允许一个子网 sudo ufw allow from 192.168.1.0/24 to any port 3306 # 如果你在测试阶段需要临时允许所有IP生产环境不推荐 # sudo ufw allow 3306/tcp应用规则后记得重新加载UFW。sudo ufw reload4.4 重启MySQL服务使配置生效所有配置修改完成后需要重启MySQL服务。sudo systemctl restart mysql.service再次检查服务状态确保重启成功。sudo systemctl status mysql.service5. 从远程客户端测试连接现在可以从另一台机器客户端测试远程连接了。你需要以下信息主机名/IP你的Ubuntu服务器的公网IP或内网IP。端口3306默认。用户名remote_user我们刚才创建的。密码StrongPassword123!。测试方法1使用MySQL命令行客户端如果客户端机器有mysql -h your_server_ip -u remote_user -p输入密码成功进入即表示连接正常。测试方法2使用图形化工具如MySQL Workbench、DBeaver、Navicat等。新建连接填入上述信息即可。测试方法3使用编程语言简单测试以Python为例import mysql.connector try: connection mysql.connector.connect( hostyour_server_ip, userremote_user, passwordStrongPassword123!, databasemydatabase # 如果用户有该库权限 ) print(连接成功) connection.close() except mysql.connector.Error as err: print(f连接失败: {err})6. 疑难杂症与“新坑”排查实录即使按照上述步骤操作你可能还是会遇到问题。下面是我遇到或常见的几个“坑”及其解决方案。6.1 连接被拒绝 (ERROR 2003/HY000: Can‘t connect to MySQL server)可能原因1MySQL服务未运行或绑定地址错误。排查在服务器上运行sudo systemctl status mysql确认服务是active (running)。运行sudo ss -tlnp | grep 3306查看3306端口的监听情况。如果看到0.0.0.0:3306或你的服务器IP:3306说明绑定正确如果只有127.0.0.1:3306说明bind-address没改对或未重启服务。解决检查/etc/mysql/mysql.conf.d/mysqld.cnf文件确保bind-address 0.0.0.0然后重启MySQL。可能原因2防火墙UFW或云服务商安全组阻挡。排查在服务器上临时关闭UFW测试sudo ufw disable测试后记得重新开启并配置规则。如果是云服务器如AWS、阿里云、腾讯云务必检查安全组Security Group规则是否允许入站流量访问3306端口。解决正确配置UFW规则或云平台安全组仅允许可信来源IP。可能原因3MySQL用户的主机限制。排查我们创建用户时用了remote_user%%代表任何主机。如果你创建的是remote_userlocalhost或remote_user192.168.1.%那么从其他主机连接就会被拒绝。解决登录MySQL执行SELECT user, host FROM mysql.user;查看用户权限。如果需要用GRANT语句重新授权或使用CREATE USER和%主机部分重新创建用户。6.2 认证失败 (ERROR 1045/28000: Access denied for user)可能原因1密码错误。解决仔细检查密码注意大小写。可以在服务器本地先用这个用户和密码登录测试mysql -u remote_user -p。可能原因2认证插件不兼容最常见的“新坑”。现象密码确认无误但一些老客户端或驱动报错“caching_sha2_password”相关。排查在MySQL服务器上查看用户的认证插件。SELECT user, host, plugin FROM mysql.user WHERE user remote_user;如果plugin列显示caching_sha2_password而你的客户端不支持就会失败。解决方案A推荐修改用户插件将用户的认证插件改为mysql_native_password。ALTER USER remote_user% IDENTIFIED WITH mysql_native_password BY YourNewPassword; FLUSH PRIVILEGES;解决方案B升级客户端确保你的MySQL客户端库或驱动程序是最新的并支持caching_sha2_password。例如更新libmysqlclient、mysql-connector-python等。可能原因3用户没有被授予从特定主机连接的权限。解决同6.1的可能原因3检查并修正用户的主机部分。6.3 安装后找不到初始root密码Ubuntu特有这是一个典型的“新坑”。在旧版本或某些Linux发行版中安装后初始root密码可能在日志文件中。但在Ubuntu 22.04的APT安装中root初始是通过auth_socket插件认证的。解决如果你完全无法登录比如忘记了mysql_secure_installation设置的密码可以尝试以下步骤停止MySQL服务sudo systemctl stop mysql以跳过权限检查的方式启动MySQLsudo mysqld_safe --skip-grant-tables 无需密码直接登录mysql -u root在MySQL命令行中刷新权限并修改root密码FLUSH PRIVILEGES; -- 对于MySQL 8.0修改密码的语法 ALTER USER rootlocalhost IDENTIFIED BY MyNewStrongPass!; -- 或者使用旧语法有时在--skip-grant-tables模式下需要 UPDATE mysql.user SET authentication_stringPASSWORD(MyNewStrongPass!) WHERE Userroot; FLUSH PRIVILEGES;退出MySQL然后重启MySQL服务先杀掉mysqld_safe进程再用sudo systemctl start mysql。注意此操作会暂时降低安全性仅在紧急恢复时使用完成后务必立即重启到正常模式。6.4 性能与连接数调整可选但重要远程连接打开后可能需要调整一些默认参数以适应实际负载。编辑MySQL配置文件sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf在[mysqld]部分可以考虑添加或修改# 增加最大连接数默认值可能较低 max_connections 200 # 设置连接超时时间避免大量睡眠连接 wait_timeout 600 interactive_timeout 600 # 如果内存充足可以增加缓冲池大小以提高性能根据服务器内存调整通常设为物理内存的50-70% innodb_buffer_pool_size 1G修改后需要重启MySQL服务sudo systemctl restart mysql。7. 安全加固建议与日常维护远程数据库暴露在网络上安全至关重要。除了上述的禁用root远程登录、使用专用用户、配置防火墙外还有以下几点定期更新使用sudo apt update sudo apt upgrade定期更新系统和MySQL以获取安全补丁。监控日志关注MySQL的错误日志/var/log/mysql/error.log和通用查询日志及时发现异常访问或错误。使用SSL/TLS加密连接对于公网访问强烈建议配置SSL加密防止数据在传输中被窃听。这涉及生成证书并在MySQL配置中启用SSL选项。限制用户权限遵循最小权限原则。给remote_user只授予其业务所需的最小权限集合如SELECT, INSERT, UPDATE, DELETE而不是ALL PRIVILEGES。考虑使用SSH隧道对于管理操作可以不直接暴露3306端口而是通过SSH隧道连接到MySQL。这样可以利用SSH的强加密和认证。# 在本地机器执行将本地13306端口转发到服务器的3306端口 ssh -L 13306:localhost:3306 your_useryour_server_ip然后在本地使用图形化工具或客户端连接127.0.0.1:13306即可数据通过SSH加密通道传输。整个流程走下来从安装、安全初始化、配置远程访问、到最后的排错和安全加固其实是一个标准的服务部署生命周期。关键在于理解每一步背后的意图APT安装是为了省心集成mysql_secure_installation是基础安全门槛修改绑定地址和用户授权是功能开放而防火墙和插件兼容性处理则是确保开放后稳定可用。把这些点都踩过一遍下次再遇到任何数据库部署需求心里就有了一张清晰的地图。

相关新闻

2026/8/13 13:53:51

基于卡尔曼滤波的人脸跟踪

前言: 卡尔曼滤波,古老而神秘。在数据处理的世界里,我们早已拥有诸多优秀的算法:低通滤波、高通滤波、半径滤波、K近邻滤波、均值滤波……它们各司其职,稳健可靠。然而,唯有卡尔曼滤波,仿佛是在…

2026/8/13 13:53:51

Axure RP 11汉化完整指南:10分钟让3259条界面词条全部变中文

Axure RP 11汉化完整指南:10分钟让3259条界面词条全部变中文 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 如果你正…

2026/8/13 13:53:51

Android16 连接ARC,遥控器调节音量,ARC会静音一下再有声音

由于在HdmiCecController中有添加自定义的逻辑,先查看相关log分析一下。可以看到,在发送了Volume up之后立刻又发送了Volume mute,而我们实际操作只按了一下音量加,不符合我们的操作,这里往上追了一下,发现…

2026/8/13 14:53:57

Elmo G-TUB40/230SETSO 数字伺服控制器

Elmo G-TUB40/230SETSO 数字伺服控制器产品特点小体积大功率:管状超紧凑设计,功率密度高,节省电气柜空间。供电灵活:支持单相或三相230VAC供电,电压范围宽,适配多种工业现场。高效低热:效率高达…

2026/8/13 14:53:57

LLM辅助编程:从代码生成到工程能力提升的实践指南

在软件开发领域,LLM(大语言模型)辅助编程正迅速从新奇工具转变为日常标配。从最初的代码补全,到如今的对话式生成、代码解释、重构建议,LLM极大地提升了开发者的效率。然而,一个普遍的现象正在发生&#xf…

2026/8/13 14:53:57

远程技能推送功能详解:使用SkillsGate实现多服务器技能同步

远程技能推送功能详解:使用SkillsGate实现多服务器技能同步 【免费下载链接】skillsgate 项目地址: https://gitcode.com/gh_mirrors/sk/skillsgate SkillsGate是一款强大的技能管理工具,它提供了便捷的远程技能推送功能,帮助用户轻松…

2026/8/13 14:53:57

如何用一套键鼠控制多台电脑?Input Leap 开源 KVM 实战全解

如何用一套键鼠控制多台电脑?Input Leap 开源 KVM 实战全解 【免费下载链接】input-leap Open-source KVM software 项目地址: https://gitcode.com/gh_mirrors/in/input-leap 桌面摆着两台甚至三台电脑,键盘鼠标却只有一套。每次从台式机切到笔记…

2026/8/13 14:48:56

深入解析高速缓存三种映射方法:从原理到编程实践

1. 从“找书”到“找数据”:理解高速缓存映射的本质 如果你写过代码,或者用过电脑,一定遇到过这种情况:程序运行得时快时慢。有时候一个操作瞬间完成,有时候却要等上那么一小会儿,甚至能听到硬盘“咔咔”的…

2026/8/12 10:37:12

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/12 5:35:25

当 LLM 遇见大文档:主流开源项目如何处理上下文超限

从 Agentic Loop 到 Repo Map,七种策略与六类陷阱引言:128K vs 10MB 的硬冲突 2026 年的 LLM 上下文窗口已达到 128K ~ 1M token(≈ 0.5MB ~ 4MB 文本),但 LLM 想要处理的真实数据规模远远超过这个量级:真实…

2026/8/13 0:02:21

Prefix Cache

Prefix Cache(前缀缓存) 是大模型推理引擎(如 vLLM、SGLang、TensorRT-LLM)中用于跨请求复用已计算 KV Cache 的核心内存与计算优化技术。 它的核心目的在于:彻底消除重复 Prompt 的 Prefill 阶段计算,将首…

2026/8/13 0:02:21

VSCode插件精选:从AI补全到代码规范,打造高效开发环境

1. 项目概述:为什么说插件是VSCode的灵魂?如果你和我一样,每天有超过8小时的时间是在VSCode里度过的,那你肯定明白,一个顺手的开发环境有多重要。VSCode本身已经足够优秀了,但真正让它从“好用的编辑器”蜕…

2026/8/13 0:02:21

如何快速完成文件批量重命名:FreeReNamer终极指南

如何快速完成文件批量重命名:FreeReNamer终极指南 【免费下载链接】FreeReNamer 功能强大又易用的文件批量重命名软件 项目地址: https://gitcode.com/gh_mirrors/fr/FreeReNamer 你是否曾经面对成百上千个杂乱无章的文件感到头疼?传统的手动重命…

2026/8/10 11:20:30

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/11 17:06:59

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/11 3:05:11

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…