【发布时间】:2021-09-16 11:44:28
【问题描述】:
我有一个 csv 文件需要上传到现有的 MySQL 数据库。 csv 文件位于主机上,并且没有标题行。这只是表格的数据。我可以在 phpMyAdmin 仪表板中导入 csv 文件,所以我知道 csv 文件可以毫无问题地导入。我需要使用命令行或脚本来完成它,这样我就可以使用 cron 作业来自动化它。我花了很多很多时间试图让它与多种方法一起工作。我试过了:
PHP 脚本:
<?php
$sql = "LOAD DATA INFILE '/home/dir/dir2/file.csv'
INTO TABLE Table
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\r'
(col1, col2, col3, etc.) ";
$con = mysqli_connect("hostname","username","password","database");
$result = mysqli_query($con, $sql);
mysqli_close($con);
?>
mysqlimport 命令:
mysqlimport -hhostname -uusername -ppassword database file.csv
mysql 命令:
mysql -hhostname -uusername -ppassword database -e "LOAD DATA INFILE 'file.csv' INTO TABLE Table FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'"
没有一个有效。我对所有方法都得到了同样的错误。
ERROR 1045 (28000) at line 1: Access denied for user 'username'@'XXX.XXX.XXX.X/XXX.XXX.XXX.X' (using password: YES)
主机名、用户名、密码和数据库名称正确。我可以和他们一起登录 phpMyAdmin。我还在其他 php 脚本中使用它们来搜索数据,它们工作正常。
我已经和我的主人聊天,他们说上面的选项应该可以工作。我已经黔驴技穷了。任何帮助都将非常感谢帮助我了解如何解决我的问题。提前非常感谢!
【问题讨论】:
-
它为您的 IP 显示
'XXX.XXX.XXX.X/XXX.XXX.XXX.X'多么奇怪。除非您添加了该部分,否则它应该只列出 1 个,而不是两个? -
@aynber 服务器显示被选为与客户端匹配的用户。查看 USER() 和 CURRENT_USER() 之间的区别。如果帐户是使用 IP 范围模式创建的,则会显示该帐户。这是常态。
-
我没有添加第二部分。我只是将数字更改为X。我认为第二部分是主机的子网掩码。 MySQL 在付费托管解决方案上运行。
-
你能用 CLI 使用
'username'连接到服务器吗(在错误消息中报告,当然没有主机部分)?没有-e命令行选项。如果为真,则执行并尝试执行 LOAD DATA - 是否成功执行? -
@Akina 刚试过。不,如果不指定主机名,我将无法连接。(这类似于 phpMyAdmin 喜欢的屏幕,您也需要主机名。)我收到错误:ERROR 2002 (HY000): Can't connect to local MySQL server through socket' /var/run/mysqld/mysqld.sock' (2)