mysql 8.0备份失败主因是caching_sha2_password认证插件不被旧客户端支持,应为备份用户显式指定mysql_native_password插件并注意host粒度、密码特殊字符及连接方式。

MySQL 8.0备份工具连不上,大概率是caching_sha2_password在拦路
不是备份脚本写错了,也不是权限没开——Xtrabackup、mysqldump 或自研备份程序启动时卡在认证阶段,报错 Authentication plugin 'caching_sha2_password' cannot be loaded 或直接拒绝连接,基本就是这个插件不被客户端支持。老版本 Xtrabackup(如 2.4)、PHP 7.3 以下的 mysqldump 封装、甚至某些 Shell 脚本里硬编码的 mysql 命令,都没实现 caching_sha2_password 所需的 RSA 密钥交换或 TLS 协商流程。
Xtrabackup 8.0 连 MySQL 8.0 必须用 mysql_native_password 用户
Xtrabackup 8.0 虽然支持 MySQL 8.0,但它默认仍走传统握手路径,对 caching_sha2_password 的兼容仅限于启用 SSL 或配置 RSA 公钥——而绝大多数备份场景既没配 SSL,也没在 MySQL 服务端部署 public_key_path。最稳做法是单独建一个备份专用用户,并强制指定认证方式:
CREATE USER 'backup'@'localhost' IDENTIFIED WITH mysql_native_password BY 'strong_pass_123';GRANT RELOAD, PROCESS, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'backup'@'localhost';FLUSH PRIVILEGES;
注意:别用 root 用户跑备份——万一密码策略变更或插件被误改,整个备份链就断了;也别只改 'backup'@'%',Xtrabackup 通常走本地 socket,'backup'@'localhost' 才生效。
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
mysqldump 连接失败时,hostname 别写 localhost
Linux 下 mysql -h localhost -u backup -p 实际走的是 Unix socket,而 socket 认证会绕过 TCP 层的插件协商逻辑,看似能连,但 mysqldump 内部可能仍尝试走 TCP,导致行为不一致。更可靠的做法是显式走 TCP:
- 把连接参数中的
-h localhost换成-h 127.0.0.1 - 确保该 IP 对应的用户存在且插件已切:
ALTER USER 'backup'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY 'same_pass'; - 如果备份脚本里用了 URL 格式(如
mysql://backup:pass@localhost/db),密码含@或/会被解析器截断——改用环境变量传参或配置文件更安全
云数据库 RDS 备份失败,ALTER USER 是唯一解
阿里云 RDS、腾讯云 CDB 这类托管服务,你没法改 my.cnf,也不能重启实例,default_authentication_plugin 配置项根本不可写。这时候唯一可行路径就是 ALTER USER ——但容易漏掉三点:
- 查清楚你备份程序连的是哪个 host:
SELECT user, host, plugin FROM mysql.user WHERE user = 'backup';,别只改'backup'@'%'却忽略'backup'@'rds-xxx.mysql.rds.aliyuncs.com' - 执行
ALTER USER必须带BY 'password',光写IDENTIFIED WITH mysql_native_password会清空密码 - 改完立刻
FLUSH PRIVILEGES;,否则新插件不生效,而且 RDS 控制台“重置密码”操作会覆盖你手动设的插件类型
真正卡住人的往往不是插件切换本身,而是备份账户的 host 粒度太细、密码特殊字符被 URL 解析吃掉、或者 Xtrabackup 启动时没加 --user 参数导致默认用 socket 连 root——这些细节比认证机制本身更常让备份静默失败。










