infile habilitar from data acentos mysql

habilitar - MySQL: habilite LOAD DATA LOCAL INFILE



mysql import data from csv using load data infile (14)

Estoy ejecutando Mysql 5.5 en Ubuntu 12 LTS. ¿Cómo debo habilitar LOAD DATA LOCAL INFILE en my.cnf?

Intenté agregar local-infile en mi configuración en varios lugares, pero sigo recibiendo el mensaje "El comando usado no está permitido con esta versión de MySQL"


Además, para otros lectores, si intentas hacer esto en Django Y tu servidor permite local_infile (puedes verificarlo escribiendo SHOW VARIABLES a través de un cliente mysql) entonces puedes agregar esto a tu archivo settings.py (ya que python MySQLdb doesn '' 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, }, } }


Debes tener cuidado de cómo establecer tu conexión mysqli. El crédito completo de esta solución es para Jorge Albarenque, source

Para arreglarlo tuve que:

  • Agregue local-infile = 1 a las secciones [mysqld] y [mysql] de my.cnf (como se explica en los comentarios anteriores)
  • Use la función mysqli_real_connect ( documentación de PHP ).

El truco 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);


Desde la página de manual de MySQL 5.5:

LOCAL funciona solo si su servidor y su cliente ambos 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".

Debes establecer 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 "infile local".

Es una restricción de seguridad.


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 local-infile debajo de cada uno de ellos.

Funciona para mí en MySQL 5.5 en Ubuntu 12.04 LTS.


En el caso si Mysql 5.7 puede usar "mostrar variables globales como" local_infile ";" que le dará el estado local de infile, puede activarlo usando "set global local_infile = ON;".


Esto fue un poco extraño para mí, de un día para el siguiente, el guión que ha estado funcionando desde hace días simplemente deja de funcionar. No había una versión más reciente de mysql o 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 estaba usando / n en lugar de lo esperado (según mi script ) / r / n entonces lo guardo con la EOL correcta y ejecuto el script nuevamente sin ningún problema.

Creo que es extraño que mysql me diga que el comando usado no está permitido con esta versión de MySQL porque la razón 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.


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

Entonces, si quiero "recrear" el error, simplemente reinicio el servicio apache:

sudo service apache2 restart

Que luego se puede arreglar nuevamente al ingresar el siguiente comando:

sudo service mysql restart

Por lo tanto, parece que apache2 está haciendo algo para no permitir esta característica cuando se inicia (que luego se invierte / se corrige si se reinicia el servicio de mysql).

Válido en distribuciones basadas en Debian.

service mysqld restart service httpd restart

Válido en distribuciones basadas en RedHat


Otra forma es usar el programa de cliente mysqlimport .

Lo invocas de la siguiente manera:

mysqlimport -uTheUsername -pThePassword --local yourDatabaseName tableName.txt

Esto genera una instrucción LOAD DATA que carga tableName.txt en la tabla tableName .

Tenga en cuenta lo siguiente:

mysqlimport determina el nombre de la tabla del archivo que proporcionas; 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 en la misma tabla, podría distinguirlos como tableName.1.txt , tableName.2.txt , ..., etc., por ejemplo.


Para aquellos de ustedes que buscan respuestas para hacer que LOAD DATA LOCAL INFILE funcione como yo, esto probablemente funcione. Bueno, funcionó para mí, así que aquí va. Instala percona como tu servidor y cliente mysql siguiendo los pasos del enlace. Se le pedirá una contraseña durante la instalación, así que proporcione una que recuerde y úsela más adelante. Una vez realizada la instalación, reinicie su sistema y compruebe si el servidor está en funcionamiento accediendo a la terminal y escribiendo mysql -u root -p y luego la contraseña. Intenta 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.


Reemplace el controlador php5-mysql por el controlador nativo

En Debian

apt-get install php5-mysqlnd


Usé 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:

poner ''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);

entonces:

mysql -uroot -pStr0ngP@ss -Ddatabasename -e "source D:/Work/LoadTableName.sql"


Ver imagen debajo ...

He agregado --local-infile=1 al comando mysql -u root -p normal mysql -u root -p

Entonces la línea total sería:

mysql --local-infile = 1 -u root -p


en caso de que tu sabor de mysql en ubuntu NO funcione bajo ninguna circunstancia y load data infile teniendo el error 1148, puedes ejecutar el comando load data infile través de la línea de comando

abrir una ventana de terminal

ejecuta mysql -u YOURUSERNAME -p --local-infile YOURDBNAME

se le pedirá que ingrese la contraseña de mysqluser

ejecutará MySQLMonitor y el símbolo del sistema será mysql>

ejecuta tu comando load data infile (no te olvides de 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'';


si su archivo csv está ubicado igual que con db, necesita eliminar LOCAL en LOAD DATA INFILE , o obtendrá el error

El comando usado no está permitido con esta versión de MySQL