У меня возникают проблемы со следующим 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 );
Я хочу загрузить данные файла excel в таблицу в моей базе данных. Когда я запускаю это локально, все работает. Но когда я делаю это на сервере, я получаю следующую ошибку:
Uncaught exception 'PDOException' with message 'SQLSTATE[28000]: Invalid authorization specification: 1045 Access denied for user 'myuser'@'localhost' (using password: YES)'
Я пытаюсь сделать это на PHP (в Zend Framework). Когда я связался с хостингом, они сказали, что мне нужно разрешение ФАЙЛ. Но это плохая практика и не рекомендуется.
Я также попытался сделать это в оболочке script следующим образом:
#!/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
Но я получил ту же ошибку:
ERROR 1045 (28000) at line 1: Access denied for user 'user'@'localhost' (using password: YES)
UPDATE:
Я попытался добавить LOCAL следующим образом:
LOAD DATA LOCAL INFILE 'thelocationofmyfile.csv'
Но тогда я получаю эту ошибку:
ERROR 1148 (42000) at line 1: The used command is not allowed with this MySQL version
Также попытался добавить -local-infile = 1 как это, но получил ту же ошибку
/usr/local/bin/mysql --host=127.0.0.1 --user=theuser --local-infile=1 --password=password --database=db_database
ВТОРОЕ ОБНОВЛЕНИЕ:
Мой конфигурационный файл 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
Место, где установлено мое соединение, не имеет большого значения, потому что я тестирую его с помощью оболочки script, где я устанавливаю соединение.
Я не получаю сообщение об ошибке при запуске
/usr/bin/mysql --host=localhost --user=theuser --password=password --database=db_database<<EOFMYSQL
show tables;
EOFMYSQL
(просто список всех таблиц в моей базе данных)
Когда я запускаю SHOW GRANTS;
, я получаю:
+------------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected] |
+------------------------------------------------------------------------------------------------------------------------+
| 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)