1. 离线环境下的MySQL 8.0.33部署:为什么选择它?
大家好,今天我想和大家深入聊聊一个在特定场景下非常实用的技术操作:在Ubuntu 20.04和Ubuntu 18.04这两个长期支持版系统上,完全离线安装MySQL 8.0.33,并配置Navicat Premium 16进行连接。你可能要问,现在云服务这么方便,为什么还要折腾离线安装?这恰恰是很多朋友在实际工作中会遇到的真问题。比如,你负责的服务器部署在内网环境,出于安全规定完全与互联网隔离;或者你需要在客户现场、工厂车间等网络条件不佳甚至没有外网的地方快速搭建一套数据库环境;又或者,你只是想在一个纯净的系统上,不受网络波动和软件源更新的影响,稳定地复现一个特定的数据库版本。在这些场景下,离线部署就成了必备技能。
我遇到过不少项目,客户的生产环境就是封闭的Ubuntu服务器,要求部署指定版本的MySQL。在线安装的apt install命令在这里完全失效,而网上很多教程要么版本老旧,要么步骤跳跃,照着做总会踩到各种依赖缺失的坑。所以,我决定结合自己多次实战的经验,把从下载、解决依赖、安装、配置到最终用图形化工具Navicat连接的完整流程,掰开揉碎了讲清楚。这次我们聚焦于MySQL 8.0.33这个较新的版本,它在性能、安全性和功能上相比老版本都有不少提升,比如更强的密码策略、更好的JSON支持等。同时,我们也会覆盖Ubuntu 20.04和18.04这两个主流LTS版本,确保无论你用的是较新的Focal Fossa还是经典的Bionic Beaver,都能找到对应的操作指引。整个过程,我们会像搭积木一样,一步步来,确保你在没有网络的环境下也能游刃有余。
2. 战前准备:获取正确的离线安装包
离线安装的第一步,也是最关键的一步,就是准备好所有需要的“零件”。这就像你要组装一台模型,必须把所有的板件、螺丝都找齐,缺一个都可能前功尽弃。对于MySQL离线安装来说,核心“零件”就是官方发布的DEB包捆绑文件(.tar包)。你需要在另一台可以上网的电脑上,访问MySQL官方网站的下载页面。这里有个小技巧,不要直接点首页的下载,那样可能会跳到最新的通用版本。我们应该去Archives(归档)页面,精准定位到MySQL 8.0.33这个特定版本。
找到页面后,选择对应的操作系统为“Ubuntu Linux”,然后根据你的系统架构(通常是x86_64,也就是amd64)选择具体的版本。这里要特别注意:Ubuntu 20.04和Ubuntu 18.04对应的安装包文件名是不同的。通常,文件名会包含类似ubuntu20.04或bionic(Ubuntu 18.04的代号)的标识。比如,针对20.04的包可能叫mysql-server_8.0.33-1ubuntu20.04_amd64.deb-bundle.tar,而针对18.04的则可能是mysql-server_8.0.33-1ubuntu18.04_amd64.deb-bundle.tar。务必下载正确的文件,否则后续安装会因系统库不兼容而失败。
下载完成后,你得到的是一个.tar格式的打包文件。我们需要把它传输到目标离线Ubuntu机器上。可以用U盘、移动硬盘,或者通过内部文件服务器进行拷贝。我习惯在用户主目录下创建一个专门的工作目录,比如~/mysql_offline,把所有相关文件都放在这里,方便管理。将下载的.tar包放入这个目录后,我们就可以开始解压了。打开终端,进入该目录,执行解压命令:
tar -xvf mysql-server_8.0.33-1ubuntu20.04_amd64.deb-bundle.tar这个-xvf参数的意思是:x表示解压,v表示显示详细过程(这样你能看到解压了哪些文件),f后面指定文件名。解压后,你会看到一堆以.deb结尾的安装包文件,这就是我们安装MySQL所需的全部组件。但先别急着安装,离线安装最大的挑战往往不是主程序,而是那些隐藏的依赖项。
3. 攻克依赖难关:手动补齐缺失的系统库
解压出一堆DEB文件后,很多朋友会迫不及待地开始按顺序安装,但很快就会遇到第一个拦路虎:依赖错误。系统会提示缺少某个共享库,比如libaio1或libmecab2。这是因为MySQL的运行依赖于这些系统库,而在离线环境下,apt无法自动从网络仓库下载并安装它们。所以,我们必须手动找到并安装这些缺失的依赖包。
如何找到这些包呢?同样,我们需要在能上网的机器上提前下载好。一个可靠的方法是访问Ubuntu的官方软件包归档网站。以libaio1为例,你可以直接搜索“Ubuntu package libaio1”,找到对应你系统版本的下载链接。例如,对于Ubuntu 20.04 (Focal),libaio1的下载链接可能类似于http://archive.ubuntu.com/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-5_amd64.deb。对于Ubuntu 18.04 (Bionic),版本号会有所不同。libmecab2也是同样的道理。我建议把这两个最常见的依赖包,连同MySQL的主包一起,提前下载好并拷贝到离线机器的同一个工作目录下。
现在,在离线Ubuntu上,你的~/mysql_offline目录里应该有三类文件:MySQL的.deb捆绑包解压出来的一堆文件,以及libaio1和libmecab2的.deb文件。安装顺序很重要。我们应该先安装系统依赖,再安装MySQL组件。在终端中,使用dpkg命令手动安装这两个依赖包:
sudo dpkg -i libaio1_0.3.112-5_amd64.deb sudo dpkg -i libmecab2_0.996-10build1_amd64.debdpkg -i就是安装本地DEB文件的命令。如果安装过程中没有报错,那么恭喜你,已经扫清了最大的障碍。有时候可能会遇到依赖的依赖,但libaio1和libmecab2是基础库,在完整的Ubuntu系统上通常不会再有更深层的依赖问题。完成这一步,我们就为MySQL的安装铺平了道路。
4. 按部就班:执行MySQL 8.0.33的离线安装
依赖问题解决后,就可以正式安装MySQL了。安装需要按照特定的顺序进行,因为后面的包依赖于前面的包。如果顺序错了,dpkg会报出依赖错误。根据我的经验,一个比较稳妥的安装顺序如下。请注意,由于版本差异,Ubuntu 18.04的包可能比20.04多一个插件包,需要优先安装。
对于Ubuntu 20.04系统:进入存放所有.deb文件的目录,依次执行以下命令。每条命令安装一个核心组件:
sudo dpkg -i mysql-common_8.0.33-1ubuntu20.04_amd64.deb sudo dpkg -i mysql-community-client-core_8.0.33-1ubuntu20.04_amd64.deb sudo dpkg -i mysql-community-client_8.0.33-1ubuntu20.04_amd64.deb sudo dpkg -i mysql-client_8.0.33-1ubuntu20.04_amd64.deb sudo dpkg -i libmysqlclient21_8.0.33-1ubuntu20.04_amd64.deb sudo dpkg -i libmysqlclient-dev_8.0.33-1ubuntu20.04_amd64.deb安装完客户端库后,开始安装服务器端。先安装核心服务包:
sudo dpkg -i mysql-community-server-core_8.0.33-1ubuntu20.04_amd64.deb如果之前libaio1和libmecab2已经安装成功,这一步应该顺利进行。接着安装完整的社区服务器包,这是最关键的一步:
sudo dpkg -i mysql-community-server_8.0.33-1ubuntu20.04_amd64.deb执行这个命令时,系统会弹出一个蓝色的文本配置界面(如果是在纯命令行终端,可能会以问答形式出现)。这里会提示你为MySQL的root用户设置密码。请务必设置一个强密码并牢记。之后,通常会让你选择默认的密码认证插件。对于MySQL 8.0,我强烈建议选择caching_sha2_password,这是8.0版本强化的默认认证方式,安全性更高。虽然一些旧的客户端可能不支持,但我们后面要用的Navicat Premium 16是完美支持的。
最后,安装元包来完成整个安装流程:
sudo dpkg -i mysql-server_8.0.33-1ubuntu20.04_amd64.deb对于Ubuntu 18.04系统:步骤基本一致,但解压后的文件列表里,你可能会发现一个名为mysql-community-client-plugins_8.0.33-1ubuntu18.04_amd64.deb的包。在开始安装上述顺序之前,需要先安装这个插件包:
sudo dpkg -i mysql-community-client-plugins_8.0.33-1ubuntu18.04_amd64.deb然后再按照20.04的安装顺序执行即可。全部安装命令执行完毕后,可以启动MySQL服务并检查状态:
sudo systemctl start mysql sudo systemctl status mysql如果看到“active (running)”的字样,说明MySQL服务已经成功在后台运行了。你可以尝试用命令行登录验证一下:
mysql -u root -p输入你刚才设置的密码,如果成功进入MySQL命令行提示符(mysql>),那么最艰难的离线安装部分就大功告成了!
5. 配置MySQL以接受远程连接
默认情况下,新安装的MySQL只允许从本机(localhost)连接。这对于我们后续要用Navicat从Windows机器进行远程管理来说,是不够的。我们需要对MySQL进行一些配置,允许特定用户从远程主机登录。请注意,开启远程连接会带来安全风险,务必在理解的前提下操作,并设置强密码和防火墙规则。
首先,我们需要登录MySQL命令行,修改root用户或者其他管理用户的访问主机限制。有两种常见方法:修改user表,或者使用GRANT授权语句。我更喜欢用GRANT命令,因为它更清晰,也避免了直接操作系统表的风险。假设我们允许root用户从任何IP地址(生产环境慎用)使用密码‘YourStrongPassword123!’连接所有数据库,可以执行:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'YourStrongPassword123!'; mysql> CREATE USER 'root'@'%' IDENTIFIED WITH caching_sha2_password BY 'YourStrongPassword123!'; mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; mysql> FLUSH PRIVILEGES;这里解释一下:第一条命令是确保本地root用户的密码和插件是正确的。第二条命令创建了一个可以从任何主机(%通配符)连接的root用户。第三条命令授予这个用户所有数据库的所有权限。第四条命令FLUSH PRIVILEGES;是让权限更改立即生效。重要提醒:在实际生产环境,出于安全考虑,最好不要允许root用户远程登录,而应该创建一个具有必要权限的普通用户,并限制其可访问的数据库和来源IP。例如:
mysql> CREATE USER 'dev_admin'@'192.168.1.%' IDENTIFIED WITH caching_sha2_password BY 'AnotherStrongPass!'; mysql> GRANT ALL PRIVILEGES ON myapp_db.* TO 'dev_admin'@'192.168.1.%'; mysql> FLUSH PRIVILEGES;这样,用户dev_admin只能从192.168.1.0/24这个网段访问myapp_db数据库。
接下来,我们还需要修改MySQL的配置文件,让它监听所有网络接口,而不仅仅是本地回环地址。使用文本编辑器打开MySQL的配置文件,通常是/etc/mysql/mysql.conf.d/mysqld.cnf:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf找到bind-address这一行,默认可能是:
bind-address = 127.0.0.1将其注释掉(在行首加#),或者改为监听所有地址:
# bind-address = 127.0.0.1 bind-address = 0.0.0.0保存并退出编辑器。最后,别忘了Ubuntu系统自带的防火墙ufw。如果防火墙是开启状态,需要放行MySQL的默认端口3306:
sudo ufw allow 3306/tcp sudo ufw reload完成这些步骤后,重启MySQL服务使所有配置生效:
sudo systemctl restart mysql现在,你的MySQL服务器已经准备好接受来自局域网的连接了。
6. 在Ubuntu上安装和配置Navicat Premium 16
虽然命令行功能强大,但有一个图形化管理工具会让数据库的日常操作、数据浏览和SQL编写方便很多。Navicat Premium就是一款非常流行的多数据库管理工具。它提供了Linux版本,我们可以将其安装在Ubuntu本机上,直接连接本地MySQL进行管理。
首先,我们需要获取Navicat Premium 16 for Linux的安装文件。由于是离线环境,你同样需要在一台有网的机器上,访问Navicat官网,下载Linux版本的安装包。Linux版通常是一个AppImage文件,例如navicat16-premium-en.AppImage。AppImage是一种打包格式,它包含了应用及其所有依赖,无需安装,赋予执行权限后直接运行即可,非常适合离线环境。
将这个AppImage文件拷贝到你的Ubuntu机器上,比如放在~/Applications目录下。然后打开终端,进入该目录,为文件添加可执行权限:
cd ~/Applications chmod +x navicat16-premium-en.AppImage之后,你可以通过双击文件管理器中的图标,或者在终端中执行./navicat16-premium-en.AppImage来启动Navicat。第一次启动可能会比较慢,因为它需要解压自身。启动后,你会看到Navicat的界面。这里有一个几乎所有Linux版Navicat用户都会遇到的问题:试用期。未激活的Navicat只有14天试用期。
对于个人学习或测试,有一种常见的重置试用期的方法(请注意遵守软件许可协议)。Navicat的试用信息通常存储在用户配置目录下。你可以尝试在试用到期后,删除相关的配置文件来重置。关闭Navicat,然后在终端中执行:
rm -rf ~/.config/dconf/user rm -rf ~/.config/navicat # 或者也可能是 ~/.navicat 目录 rm -rf ~/.navicat删除这些目录后,再次启动Navicat,试用期可能会被重置。但这只是一个临时解决方案,并且可能随着版本更新而失效。对于长期、稳定的使用,请考虑支持开发者,购买正版授权。
7. 建立连接:从Navicat到MySQL
Navicat启动并准备好后,我们就可以建立数据库连接了。无论是连接本地的MySQL还是远程的,步骤都类似。点击左上角的“Connection”按钮,选择“MySQL”。会弹出一个连接配置窗口。
连接本地MySQL:
- Connection Name:随便起个名字,比如“Local MySQL 8.0”。
- Hostname / IP Address:这里有个坑需要注意。在Linux版的Navicat连接本地MySQL时,不要填“localhost”。由于一些底层连接库的机制问题,填
localhost可能会使用Unix socket方式连接,有时会遇到权限问题导致连接失败。最稳妥的方式是填写本机回环IP地址:127.0.0.1。 - Port:默认就是
3306。 - Username:输入有权限的用户名,比如
root。 - Password:输入你安装MySQL时设置的密码。
填写完毕后,可以点击左下角的“Test Connection”按钮测试连接。如果一切配置正确,你会看到一个成功的提示。然后点击“OK”保存连接。在左侧连接列表中双击这个新连接,就能展开看到数据库、表、视图等所有对象了。
从Windows的Navicat连接Ubuntu的MySQL:这个场景更常见:你的开发机是Windows,数据库服务器是Ubuntu。首先,确保你已经完成了本章第5节的所有步骤(用户授权、修改bind-address、配置防火墙)。然后,在Windows电脑上安装Navicat Premium 16。
打开Windows的Navicat,新建一个MySQL连接。配置如下:
- Connection Name:例如“Ubuntu Server MySQL”。
- Hostname / IP Address:这里填写你的Ubuntu服务器的局域网IP地址。你可以在Ubuntu终端里用
ip addr或ifconfig命令查看,通常是192.168.x.x这样的地址。绝对不要填127.0.0.1,那是Windows本机的回环地址。 - Port:
3306。 - Username / Password:填写你在Ubuntu的MySQL中创建的、允许从该Windows IP地址远程登录的用户名和密码。
点击测试连接。如果失败,请按以下顺序排查:
- 网络是否通畅:在Windows的命令提示符里
ping一下Ubuntu的IP地址,看是否能通。 - 防火墙是否放行:确认Ubuntu的
ufw防火墙已经允许了3306端口,并且Windows的防火墙也没有阻止出站连接。 - MySQL用户权限:再次确认你在MySQL中创建的远程用户,其
host字段是否正确(是%还是特定的IP),密码和认证插件是否正确。 - MySQL绑定地址:确认
mysqld.cnf中的bind-address是0.0.0.0。
成功连接后,你就可以在Windows上舒适地管理Ubuntu服务器中的数据库了,这对于开发和运维来说效率提升巨大。
8. 实战后的检查清单与常见问题排错
走完整个流程,相信你已经成功搭建起了环境。但在实际使用前,我建议你按照下面的检查清单再过一遍,确保没有遗漏。同时,我也把之前踩坑遇到的一些常见问题及解决方法列出来,希望能帮你节省时间。
安装后检查清单:
- 服务状态:
sudo systemctl status mysql确认服务是active (running)。 - 开机自启:
sudo systemctl is-enabled mysql确认是enabled。如果不是,执行sudo systemctl enable mysql。 - 本地登录:用
mysql -u root -p在Ubuntu终端登录,执行SHOW DATABASES;看看默认数据库是否存在。 - 监听端口:执行
sudo netstat -tlnp | grep mysql,确认MySQL进程正在监听0.0.0.0:3306或:::3306。 - 远程测试:在局域网内另一台机器上,用
telnet <Ubuntu_IP> 3306测试端口是否能通(如果没安装telnet,可以用nmap或在线工具)。
常见问题与排错:
问题一:安装依赖包时提示“依赖关系问题 - 未安装的依赖”这通常是因为你下载的
libaio1或libmecab2的版本与你的Ubuntu系统版本不匹配。务必根据你的Ubuntu版本(20.04或18.04)和架构(amd64)下载对应的deb包。可以尝试在能上网的电脑上,用apt download libaio1 libmecab2命令下载,这样能确保版本绝对匹配。问题二:Navicat连接本地MySQL报错“Can‘t connect to MySQL server on ‘localhost’ (10061)”首先检查MySQL服务是否真的启动了。如果服务是运行的,尝试将连接配置中的“Host”从
localhost改为127.0.0.1。如果还不行,检查MySQL是否监听了端口,使用sudo ss -tlnp | grep 3306查看。问题三:从Windows Navicat连接时报错“Access denied for user ‘root’@‘192.168.x.x’ (using password: YES)”这是典型的权限问题。说明你授权的用户和主机组合不对。登录Ubuntu的MySQL,执行
SELECT user, host FROM mysql.user;,查看是否存在一个host值为你的Windows IP地址或%的root用户(或你使用的用户名)。如果没有,请按第5节的方法重新授权。问题四:连接时报错“Authentication plugin ‘caching_sha2_password’ cannot be loaded”这说明客户端(Navicat)版本太旧,不支持MySQL 8.0的新默认认证插件。解决方法是:要么升级Navicat到较新版本(Premium 16支持),要么在MySQL服务器端将相应用户的认证插件改回旧的
mysql_native_password。修改方法:ALTER USER 'username'@'host' IDENTIFIED WITH mysql_native_password BY 'password';。但出于安全考虑,升级客户端是更好的选择。
整个离线部署和配置的过程,确实比在线安装要繁琐一些,需要手动处理很多细节。但掌握这项技能,能让你在无网、内网等受限环境中依然具备快速部署和维护数据库的能力,这种自主可控的感觉是非常棒的。尤其是在一些特定的开发、测试或交付场景下,这份指南或许能成为你的得力参考。如果在操作中遇到上面没提到的新问题,多利用错误信息去搜索,大部分问题都有解决方案。数据库的旅程才刚刚开始,祝你在Ubuntu和MySQL的世界里探索愉快。