2012-05-24 3 views
10

Mam skrypt PHP, który wywołuje MySQL's LOAD DATA INFILE, aby załadować dane z plików CSV. Jednak na serwerze produkcyjnym, skończyło się z powodu następującego błędu:LOKALNA INFORMACJA DANYCH LOKALNA daje błąd Używana komenda jest niedozwolona w tej wersji MySQL

Access denied for user ... (using password: yes)

Jako szybkie obejście, zmieniłem polecenie LOAD DATA LOCAL INFILE którym pracował. Jednak to samo polecenie nie powiodło się na serwerze klienta z tej wiadomości:

The used command is not allowed with this MySQL version

Zakładam ma to coś wspólnego ze zmienną serwera: local_infile = off jak opisano here.

Zalecamy obejście problemu, które nie wymaga zmiany ustawień serwera. Zauważ, że narzędzie phpMyAdmin zainstalowane na tym samym serwerze wydaje się akceptować pliki CSV, chociaż nie jestem pewien, czy używa on LOAD DATA (LOCAL) INFILE.

+0

To nie jest polecenie, które jest zgodą użytkownika, którego używasz. – jcho360

+0

Ten sam użytkownik może uruchamiać zapytania typu "INSERT", ale nie "LOAD DATA INFILE" (odmowa dostępu) lub "LOAD DATA LOILAL INFILE" (używane polecenie niedozwolone). –

Odpowiedz

39

Ran do tego samego problemu jako root i wyrzucił mnie przez chwilę

mógłby być problem z ustawieniami serwera zestaw z kompilacji

przetestować logowanie do konsoli z tego samego użytkownika i próbują Dowodzenie ładowania danych

jeśli masz ten sam błąd, spróbuj zamknąć konsolę i działa

mysql -u USER -p --local-infile=1 DATABASE 

teraz spróbuj uruchomić komendę LOAD ponownie

czy działa wtedy będziesz musiał ponownie uruchomić mysqld z opcją wiersza poleceń lub ponownej instalacji z opcją konfiguracji

referencje (odniesienia do 5,0, ale pracował dla 5,5 mi)

http://dev.mysql.com/doc/refman/5.0/en/load-data-local.html

http://dev.mysql.com/doc/refman/5.0/en/mysql-command-options.html#option_mysql_local-infile

+3

"mysql -u USER -p --local-infile = 1 DATABASE" .Ta komenda zrobiła całą lewę. Dzięki. –

+0

Twoje powitanie, chociaż dla innych jest czystsze, aby podziękować za pomocą upvote – Alvin

+0

bardzo przydatna odpowiedź, sam wpadłem na ten problem – Rickyfox

0

spójrz na tę listę uprawnień, możesz dodać je osobno, IE. można wstawić ale nie aktualizować, czy można usunąć, ale nie wybrać, etc ...

ALL [PRIVILEGES] Grant all privileges at specified access level except GRANT OPTION 
ALTER Enable use of ALTER TABLE 
ALTER ROUTINE Enable stored routines to be altered or dropped 
CREATE Enable database and table creation 
CREATE ROUTINE Enable stored routine creation 
CREATE TEMPORARY TABLES  Enable use of CREATE TEMPORARY TABLE 
CREATE USER  Enable use of CREATE USER, DROP USER, RENAME USER, and REVOKE ALL PRIVILEGES 
CREATE VIEW  Enable views to be created or altered 
DELETE Enable use of DELETE 
DROP Enable databases, tables, and views to be dropped 
EVENT Enable use of events for the Event Scheduler 
EXECUTE  Enable the user to execute stored routines 
FILE Enable the user to cause the server to read or write files 
GRANT OPTION Enable privileges to be granted to or removed from other accounts 
INDEX Enable indexes to be created or dropped 
INSERT Enable use of INSERT 
LOCK TABLES  Enable use of LOCK TABLES on tables for which you have the SELECT privilege 
PROCESS  Enable the user to see all processes with SHOW PROCESSLIST 
REFERENCES Not implemented 
RELOAD Enable use of FLUSH operations 
REPLICATION CLIENT Enable the user to ask where master or slave servers are 
REPLICATION SLAVE Enable replication slaves to read binary log events from the master 
SELECT Enable use of SELECT 
SHOW DATABASES Enable SHOW DATABASES to show all databases 
SHOW VIEW Enable use of SHOW CREATE VIEW 
SHUTDOWN Enable use of mysqladmin shutdown 
SUPER Enable use of other administrative operations such as CHANGE MASTER TO, KILL, PURGE BINARY LOGS, SET GLOBAL, and mysqladmin debug command 
TRIGGER  Enable trigger operations 
UPDATE Enable use of UPDATE 
USAGE Synonym for “no privileges” 

Chyba masz permision wyboru, usunąć, INSERT, UPDATE, ale nie robić inne rzeczy,

użyj polecenia:

SHOW GRANTS 

pokaże ci, co są w stanie się w moim przypadku.

jcho360> show grants; 
+-------------------------------------------------------+ 
| Grants for [email protected]       | 
+-------------------------------------------------------+ 
| GRANT ALL PRIVILEGES ON *.* TO 'jbolivar'@'localhost' | 
+-------------------------------------------------------+ 
1 row in set (0.00 sec) 
2

ja traing roztwór przez około 1 godzinę, a wreszcie, że stwierdzono, że muszę połączyć się z bazą danych, taką jak ta $ dbh = mysql_connect ($ serwer, $ dbuser, $ dbpass, false, 128);

Przekazanie 128 w parametrze flags jest kluczem.

Aby uzyskać więcej informacji o flagach, zobacz artykuł http://www.php.net/manual/en/mysql.constants.php#mysql.client-flags.

Powiązane problemy