最近又有朋友在群里问,Ubuntu上面怎么装MySQL,装到一半卡住了怎么处理,还有人说装完之后密码不对进不去。这些场景我太熟悉了,从最早在大学用VMware开Ubuntu虚拟机折腾,到后来在公司负责Linux服务器的数据库部署,再到现在自己搭开发环境,Ubuntu环境下安装MySQL这个组合,前前后后至少操作过几十次。
说容易也容易,apt一条命令就能把服务跑起来;说麻烦也麻烦,版本选型、安全初始化、字符集、远程权限、参数调优,每个环节都有讲究。这篇文章我把整套流程和踩过的坑整理出来,从环境准备、安装方式选型到安全配置和问题排查,尽量写得可以直接照着做。适合刚入手Linux的新人,也适合在服务器上部署数据库时想少走弯路的运维和开发朋友。
1. 为什么是Ubuntu + MySQL:装之前先分清场景和版本
1.1 版本选型:系统自带的MySQL和官方源里的MySQL是两码事
Ubuntu的软件仓库里一直有mysql-server包,但它不一定是你想要的最新版。拿Ubuntu 20.04来说,自带源里的MySQL通常停留在8.0.19左右,安全补丁和bugfix都是滞后的;到了22.04和24.04,自带源里的8.0版本会稍微新一些,但同样不是官方源里从头维护的那种。假如你只是本地临时起个服务,系统自带版够用;但如果你要跑业务、要长期维护,我更建议直接用MySQL官方提供的APT仓库。
这里有个细节值得说清楚:Ubuntu源里那个mysql-server实际上也来自MySQL官方,只是发行版在打包发布时会把版本号固定下来,后续不会再主动跟着官方版本走。MySQL官方源则不同,它会持续推送新的小版本,比如从8.0.33升到8.0.34,这类维护一旦中断,后面遇到bug就要自己去查补丁了。所以多花两分钟配官方源,长期看是划算的。
还有一部分朋友会问MariaDB行不行。作为一个从MySQL移植过来的分支产品,MariaDB在绝大多数场景下确实能无缝替换,很多云厂商的"MySQL兼容"服务底层其实就是MariaDB或者Percona。但如果你依赖的是MySQL 8.0的某些新特性,比如窗口函数、CTE(公共表表达式)、caching_sha2_password认证插件,或者你要用Navicat、MySQL Workbench这类工具直接连,那就老老实实装MySQL。MariaDB的默认认证插件和8.0不一样,某些客户端连接时会碰到旧客户端不支持新认证协议的问题。
1.2 四种安装方式:apt、tar包、源码编译与容器化
| 安装方式 | 优点 | 缺点 | 适合场景 |
|---|---|---|---|
| apt安装 | 最快、依赖自动处理、systemd服务自动配置好 | 版本受仓库控制 | 绝大多数开发/生产环境 |
| tar.gz二进制包 | 版本任意选、不受系统源管控、可安装到任意目录 | 需要自己初始化数据目录和配置文件 | 需要特定版本或自定义安装路径 |
| 源码编译 | 可定制编译参数、适配特定CPU/内核优化 | 耗时长、依赖gcc/cmake等工具链、升级麻烦 | 嵌入式平台或极致优化需求 |
| Docker容器 | 环境隔离、秒级启动、方便迁移 | 有一定性能损耗、需要额外学习容器操作 | 测试开发环境、微服务架构 |
我见过不少新手一上来就找"源码编译安装MySQL 8.0",因为网上有教程,觉得"自己编译才厉害"。但说句实在话,绝大多数场景下根本不需要这么做。源码编译要装gcc、make、cmake、ncurses等一堆工具链,在Ubuntu上如果build-essential没装好,光是安装gcc失败这个报错就能卡半天(后面第5章我会细说)。编译一次花费几十分钟属于常态,而且编译出来的版本后续升级还是得走编译流程。如果你的需求只是跑一个数据库服务,apt是最稳的;如果你确实有特殊版本需求,请用官方编译好的二进制包,别自己从源代码折腾。
容器的路线也说一下。如果你的环境是Kubernetes这类容器平台,或者想要一个用完就扔的本地测试库,直接用Docker跑官方mysql:8镜像会非常省事:
docker run --name mysql-test -e MYSQL_ROOT_PASSWORD=your_password -d mysql:8
不用手工初始化,不用管systemd,数据目录挂出来就行。不过容器方式对网络和磁盘I/O有额外开销,生产环境的数据库我更倾向裸机或虚拟机上的apt安装,这块见仁见智吧。
1.3 环境定位:开发机、测试机和生产机的安装思路完全不同
同样是搭MySQL,在不同环境下的姿势差很远。在开发笔记本或虚拟机上,你怎么折腾都行,装错版本卸载重来也快,甚至可以开多个容器伺候不同项目的数据库。但到了生产服务器上,原则就变成:少操作、少变更、每一步都要有回滚预案。比如"apt upgrade"这种命令在开发机上没什么风险,但生产机上如果因为升级内核或库文件导致服务起不来,那就麻烦了。
还有一点是关于虚拟机和双系统的。很多人学Linux是先装一个VMware或VirtualBox,然后在虚拟机里跑Ubuntu镜像。这种环境装MySQL跟在物理机上没有本质区别,apt逻辑完全一样。如果你用的是Windows的WSL2,把Ubuntu作为发行版跑起来,装MySQL的步骤也基本适用,只是WSL2的场景下systemd可能没有默认启用,需要用service mysql status来管理服务,这点在5.1小节会再提到。
2. 动手前的环境准备:先把系统基础打牢
2.1 更新系统与安装基础工具
安装MySQL之前,先把系统更新一遍,避免软件源里的包索引太旧导致安装报404或版本冲突。按顺序执行:
sudo apt update
sudo apt upgrade -y
第一条update是刷新软件包索引,第二条upgrade是把已安装的软件升到源里的最新版。这里要说明一下,upgrade要不要执行,取决于环境。我自己的习惯是:本地虚拟机直接升;生产服务器先看变更记录,确认没有特别针对内核或重要库的升级再决定,毕竟生产环境稳定第一。另外,升级完如果涉及内核更新,一般建议重启一次再继续装MySQL,否则旧内核还在占用某些资源,数据库起来之后表现可能不太对。
接下来装基础依赖:
sudo apt install -y wget curl gnupg lsb-release
wget和curl后面要做下载;gnupg用于导入MySQL官方源的GPG签名,这个步骤很重要,如果跳过,apt在更新源的时候就会因为签名校验失败拒绝安装;lsb-release则用来识别当前Ubuntu的发行版代号,方便配置源路径。
2.2 确认系统版本与架构
装之前先确认两件事:系统是什么版本、CPU是什么架构。命令很简单
2793




被折叠的 条评论
为什么被折叠?



