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)
您可以尝试LOAD DATA LOCAL INFILE并使用存储在客户端磁盘中的文件.这样您就不需要拥有FILE权限.由于必须将文件上传到服务器,因此速度会变慢.
希望这有帮助
| 归档时间: |
|
| 查看次数: |
1728 次 |
| 最近记录: |