You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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文件,再导入:

  1. 导出时区SQL到本地文件:
mysql_tzinfo_to_sql /usr/share/zoneinfo > timezone.sql
  1. 登录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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 09:25:00