Respuestas:
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.
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:
sudo nano /etc/mysql/my.cnf
Luego añade:
[mysqld]
local-infile
[mysql]
local-infile
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.
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 olvide sudo 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
apt-get install php5-mysqlnd
Resolví este problema en MySQL 8.0.11 con el comando de terminal mysql:
SET GLOBAL local_infile = true;
Quiero decir, inicié sesión primero con lo habitual:
mysql -u user -p*
Después de eso, puede ver el estado con el comando:
SHOW GLOBAL VARIABLES LIKE 'local_infile';
Debería estar encendido. No escribiré sobre seguridad emitida con la carga de archivos locales en la base de datos aquí.
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 comando
abrir 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:
load data local infile '/home/tony/Desktop/2013Mini.csv' into table Reading_Table FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
Ver la imagen de abajo ...
He agregado --local-infile=1
al comando mysql normal mysql -u root -p
Entonces la línea total sería:
mysql --local-infile = 1 -u root -p
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):
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydb',
'USER': 'myname',
'PASSWORD': 'mypass',
'HOST': 'myserver',
'PORT': '3306',
'OPTIONS' : {
'local_infile':1,
},
}
}
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):
$link = mysqli_init();
mysqli_options($link, MYSQLI_OPT_LOCAL_INFILE, true);
mysqli_real_connect($link, $host, $username, $password, $database);
u orientado a objetos
$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_LOCAL_INFILE, true);
$mysqli->real_connect($host, $username, $password, $database);
si su archivo csv se encuentra igual con db, debe eliminar LOCAL en LOAD DATA INFILE , o recibirá el error
El comando utilizado no está permitido con esta versión de MySQL
Otra forma es usar el mysqlimport
programa cliente.
Lo invocas de la siguiente manera:
mysqlimport -uTheUsername -pThePassword --local yourDatabaseName tableName.txt
Esto genera una LOAD DATA
declaración que se carga tableName.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 como tableName.1.txt
, tableName.2.txt
, ..., etc., por ejemplo.
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í:
LOAD DATA LOCAL INFILE 'file-name' IGNORE INTO TABLE table-name CHARACTER SET latin1 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES.
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)
LOAD DATA INFILE 'D:\\Work\\TableRecords.csv' INTO TABLE tbl1 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (col1,col2);
luego:
mysql -uroot -pStr0ngP@ss -Ddatabasename -e "source D:\Work\LoadTableName.sql"
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:
sudo service mysql restart
Luego, si quiero "recrear" el error, simplemente reinicio el servicio apache:
sudo service apache2 restart
Que luego se puede arreglar nuevamente ingresando el siguiente comando:
sudo service mysql restart
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.
service mysqld restart
service httpd restart
Válido en distribuciones basadas en RedHat
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. Instale percona
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 a terminal
y escribiendo mysql -u root -p
y luego la contraseña. Intente ejecutar el comando LOAD DATA LOCAL INFILE
ahora. Espero que funcione :)
Por cierto, estaba trabajando en Rails 2.3 con Ruby 1.9.3 en Ubuntu 12.04.
Agregue local_infile
en ambos client
y la mysqld
sección.
[client]
local_infile=1
...
[mysqld]
local_infile=1
...
Probado en MySQL 8.x tanto en Windows como en Linux.
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í.
my.cnf
ruta está/etc/mysql/my.cnf
en mi máquina (AWS EC2).