LOAD DATA INFILE + MySQL错误28000

nie*_*lsv 10 php mysql sql csv permissions

我遇到了以下要执行的SQL查询的问题:

LOAD DATA INFILE 'thelocationofmyfile.csv'
INTO TABLE test_import 
FIELDS TERMINATED BY ';'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES ( ArtID, ArtNamePharmLang, ArtNameFr, ArtNameNl, PubPrice, PercentageRebate, RebateAmount, SellingPrice, Localisation, CnkNr, EanNr, SoldQty, MinThd, MaxThd, QtyInStock, DateLastSale, VatRate, SupplierManufName, BuyPrice, InvCatCode, ArtType, ApbCatCode, ApbLegCode, PharmApbNr );
Run Code Online (Sandbox Code Playgroud)

我想将excel文件的数据加载到我的数据库中的表中.当我在本地运行时一切正常.但是当我在服务器上执行此操作时,我收到以下错误:

Uncaught exception 'PDOException' with message 'SQLSTATE[28000]: Invalid authorization specification: 1045 Access denied for user 'myuser'@'localhost' (using password: YES)'
Run Code Online (Sandbox Code Playgroud)

我正在尝试用PHP(在Zend Framework中)这样做.当我联系托管时,他们说我需要FILE权限才能执行此操作.但这是不好的做法,并没有提出建议.

我也尝试在这样的shell脚本中执行此操作:

#!/bin/bash
/usr/bin/mysql --host=localhost --user=theuser --password=password --database=db_database<<EOFMYSQL
LOAD DATA INFILE 'locationofmyfile.csv'
INTO TABLE test_import 
FIELDS TERMINATED BY ';'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES ( ArtID, ArtNamePharmLang, ArtNameFr, ArtNameNl, PubPrice, PercentageRebate, RebateAmount, SellingPrice, Localisation, CnkNr, EanNr, SoldQty, MinThd, MaxThd, QtyInStock, DateLastSale, VatRate, SupplierManufName, BuyPrice, InvCatCode, ArtType, ApbCatCode, ApbLegCode, PharmApbNr );
EOFMYSQL
Run Code Online (Sandbox Code Playgroud)

但我得到了同样的错误:

ERROR 1045 (28000) at line 1: Access denied for user 'user'@'localhost' (using password: YES)
Run Code Online (Sandbox Code Playgroud)

更新:

我试过像这样添加LOCAL:

LOAD DATA LOCAL INFILE 'thelocationofmyfile.csv'
Run Code Online (Sandbox Code Playgroud)

但后来我得到了这个错误:

ERROR 1148 (42000) at line 1: The used command is not allowed with this MySQL version
Run Code Online (Sandbox Code Playgroud)

还试图像这样添加--local-infile = 1但是得到了同样的错误

/usr/local/bin/mysql --host=127.0.0.1 --user=theuser --local-infile=1 --password=password --database=db_database
Run Code Online (Sandbox Code Playgroud)

第二次更新:

我的配置文件my.cnf看起来像这样:

[mysqld]
local-infile=0

max_connections         = 50
connect_timeout         = 5
wait_timeout            = 300
max_allowed_packet      = 16M
thread_cache_size       = 128
sort_buffer_size        = 4M
bulk_insert_buffer_size = 16M
tmp_table_size          = 16M
max_heap_table_size     = 16M
key_buffer_size         = 32M
open-files-limit        = 2000
table_cache             = 400
myisam_sort_buffer_size = 8M
concurrent_insert       = 2
read_buffer_size        = 2M
read_rnd_buffer_size    = 1M
query_cache_limit       = 1M
query_cache_size        = 32M
innodb_log_file_size    = 48M
max_allowed_packet  = 32M
Run Code Online (Sandbox Code Playgroud)

建立连接的位置并不重要,因为我正在使用shell脚本对其进行测试.

我跑的时候没有收到错误

/usr/bin/mysql --host=localhost --user=theuser --password=password --database=db_database<<EOFMYSQL
show tables;
EOFMYSQL
Run Code Online (Sandbox Code Playgroud)

(只是我数据库中所有表的列表)

当我跑步时,SHOW GRANTS;我得到:

+------------------------------------------------------------------------------------------------------------------------+
| Grants for theuser@localhost                                                                                           |
+------------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'theuser'@'localhost' IDENTIFIED BY PASSWORD '*password' |
| GRANT ALL PRIVILEGES ON `mydomain\_live`.* TO 'theuser'@'localhost'                                                    |
| GRANT ALL PRIVILEGES ON `mydomain\_staging`.* TO 'theuser'@'localhost' WITH GRANT OPTION                               |
+------------------------------------------------------------------------------------------------------------------------+
3 rows in set (0.01 sec)
Run Code Online (Sandbox Code Playgroud)

Séb*_*ron 5

您可以尝试LOAD DATA LOCAL INFILE并使用存储在客户端磁盘中的文件.这样您就不需要拥有FILE权限.由于必须将文件上传到服务器,因此速度会变慢.

希望这有帮助