2012-05-24 34 views
10

Tengo un script PHP que llama al LOAD DATA INFILE de MySQL para cargar datos desde archivos CSV. Sin embargo, el servidor de producción, que terminó con el siguiente error:LOAD DATA LOCAL INFILE da el error El comando usado no está permitido con esta versión de MySQL

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

Como solución rápida, he cambiado el comando para LOAD DATA LOCAL INFILE que funcionó. Sin embargo, no logró el mismo comando en el servidor del cliente con este mensaje:

The used command is not allowed with this MySQL version

Asumo que esto tiene algo que ver con la variable de servidor: local_infile = off como se describe here.

Por favor, sugiera una solución que no implique cambiar la configuración del servidor. Tenga en cuenta que la utilidad phpMyAdmin instalada en el mismo servidor parece aceptar archivos CSV aunque no estoy seguro si usa LOAD DATA (LOCAL) INFILE.

+0

no es el comando es el permiso del usuario que está utilizando. – jcho360

+0

El mismo usuario puede ejecutar consultas 'INSERT' pero no' LOAD DATA INFILE' (acceso denegado) o 'LOAD DATA LOCAL INFILE' (comando usado no permitido). –

Respuesta

39

se encontró con el mismo problema que la raíz y me tiró por un momento

podría ser un problema con la configuración de su servidor se establece con la compilación

para poner a prueba de inicio de sesión a la consola con el mismo usuario y tratar Dirige tus datos de carga

si le da el mismo error, intente cerrar la consola y ejecutar

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

Ahora intenta ejecutar el comando de datos de carga de nuevo

si funciona, entonces vamos a tener que reiniciar mysqld opción de línea de comandos o con volver a instalar con la opción de configuración

referencias (las referencias son de 5.0, pero trabajaban para mí con 5.5):

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". Este comando hizo todo el truco. Gracias. –

+0

su bienvenida, aunque es más limpio para los demás dar las gracias a través de upvote – Alvin

+0

respuesta muy útil, me encontré con ese problema yo mismo – Rickyfox

0

eche un vistazo a esta lista de permisos, puede agregarlos por separado, IE. puede insertar pero no actualizar, o puede eliminar, pero no seleccionar, 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” 

Creo que tienes permiso expreso para seleccionar, borrar, insertar, actualizar, pero no a hacer otras cosas,

utilizar este comando:

SHOW GRANTS 

que le mostrará lo que eres capaz de hacerlo, en mi caso.

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