mysqldump连接MySQL 8.0报caching_sha2_password错误是因客户端不支持默认认证插件,需将备份用户切回mysql_native_password并配置--single-transaction、--skip-lock-tables、--max-allowed-packet等参数确保备份完整可靠。

mysqldump连接MySQL 8.0报caching_sha2_password错误
这不是密码输错,是客户端不支持MySQL 8.0默认的caching_sha2_password认证插件。常见于Docker容器里用了老版本MySQL客户端,或系统PATH混入了5.7的mysqldump。
最稳解法:在服务端把备份用户切回mysql_native_password:
ALTER USER 'backup_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_strong_pass';FLUSH PRIVILEGES;
不推荐升级客户端——容易引发libmysqlclient版本冲突;临时绕过可用--defaults-extra-file指定配置文件,避开命令行触发插件加载异常。
备份中途断连生成半截.sql文件
典型静默失败:文件看似完整,实际最后几行是截断的INSERT或没闭合的CREATE TABLE。根本原因是MySQL服务端主动断开空闲连接,不是网络抖动。
关键参数必须加:
-
--single-transaction(仅InnoDB有效,保证一致性且不锁表) -
--skip-lock-tables(禁用FLUSH TABLES WITH READ LOCK,避免被wait_timeout中断)
更可靠的做法是调高MySQL服务端的wait_timeout和interactive_timeout(例如设为28800),比在mysqldump里加--connect-timeout管用得多。
大库备份卡住或报max_allowed_packet错误
遇到含长BLOB、JSON或TEXT字段的表,mysqldump默认max_allowed_packet=4M会直接退出,报错类似Packets larger than max_allowed_packet are not allowed。
必须显式加大:
- 服务端配置中设
max_allowed_packet = 512M(需重启或SET GLOBAL) - 命令行加
--max-allowed-packet=512M(注意单位是M,不是MB)
同时建议加--default-character-set=utf8mb4防乱码,尤其含emoji或四字节UTF8数据时。
生产可用的全量备份命令模板
以下命令已在MySQL 8.0.26+线上环境验证,覆盖全库、存储过程、事件、触发器、GTID位点等易漏点:
mysqldump \ --defaults-file=/etc/my.cnf \ --single-transaction \ --skip-lock-tables \ --routines \ --triggers \ --events \ --master-data=2 \ --all-databases \ --max-allowed-packet=512M \ --default-character-set=utf8mb4 | gzip > full_backup_$(date +%Y%m%d_%H%M%S).sql.gz
注意:--defaults-file必须放在最前,否则参数可能被忽略;--master-data=2会把当前binlog位置写成注释,用于后续增量恢复;压缩必须用管道接gzip,别用--compress(那是网络压缩,无效)。
真正容易被忽略的是权限校验——执行mysqldump的用户至少要有SELECT、LOCK TABLES(除非用--single-transaction)、SHOW VIEW、TRIGGER、EVENT,全库还要RELOAD。少一个,备份就可能缺结构或跳过某些对象。


















