Como exportar directamente desde la consola de MySQL a un archivo CSV?

mysql mints

Hace unos meses publique una guía para importar bases de datos en archivos de texto plano directamente desde la consola de MySQL. Esto es bastante útil cuando deseas importar bases de datos de gran tamaño.

Al igual que importar también es posible exportar los datos directamente a un archivo de texto, en mi caso necesite hacerlo debido al volumen de datos a exportar, por lo que este método resulta muy útil. ¡Manos a la obra!

Primero, nos conectamos al servidor MySQL

mysql -u user_mysql -p

Segundo, seleccionamos la base de datos con la que deseamos trabajar

use base_de_datos;

Tercero, iniciamos la exportación de datos con la siguiente consulta:

SELECT campos_seleccionados
FROM tabla_a_consultar
WHERE condicion_a_aplicar
INTO OUTFILE '/ruta/archivo.csv'
FIELDS TERMINATED BY ';'
OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\r\n';

Notaremos como se usan las siguiente sentencias:

INTO OUTFILE define la ruta y nombre del archivo que deseamos crear. En mi caso particular cree un directorio llamado /backupsmysql/ y le di permisos con chown mysql:mysql /backupmysql/ para que pueda ser generado.

FIELDS TERMINATED BY define la terminación o separación de los campos/celdas. Aquí puedes usar una coma (,) o punto y coma (;) como en mi caso o bien usar el caracter |

OPTIONALLY ECLOSED BY permite encerrar los datos de una celda con un caracter especifico, en mi caso use doble comillas («) lo que resultaría algo como: «campo nombre»;»campo apellidos»;»edad»

LINES TERMINATED BY indica la terminación de cada linea, en mi caso use \r para mover el cursor al inicio de la linea y \n para mover el cursor a la siguiente linea (salto de linea)

Exportando directamente desde la consola de commandos

Existe otra opción para exportar directamente desde la consola de comandos, personalmente prefiero ingresar siempre a MySQL, pero os dejo el comando para que puedan probarlo.

mysql -h localhost -u root -password=contraseña nombre_basededatos \ -e "SELECT * FROM tabla WHERE condiciones;" -B > /ruta/archivo.csv

Si deseas exportar toda la base de datos, puedes usar el siguiente comando:

mysqldump -u [usuario] -p [base_de_datos] > [archivo_salida].sql

Luego del nombre de la base de datos puedes usar los siguientes parametros, estos son los que utilizo con mayor frecuencia:

  • –no-data  para que no exporte datos, asi solo exporta la estructura
  • –no-create-info  para que no exporte las estructura, asi solo exporta datos
  • –complete-insert  para que los insert tengan los nombres de las columnas
  • –skip-add-locks  omite el bloqueo de tablas.

Finalmente el comando con los parametros quedaria asi:

mysqldump -u [usuario] -p [base_de_datos] --parametros > [archivo_salida].sql

Espero les sea de utilidad y les ayude a ahorrar tiempo. ¡Salud!