mysql 5.1.73 加载数据本地infile错误
Posted
技术标签:
【中文标题】mysql 5.1.73 加载数据本地infile错误【英文标题】:mysql 5.1.73 load data local infile error 【发布时间】:2015-03-27 12:55:38 【问题描述】:我正在尝试使用下面的代码使用 LOAD DATA LOCAL INFILE 将数据加载到 mysql 表中。
LOAD DATA LOCAL INFILE 'unziped/product.csv' INTO TABLE producttemp FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\' LINES TERMINATED BY '\r\n'
直到几天前,我的脚本运行良好,但托管公司将 mysql 更新为 5.1.73,现在我收到错误“此 MySQL 版本不允许使用的命令”。
我不知道服务器上以前是什么版本。这个命令在 mysql 5.3 和 5.5 上也可以正常工作
这里有什么问题?
我尝试谷歌但找不到任何类似的问题
【问题讨论】:
您是否从php
代码运行该命令?如果是,您使用什么 PHP 扩展与数据库通信(mysql/mysqli/PDO)?
如果你不是从 PHP 运行它,你为什么要使用 PHP 标签?
【参考方案1】:
如果您从 PHP
代码运行该命令,则可以在与 MySQL 服务器的连接上启用 LOAD DATA LOCAL INFILE
命令。
具体过程取决于用于与 MySQL 通信的 PHP 扩展。
使用旧的、已弃用的 mysql
扩展:
像往常一样,将128
放入mysql_connect()
、OR
-ed 的参数$flags
中,以及您可能需要的其他MYSQL_CLIENT_*
标志。值128
启用LOAD DATA LOCAL
处理,但没有为它定义常量。
阅读mysql_connect()
的文档页面。
// Put your connection parameters in $server, $username, $password as usual
$server = '127.0.0.1';
$username = 'root';
$password = '****';
// Put 128 bitwise OR-ed with other flags, if needed
$flags = 128;
// ... and connect
$link = mysql_connect($server, $username, $password, $new_link, $flags);
使用mysqli
扩展:
使用mysqli_options()
函数将MYSQLI_OPT_LOCAL_INFILE
设置为TRUE
:
$link = mysqli_init();
mysqli_options($link, MYSQLI_OPT_LOCAL_INFILE, TRUE);
mysqli_real_connect($server, $username, $password);
正如文档中所述,这是使用mysqli_options()
的正确方法。
使用PDO
:
在PDO
构造函数的$options
参数上将选项PDO::MYSQL_ATTR_LOCAL_INFILE
设置为TRUE
:
$options = array(
PDO::MYSQL_ATTR_LOCAL_INFILE = TRUE;
);
$link = new PDO($dsn, $username, $password, $options);
【讨论】:
它是一个 php 脚本,我使用 mysql。 @axiac 我尝试了您的 mysql 扩展解决方案,但仍然收到相同的消息。我看不到或更改 my.conf【参考方案2】:这可能是因为 /etc/my.conf 中的默认设置改变了 应该设置一个标志以使其再次起作用:
local-infile = 1
您也可以尝试通过命令行连接并明确设置标志:
mysql --local-infile -u root -p db_name
【讨论】:
以上是关于mysql 5.1.73 加载数据本地infile错误的主要内容,如果未能解决你的问题,请参考以下文章
如何为 AWS RDS 加载数据 infile mysql 工作台?