直接 apt install mysql-server 会自动安装最高版本(如8.0.37)而无法指定小版本;需先添加MySQL官方源、更新索引、用 apt list -a 查看并安装指定完整版本号(如8.0.33-0ubuntu0.22.04.1),再立即 apt-mark hold 锁定,否则 upgrade 会覆盖;还需配置 default_authentication_plugin=mysql_native_password 避免旧客户端认证失败。

为什么直接 apt install mysql-server 不行
因为 Ubuntu/Debian 默认源里的 mysql-server 包名不带版本号,apt 会自动选最高可用版本(比如当前是 8.0.37),根本不会给你选 8.0.33 或 8.0.35 的机会。你看到的“安装成功”其实是系统替你做了决定,不是你控制的。
怎么查到可安装的具体小版本号
必须先让系统知道 MySQL 官方源里有哪些包,否则 apt list -a mysql-server 只会显示默认源里的那一个版本。操作顺序不能跳:
- 下载并安装官方配置包:
wget https://dev.mysql.com/get/mysql-apt-config_0.8.26-1_all.deb && sudo dpkg -i mysql-apt-config_0.8.26-1_all.deb(安装时用空格选中MySQL Server & Cluster,按 Tab 切到 OK 确认) - 更新索引:
sudo apt update(这步漏了就什么都查不到) - 列出所有可用版本:
apt list -a mysql-server,输出类似:mysql-server/jammy-updates,now 8.0.37-0ubuntu0.22.04.1 amd64 [installed]
mysql-server/jammy-updates 8.0.33-0ubuntu0.22.04.1 amd64
mysql-server/jammy-updates 8.0.32-0ubuntu0.22.04.1 amd64
注意第二列的完整版本字符串——8.0.33-0ubuntu0.22.04.1 才是你要复制粘贴的,缺一位都不行。
安装后必须立刻锁定版本
否则下次 apt upgrade 会悄无声息地把你的 8.0.33 升到 8.0.37,而你可能完全没意识到。锁定命令只对当前已安装的包生效:
- 安装指定版本:
sudo apt install mysql-server=8.0.33-0ubuntu0.22.04.1 - 立即锁定:
sudo apt-mark hold mysql-server - 验证是否生效:
apt-mark showhold应该输出mysql-server
如果中途出错(比如依赖冲突),别硬装,先跑 sudo apt --fix-broken install,再重试。强行忽略依赖很容易导致 mysqld 启动失败。
caching_sha2_password 插件会导致旧客户端连不上
MySQL 8.0.4+ 默认认证方式是 caching_sha2_password,但很多老工具(如 Navicat 12 以下、某些 Python 的 MySQLdb 驱动)根本不支持。连接时会报错:ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded。
临时解法是在首次登录后执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
但更稳妥的做法是安装完服务、还没初始化用户前,就编辑 /etc/mysql/mysql.conf.d/mysqld.cnf,在 [mysqld] 段落下加一行:default_authentication_plugin=mysql_native_password,然后重启服务。这个细节几乎没人提,但能省掉后续一堆连接排查。


















