Ubuntu 22.04执行mysql_tzinfo_to_sql时遇Access Denied错误求助
MySQL 8.0.36导入时区信息时root用户Access Denied问题排查与解决
问题场景
在Ubuntu 22.04.4 LTS系统上运行MySQL 8.0.36,尝试通过mysql_tzinfo_to_sql导入时区信息时,始终触发ERROR 1045 (28000): Access denied for user 'root'@'localhost'错误。已尝试多种命令组合,且MySQL root密码可正常登录终端执行查询,/usr/share/zoneinfo目录有效。
可能原因及解决步骤
1. 密码特殊字符导致bash解析异常
如果MySQL root密码包含空格、$、!、'等特殊字符,直接在命令行用-p'密码'或-p"密码"可能被bash转义,导致传递给mysql的密码不正确。
解决方式:
避免在命令行直接写密码,改用交互式输入:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
执行后手动输入正确的MySQL root密码(注意不要输入bash root密码)。
2. 管道执行时的socket连接问题
MySQL默认通过Unix socket连接localhost,部分场景下管道执行可能导致socket路径读取异常。
解决方式:
强制使用TCP连接,指定-h 127.0.0.1:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p -h 127.0.0.1 mysql
执行后输入MySQL root密码。
3. 拆分管道操作,分步执行
管道可能掩盖中间环节的问题,拆分操作先导出时区SQL文件,再导入:
- 导出时区SQL到本地文件:
mysql_tzinfo_to_sql /usr/share/zoneinfo > timezone.sql
- 登录MySQL导入文件:
mysql -u root -p mysql < timezone.sql
输入MySQL root密码完成导入,之后可删除临时文件rm timezone.sql。
4. 确认MySQL root用户的认证方式
登录MySQL终端,执行以下命令查看root用户的认证插件:
SELECT user, host, plugin FROM mysql.user WHERE user='root';
- 如果插件为
auth_socket:说明root用户依赖系统用户认证,无需密码,直接执行以下命令导入(无需-p参数):mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql - 如果插件为
caching_sha2_password或mysql_native_password:确保使用正确的MySQL root密码,参考步骤1、2操作。
验证导入结果
导入完成后,登录MySQL终端执行以下命令验证时区表是否正常:
SELECT * FROM mysql.time_zone LIMIT 5;
若返回结果则说明导入成功。
内容的提问来源于stack exchange,提问作者HerrimanCoder
相关产品推荐
相关产品推荐

