Debian 12 默认不提供 MySQL,只预装 MariaDB;直接 apt install mysql-server 安装的是 MariaDB,不是 MySQL,因官方源已将该包名重定向至 mariadb-server,导致服务、认证插件及配置均不兼容 MySQL 8.0。

Debian 12 默认不提供 MySQL,只预装 MariaDB;直接 apt install mysql-server 安装的是 MariaDB,不是 MySQL。必须先添加 MySQL 官方 APT 仓库,否则装不上真正的 MySQL 8.0。
为什么不能直接 apt install mysql-server
Debian 12 的官方源已将 mysql-server 包名重定向到 mariadb-server。即使你执行该命令,实际安装的是 MariaDB,并且服务名、配置路径、默认认证插件都与 MySQL 8.0 不兼容——后续连接报错 ERROR 1045 (28000): Access denied for user 'root'@'localhost' 很可能就源于此。
- 验证方式:运行
apt-cache policy mysql-server,若输出中显示来源是http://deb.debian.org/debian而非http://repo.mysql.com/,说明还没加官方源 - 卸载残留 MariaDB 再操作更稳妥:
sudo apt purge mariadb-server mariadb-client,再清理依赖:sudo apt autoremove
安装 mysql-apt-config 时卡在交互界面或报 gnupg 预依赖错误
dpkg -i mysql-apt-config_*.deb 执行后弹出 ncurses 界面,必须用 Tab 键切换到 OK(不是回车),否则安装中断;若提示 mysql-apt-config 预依赖于 gnupg,说明系统缺少 GPG 工具:
- 先运行
sudo apt install gnupg,再重试dpkg -i - 下载的
mysql-apt-config版本需匹配 Debian 12(bookworm),例如mysql-apt-config_0.8.36-1_all.deb;旧版本(如 bionic 适配 Ubuntu)在 Debian 12 上可能无法正确写入源地址 - 安装后务必执行
sudo apt update,然后确认源已生效:apt-cache policy mysql-server应显示候选版本来自http://repo.mysql.com/apt/debian bookworm/mysql-8.0
安装过程中 root 密码设为空或跳过,后续无法登录
MySQL 8.0 默认启用 caching_sha2_password 插件,且安装时若跳过密码设置(比如按 Tab 选 Cancel),root 用户会处于无密码 + 插件锁定状态,mysql -u root 直接拒绝访问。
- 安装时务必在弹窗中输入强密码(含大小写字母、数字、符号),不要跳过
- 若已跳过,不要尝试用空密码登录,也不要直接改
/etc/mysql/debian.cnf——那是 MariaDB 的配置;正确做法是临时跳过权限验证启动:sudo systemctl stop mysql→sudo mysqld --skip-grant-tables --skip-networking &→mysql -u root→ 执行ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码'; FLUSH PRIVILEGES; - 注意:MySQL 8.0 不再支持
password字段直接更新,必须用ALTER USER ... IDENTIFIED WITH
mysql_secure_installation 运行失败或提示 “Can't connect to local MySQL server”
常见原因是 MySQL 服务未运行,或 socket 路径不匹配(尤其在离线安装或自定义 datadir 后)。该脚本依赖 mysql 客户端能本地连接,且默认使用 /var/run/mysqld/mysqld.sock。
- 先确认服务状态:
sudo systemctl status mysql,若 inactive,手动启动:sudo systemctl start mysql - 检查 socket 路径:
sudo mysql --socket=/var/run/mysqld/mysqld.sock -u root -p,如果报错Can't connect to... No such file,查看真实路径:sudo grep "socket" /etc/mysql/mysql.conf.d/mysqld.cnf - 若 socket 在
/tmp/mysql.sock,运行脚本时指定:sudo mysql_secure_installation --socket=/tmp/mysql.sock - 该脚本默认禁用 root 远程登录,如需远程访问,需额外执行
CREATE USER 'root'@'%' IDENTIFIED WITH caching_sha2_password BY '密码'; GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;,并开放防火墙端口
最易被忽略的一点:MySQL 8.0 的默认字符集是 utf8mb4,但某些老应用连接时未声明 charset=utf8mb4,会导致插入 emoji 或四字节 UTF-8 字符失败,现象是 Incorrect string value 报错——这不是安装问题,但常在安装完成后第一时间暴露。


















