我正在尝试根据此文档导入时区:http://dev.mysql.com/doc/refman/5.7/en/mysql-tzinfo-to-sql.html。
当我尝试通过终端命中第一个命令时,即
mysql_tzinfo_to_sql tz_dir
它说
There were fatal errors during processing of zoneinfo directory 'tz_dir'
当我跑步时:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql
然后它返回
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
操作系统: Ubuntu
服务器: XAMPP(有mariadb)
因此,我无法将时区数据导入mysql
数据库的区域表。
答案 0 :(得分:1)
我今天早上尝试在生产服务器上填充时区表(使用CentOS)时也遇到了这个问题。
我通过从开发计算机导出表创建脚本解决了这个问题(在Windows上填充表只需要下载表并将它们复制到正确的目录中)。
我稍微调整了创作脚本,现在它正在为我工作:
由于脚本太长,我无法将其发布在我的答案中。
https://drive.google.com/file/d/0B7iwL5F-hwr_YkItRXk2Z1VZdlE/view?usp=sharing
这是一个带注释的版本(但它似乎不起作用,所以请使用没有注释的版本。)
https://drive.google.com/file/d/0B7iwL5F-hwr_dWdjTDREcXNHQmM/view?usp=sharing
脚本运行时间不应超过几秒钟。您可能需要使用root
用户才能运行它。
您可以使用此查询来验证安装:
SELECT CONVERT_TZ(CURRENT_DATE(),'UTC','America/Montreal');
如果它返回NULL
而不是datetime
,则表示脚本失败。
成功
答案 1 :(得分:1)
There were fatal errors during processing of zoneinfo directory 'tz_dir'
错误消息表示无法读取目录(访问权限不足或甚至不存在)。
知道mysql_tzinfo_to_sql
程序只是将一堆时区文件转换为可用于安装mysql时区的SQL脚本的工具,您的任务如下:
如果您在不同的计算机之间传输文件,则可以在不同的计算机上执行这些步骤。例如,我在没有完成mysql安装的机器上安装了时区,也就是说,mysql_tzinfo_to_sql
不可用,我也无法安装它。
在这种情况下,您可以结合以下步骤:
mysql_tzinfo_to_sql
,那么找一台已安装mysql_tzinfo_to_sql
的计算机zoneinfo
文件夹可用。它只是不同文件夹中的一堆文件,因此您可以将它们以gzip文件的形式从一台计算机传输到另一台计算机。在正常的mysql安装中,这个文件夹应该存在但是你的安装可能不完整,只需从任何地方获取它。执行mysql_tzinfo_to_sql
命令创建如下的SQL脚本:
mysql_tzinfo_to_sql path-to-your-zoneinfo-folder >install_mysql_zoneinfo.sql
将创建的SQL脚本移动到mysql数据库所在的计算机上*
执行如下脚本:
mysql --user=root --password=abc123 mysql <install_mysql_zoneinfo.sql
根据需要调整用户名和密码,然后执行脚本。这将使用适当的值填充与时区相关的表,您将能够使用它们:
SELECT convert_tz(NOW(),'UTC','Australia/Melbourne');
-h <hostname>
命令行参数添加到后续脚本执行程序就足够了,您不必复制SQL脚本到目标机器。