使用pt-show-grants迁移MySQL用户时遇密码哈希格式错误问题
问题原因分析与解决建议
这个报错大概率是MySQL版本/认证插件不兼容导致的,结合你提到的pt-show-grants和SHOW CREATE USER输出一致的情况,具体原因可以从以下几个方向排查:
核心原因:源库与目标库的认证插件/哈希格式不匹配
MySQL不同版本默认的密码认证插件和哈希格式存在差异:
- 5.7及更早版本主要使用
mysql_native_password插件,生成的密码哈希以*开头; - 8.0版本默认使用
caching_sha2_password插件,哈希以$A$开头。
如果源库是8.0,导出的ALTER USER语句携带的是caching_sha2_password格式的哈希,而目标库是5.7,由于5.7不识别这种哈希格式,就会触发ERROR 1827。反过来,若源库是5.7,目标库是8.0,但语句未明确指定认证插件,也可能因8.0更严格的格式检查报错。
其他可能原因
- 目标库配置限制:少数情况下,目标库开启了严格SQL模式(如
STRICT_TRANS_TABLES)或特定安全配置,会对密码哈希的格式检查更严格,导致原本兼容的哈希被判定为格式错误。 - 人为复制失误:即便你确认
pt-show-grants与SHOW CREATE USER输出一致,仍需检查复制的ALTER USER语句中,哈希字符串是否被意外修改(比如多了空格、换行,或复制时截断了部分字符),这类失误也会触发格式错误。
解决建议
核对版本与认证插件
在源库和目标库分别执行以下命令,确认用户使用的认证插件是否一致:SELECT user, plugin FROM mysql.user WHERE user='my_user';修复插件不兼容问题
- 若目标库是5.7,手动修改
ALTER USER语句,指定使用mysql_native_password插件:
(把ALTER USER 'my_user'@'%' IDENTIFIED WITH mysql_native_password BY '*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';*XXXX...替换为导出的哈希字符串) - 若目标库是8.0,优先使用导出的
CREATE USER语句重新创建用户,而非ALTER USER,避免格式检查冲突。
- 若目标库是5.7,手动修改
排查SQL模式影响
临时关闭目标库的严格SQL模式,尝试执行语句:SET sql_mode='';若执行成功,再考虑调整
my.cnf中的永久SQL模式配置。
内容的提问来源于stack exchange,提问作者Astora
相关产品推荐
相关产品推荐

