Desde la página del manual de MySQL 5.5:
LOCAL funciona solo si su servidor y su cliente han sido configurados para permitirlo. Por ejemplo, si mysqld se inició con --local-infile = 0, LOCAL no funciona. Consulte la Sección 6.1.6, “Problemas de seguridad con LOAD DATA LOCAL”.
Debe configurar la opción:
local-infile=1
en su entrada [mysql] del archivo my.cnf o llame al cliente mysql con la opción --local-infile :
mysql --local-infile -uroot -pyourpwd yourdbname
Debe asegurarse de que el mismo parámetro esté definido en su sección [mysqld] también para habilitar el lado del servidor de la función "archivo local".
Es una restricción de seguridad.
my.cnf
ruta está/etc/mysql/my.cnf
en mi máquina (AWS EC2).apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/var/www/myfile.csv" pid=19488 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=106 ouid=33
. La solución es muy simple. Simplemente actualice su/etc/apparmor.d/local/usr.sbin.mysqld
y vuelva a cargar el servicio apparmor.El archivo my.cnf que debe editar es el archivo /etc/mysql/my.cnf . Sólo:
Luego añade:
Los encabezados [mysqld] y [mysql] ya están dados, solo ubíquelos en el archivo y agregue el archivo local debajo de cada uno de ellos.
Funciona para mí en MySQL 5.5 en Ubuntu 12.04 LTS.
fuente
Ubuntu 14.04.2 LTS not working
también./mysql/my.cnf
no existe de forma predeterminada. Simplemente cree el directorio y el archivo, y pegue estas líneas en el archivo./etc/mysql/conf.d/enable-local-infile.cnf
Además, no olvidesudo service mysql restart
después de realizar el cambio de configuración para que surta efecto.Reemplace el controlador php5-mysql por el controlador nativo
En debian
fuente
Resolví este problema en MySQL 8.0.11 con el comando de terminal mysql:
Quiero decir, inicié sesión primero con lo habitual:
Después de eso, puede ver el estado con el comando:
Debería estar encendido. No escribiré sobre seguridad emitida con la carga de archivos locales en la base de datos aquí.
fuente
SET GLOBAL local_infile = true;
funciona. Mi versión de MySQL es 8.0.12. Quizás esta sea la última solución. Muchas gracias.8.0.12 MySQL Community Server
en Windows.SET GLOBAL local_infile = true;
comando pero todavía recibo el mismo error,ERROR 1148 (42000): The used command is not allowed with this MySQL version
pero la conexión a mysql con --load-infile = 1 funcionómysql --local-infile=1 -u root -p
en caso de que su sabor de mysql en ubuntu NO funcione bajo ninguna circunstancia y todavía obtenga el error 1148, puede ejecutar el
load data infile
comando a través de la línea de comandoabrir una ventana de terminal
correr
mysql -u YOURUSERNAME -p --local-infile YOURDBNAME
se le pedirá que inserte la contraseña de mysqluser
ejecutará MySQLMonitor y su símbolo del sistema será
mysql>
ejecuta tu
load data infile
comando (no olvides terminar con un punto y coma;
)Me gusta esto:
fuente
Ver la imagen de abajo ...
He agregado
--local-infile=1
al comando mysql normalmysql -u root -p
Entonces la línea total sería:
fuente
SET GLOBAL ..
no lo hizo. ¿Un comando 'fuente' (\. file.sql
) de alguna manera inicia una nueva sesión o la restablece? Sin embargo, no intenté poner la configuración en el script mmy sql.Además, para otros lectores, si está intentando hacer esto en Django Y su servidor permite local_infile (puede verificar escribiendo SHOW VARIABLES a través de un cliente mysql), entonces puede agregar esto a su archivo settings.py (ya que python MySQLdb no lo hace) t por defecto lee el archivo .my.cnf):
fuente
Debe tener cuidado de cómo establecer su conexión mysqli. El crédito total de esta solución es para Jorge Albarenque, fuente
Para solucionarlo tuve que:
El problema es que con esa función puede habilitar explícitamente el soporte para LOAD DATA LOCAL INFILE. Por ejemplo (estilo de procedimiento):
u orientado a objetos
fuente
si su archivo csv se encuentra igual con db, debe eliminar LOCAL en LOAD DATA INFILE , o recibirá el error
fuente
Otra forma es usar el
mysqlimport
programa cliente.Lo invocas de la siguiente manera:
Esto genera una
LOAD DATA
declaración que se cargatableName.txt
en eltableName
tabla.Tenga en cuenta lo siguiente:
mysqlimport
determina el nombre de la tabla a partir del archivo que proporciona; usando todo el texto desde el comienzo del nombre del archivo hasta el primer período como el nombre de la tabla. Por lo tanto, si desea cargar varios archivos a la misma mesa que podría distinguirlos comotableName.1.txt
,tableName.2.txt
, ..., etc., por ejemplo.fuente
Esto fue un poco extraño para mí, de un día para otro el guión que ha estado funcionando desde hace días deja de funcionar. No había una versión más reciente de mysql ni ningún tipo de actualización, pero recibía el mismo error, así que le di una última oportunidad al archivo CSV y noté que el final de las líneas usaba \ n en lugar de lo esperado (según mi script ) \ r \ n así que lo guardo con la EOL correcta y ejecuto el script nuevamente sin ningún problema.
Creo que es un poco extraño que mysql me lo diga. El comando usado no está permitido con esta versión de MySQL ya que el motivo era completamente diferente.
Mi comando de trabajo se ve así:
fuente
Utilicé el siguiente método, que no requiere ningún cambio en la configuración , probado en mysql-5.5.51-winx64 y 5.5.50-MariaDB:
ponga 'cargar datos ...' en el archivo .sql (por ejemplo: LoadTableName.sql)
luego:
fuente
En caso de que Mysql 5.7 pueda usar "mostrar variables globales como" local_infile ";" que le dará el estado del archivo local. Puede activarlo usando "set global local_infile = ON;".
fuente
Ok, algo extraño está sucediendo aquí. Para que esto funcione, NO es necesario realizar ningún cambio de configuración en /etc/mysql/my.cnf. Todo lo que necesita hacer es reiniciar el servicio mysql actual en la terminal:
Luego, si quiero "recrear" el error, simplemente reinicio el servicio apache:
Que luego se puede arreglar nuevamente ingresando el siguiente comando:
Entonces, parece que apache2 está haciendo algo para no permitir esta característica cuando se inicia (que luego se invierte / corrige si reinicia el servicio mysql).
Válido en distribuciones basadas en Debian.
Válido en distribuciones basadas en RedHat
fuente
Para aquellos de ustedes que buscan respuestas para hacer que LOAD DATA
LOCAL
INFILE funcione como yo, probablemente esto funcione. Bueno, funcionó para mí, así que aquí va. Instalepercona
como su servidor y cliente mysql siguiendo los pasos del enlace. Se le solicitará una contraseña durante la instalación, así que proporcione una que recuerde y úsela más tarde. Una vez realizada la instalación, reinicie su sistema y pruebe si el servidor está en funcionamiento yendo aterminal
y escribiendomysql -u root -p
y luego la contraseña. Intente ejecutar el comandoLOAD DATA LOCAL INFILE
ahora. Espero que funcione :)Por cierto, estaba trabajando en Rails 2.3 con Ruby 1.9.3 en Ubuntu 12.04.
fuente
Todos: Evidentemente, esto funciona según lo diseñado. Consulte el nuevo representante con fecha del 7 de julio de 2019, Sección 6.1.6, Problemas de seguridad con LOAD DATA LOCAL .
fuente
Agregue
local_infile
en ambosclient
y lamysqld
sección.Probado en MySQL 8.x tanto en Windows como en Linux.
fuente
Estoy usando xampp v3.2.4 y mysql server 8.0.20.
He añadido
local-infile=1
a[mysql]
y[mysqld]
en el archivo "my.ini". El archivo se encuentra en "C: \ xampp \ mysql \ bin \ my.ini".Luego inserté los datos del archivo csv usando el siguiente código
LOAD DATA INFILE ...
. Es importante moverse LOCAL. De lo contrario, no funcionará.Gracias por todas las sugerencias anteriores. Una combinación finalmente funcionó para mí.
fuente