直接装 mysql-server 会得到 mariadb 而非 mysql,因 debian 12 官方源已用 mariadb-server 替代 mysql 包;必须通过 mysql-apt-config 添加官方仓库(如 bookworm 适配的 mysql 8.4),并正确配置 gpg 密钥与源地址,才能安装真正的 mysql 8.4。

直接装 mysql-server 会得到 MariaDB,不是 MySQL。必须走官方仓库,否则你装的压根就不是 MySQL。
为什么 apt install mysql-server 不行
Debian 12 官方源里没有 MySQL,只有 MariaDB 的 fork 包。执行 apt install mysql-server 实际安装的是 mariadb-server,哪怕命令里写了 mysql —— 这是包名别名陷阱。
- 验证方式:
mysql --version输出含MariaDB字样,就说明踩坑了 -
dpkg --list | grep -i mysql若只看到mariadb相关包,也说明没装对 - 卸载干净再操作:
sudo apt purge mariadb-server mariadb-client+sudo apt autoremove
用 mysql-apt-config 添加官方仓库(推荐)
这是最稳定、可复现、适配 Debian 12(bookworm)的方式,且能控制安装 8.4.x 等 LTS 版本。
- 下载配置包:
wget https://dev.mysql.com/get/mysql-apt-config_0.8.36-1_all.deb(2026 年最新版) - 安装并交互选择:
sudo dpkg -i mysql-apt-config_0.8.36-1_all.deb→ 用方向键选中mysql-8.4→ Tab 切到OK→ 回车 - 更新索引:
sudo apt update,此时应看到Hit: ... mysql-8.4 ...行 - 装服务:
sudo apt install mysql-server,过程中会弹出图形化密码设置界面(不是终端输入),务必设强密码
手动导入 GPG 密钥失败时怎么办
如果 apt update 报 NO_PUBKEY B7B3B788A8D3785C 或 InRelease not signed,说明密钥没生效,不是网络或源地址问题。
- 删旧密钥残留:
sudo rm /usr/share/keyrings/mysql.gpg - 重导密钥(必须用 dearmor):
curl -fsSL https://repo.mysql.com/RPM-GPG-KEY-mysql-2025 | sudo gpg --dearmor -o /usr/share/keyrings/mysql.gpg - 设权限:
sudo chmod 644 /usr/share/keyrings/mysql.gpg - 检查
/etc/apt/sources.list.d/mysql.list内容是否为:deb [arch=amd64 signed-by=/usr/share/keyrings/mysql.gpg] http://repo.mysql.com/apt/debian bookworm mysql-8.4(注意:代号必须是bookworm,不是buster或空) - 清缓存再试:
sudo rm -rf /var/lib/apt/lists/* && sudo apt clean && sudo apt update
装完必须立刻做的三件事
MySQL 8.4 默认绑定 127.0.0.1、禁用远程 root、不创建普通用户——不处理就等于“装了但连不上”。
- 运行安全初始化:
sudo mysql_secure_installation,按提示删匿名用户、禁 root 远程、删 test 库 - 若需远程访问,改
/etc/mysql/mysql.conf.d/mysqld.cnf中的bind-address = 127.0.0.1为0.0.0.0或具体 IP,然后sudo systemctl restart mysql - 创建远程用户(别直接开 root 远程):
CREATE USER 'app'@'192.168.1.%' IDENTIFIED BY 'StrongPass!2026'; GRANT ALL ON *.* TO 'app'@'192.168.1.%'; FLUSH PRIVILEGES;
最容易被忽略的是:MySQL 8.4 默认启用 caching_sha2_password 插件,老客户端(如某些 Python MySQLdb 驱动、旧版 Navicat)可能连不上,需要显式指定插件或建用户时用 IDENTIFIED WITH mysql_native_password。这个兼容性开关不在安装阶段体现,而是在首次连接时才暴露。











