必须先彻底卸载MariaDB(含mysql-common、/var/lib/mysql等所有残留),再添加Oracle官方APT仓库(如mysql-apt-config_0.8.36-1_all.deb)并安装mysql-server,否则默认安装的是MariaDB而非MySQL 8.0。

直接装 mysql-server 不会得到 MySQL 8.0,而是 MariaDB —— Debian 12 默认源里根本没有官方 MySQL 8.0 的包。想真正用上 MySQL 8.0,必须先清干净 MariaDB(含所有残留),再手动添加 Oracle 官方 APT 仓库。
先停服务、杀进程、清端口
Debian 12 预装的是 mariadb 服务,不是 mysql。不先干掉它,后续 MySQL 初始化会因端口冲突或 socket 占用直接失败。
-
sudo systemctl stop mariadb—— 必须执行,不能跳过 -
ps aux | grep -E '(mariadb|mysqld)'—— 若还有残留进程,用kill -9杀净 -
sudo ss -tlnp | grep ':3306'—— 确保 3306 端口空闲,否则mysql-server安装时会卡在初始化阶段
purge 包 + 手动删文件 + 清用户
只用 apt remove 是无效的:mysql-common 这个包控制全局配置和符号链接,不 purge 就会导致新 MySQL 的 mysql 命令仍指向旧二进制,或者初始化报 Directory not empty。
- 执行完整卸载:
sudo apt purge mariadb-server mariadb-client mariadb-common mysql-common -y - 删数据与配置目录:
sudo rm -rf /var/lib/mysql /etc/mysql /var/log/mysql /run/mysqld - 删配置文件残留:
sudo rm -f /etc/my.cnf /etc/mysql/debian-start /var/run/mysqld/mysqld.sock* - 删系统用户:
sudo userdel -r mysql 2>/dev/null(若提示不存在可忽略) - 验证是否清空:
dpkg -l | grep -i mariadb和which mysqld应无输出
加官方 APT 源再装 MySQL 8.0
Debian 12 的默认源只有 MariaDB;mysql-apt-config 包本质是修改 /etc/apt/sources.list.d/mysql.list,让 apt 能识别 Oracle 官方仓库里的 mysql-server 包。
- 下载对应 bookworm 的包:
wget https://dev.mysql.com/get/mysql-apt-config_0.8.36-1_all.deb(截至 2026 年 10 月最新版) - 安装前确保
gnupg已就位:sudo apt install gnupg -y,否则dpkg -i会因预依赖失败 - 交互式安装:
sudo dpkg -i mysql-apt-config_*.deb→ 方向键选中mysql-8.0→ Tab 切到Ok→ 回车 - 更新并安装:
sudo apt update && sudo apt install mysql-server -y—— 安装过程会弹出密码设置界面,务必设强密码(含大小写字母+数字+特殊字符)
验证与关键兼容性注意点
装完别急着连:MySQL 8.0 默认用 caching_sha2_password 认证插件,老客户端(如某些 Python MySQLdb 驱动、旧版 Workbench)可能连不上,报 Authentication plugin 'caching_sha2_password' cannot be loaded。
- 登录验证:
sudo mysql -u root -p,输入刚设的密码,成功进入即表示服务正常 - 检查认证方式:
SELECT user, host, plugin FROM mysql.user WHERE user='root';,若需兼容老客户端,可运行:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password'; -
sudo systemctl status mysql应显示active (running),且已自动启用开机自启 - 别漏掉
mysql_secure_installation—— 它不只是删测试库,还会禁用匿名用户、禁止 root 远程登录(除非你明确需要),这步在生产环境不可跳过
最易被忽略的是 mysql-common 和 /var/lib/mysql 的双重残留:前者导致命令错乱,后者让初始化直接失败。清理不彻底,后面所有操作都是在给错误堆叠补丁。


















