debian 12执行apt install mysql-server会失败,因官方源已移除该包,仅保留mariadb替代;必须通过mysql官方apt仓库(如安装mysql-apt-config.deb并选mysql-8.4)或手动安装deb-bundle才能成功。

直接用 apt install mysql-server 在 Debian 12 上大概率会失败——官方源已移除 MySQL,只剩 MariaDB;必须通过 MySQL 官方 APT 仓库或手动安装 deb 包才能成功。
为什么 apt install mysql-server 会报错
Debian 12 默认软件源里没有 mysql-server 包,执行后通常返回:E: Package 'mysql-server' has no installation candidate。这不是网络或权限问题,是上游策略变更:MySQL 自 2023 年起不再被 Debian 官方收录,MariaDB 成为默认替代品。
常见错误现象包括:
- 运行
sudo apt search mysql只看到mariadb-server,无任何mysql-开头的包 -
apt update后仍无法apt install mysql-server - 误装
mariadb-server后发现客户端协议、默认密码插件、系统表结构均不兼容 MySQL 应用
用 MySQL APT 仓库安装(推荐在线环境)
这是最接近“标准流程”的方式,能自动处理依赖、配置 systemd、生成初始 root 密码,并适配 Debian 12.9+ 的 libc 和 OpenSSL 版本。
操作步骤:
- 下载并安装仓库配置包:
wget https://repo.mysql.com/mysql-apt-config_0.8.29-1_all.deb && sudo dpkg -i mysql-apt-config_0.8.29-1_all.deb,安装时用TAB选中MySQL Server & Cluster,再选mysql-8.4(非 8.0),最后按OK - 更新索引:
sudo apt update—— 此时mysql-server才真正可识别 - 安装服务:
sudo apt install mysql-server—— 安装过程中会弹出图形化密码设置界面,**不要跳过**;若没弹出,说明仓库配置未生效,需重装 deb 并确认选项 - 验证状态:
sudo systemctl status mysql应显示active (running)
注意:mysql_secure_installation 必须在首次启动后立即运行,否则匿名用户、测试库、远程 root 等风险项默认开启。
手动安装 deb-bundle(离线/定制化场景)
当服务器完全断网、或需精确控制版本(如 mysql-server_8.4.4-1debian12_amd64.deb-bundle.tar)时,必须按依赖顺序安装 deb 包,否则 dpkg 会因缺失 libmecab2 或 libssl1.1 报错退出。
关键顺序和要点:
- 先装基础依赖:
sudo dpkg -i mysql-common_*.deb→mysql-community-client-plugins_*.deb→mysql-community-client-core_*.deb - 再装服务核心:
mysql-community-server-core_*.deb→mysql-community-server_*.deb - 最后补全:
sudo apt-get install -f自动修复未满足依赖(如libaio1、libnuma1) - 初始化失败常见于:
mysqld --initialize --user=mysql报Can't find error-message file,说明mysql-community-client包未装,缺errmsg.sys
安装后不会自动生成 root 密码,需查日志:sudo grep 'temporary password' /var/log/mysql/error.log,或手动初始化并指定 --initialize-insecure(仅限内网测试)。
初始化后必须做的三件事
无论哪种安装方式,只要 mysqld 进程起来,就立刻执行以下操作,否则数据库处于高危状态:
- 运行
sudo mysql_secure_installation,对所有提示选Y(尤其禁用匿名用户、删除 test 库、禁止远程 root) - 检查认证插件:
SELECT user, host, plugin FROM mysql.user WHERE user='root';,若 plugin 是caching_sha2_password,而旧应用不支持,需执行:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_strong_password'; - 确认监听地址:
sudo grep bind-address /etc/mysql/mysql.conf.d/mysqld.cnf,默认是127.0.0.1;如需远程访问,改为0.0.0.0并开放防火墙端口3306,但切勿在公网暴露 root
最容易被忽略的是:Debian 12 下 mysql_secure_installation 不会自动禁用 debian-sys-maint 用户,该账户密码明文存于 /etc/mysql/debian.cnf,一旦泄露等于 root 权限泄露,务必在加固后手动删除或限制其权限。











