Poesía Binaria

Exportar datos de MySQL a un fichero CSV o tabulado


En múltiples ocasiones, si sueles manejar bases de datos MySQL, te interesará exportar esa información para que sea interpretada por otro programa o una persona, y no queramos que dicha persona tenga acceso completo a nuestra base de datos, o que le queramos facilitar el trabajo de alguna forma.

Este post, puede acompañar perfectamente a Introduciendo datos al servidor MySQL desde CSV con ejemplos.

Es importante decir, que el archivo se generará en el equipo servidor, y no en el equipo desde el que accedemos, por lo que para recuperar los datos, es conveniente tener acceso al servidor, puede que por estar en el mismo ordenador (localhost) o porque tengamos acceso por SSH, FTP, etc.

Bien, el siguiente código extraerá información de una consulta a una base de datos MySQL, la gracia está en que la salida se escribirá directamente en un fichero separado por tabuladores.

1
SELECT * INTO OUTFILE '/tmp/temp' FROM Tabla;

A partir de aquí, podemos dejar llevar nuestra imaginación, para crear una consulta con la complicación que queramos, en este caso, estaremos guardando el resultado de la consulta en el archivo indicado, sin cabeceras, sólo datos. Si queremos cabeceras, tendremos que complicar un poco la consulta:

1
SELECT 'Columna1', 'Columna2, 'ColumnaN' UNION SELECT Columna1, Columna2, ColumnaN INTO OUTFILE '/tmp/temp' FROM Tabla

Aquí combinamos dos SELECT, en este caso, el primer SELECT serán los nombres de las columnas, y otro será la consulta con la que obtendremos las filas.

Pero visto así no tiene mucha gracia, ya que generamos un archivo cuya separación entre campos son tabuladores, y puede no sernos útil para su visualización en una hoja de cálculo, o incluso para su extracción automática; por tanto tenemos otra forma de exportar esa información, especificando un delimitador de campo, de línea y cercado, con lo que podemos generar un fichero CSV, donde separemos la información por comas, las líneas por retornos de carro y los campos complejos podamos entrecomillarlos, adicionalmente podemos escapar ciertos caracters con algún carácter especial.

En este caso, toda la información estará delimitada, y podrá ser importada por software de hoja de cálculo fácilmente como Libreoffice Calc, OpenOffice Calc, Gnumeric, o Microsoft Excel.

Precaución, el usuario mysql (o el usuario con el que se ejecuta mysql debe tener permisos de creación en el directorio seleccionado); el archivo NO puede existir, esto es una medida de precaución para que no nos podamos cargar nada al crear archivos con MySQL; y, por último, tenemos que tener el permiso FILE en el usuario de mysql con el que estemos haciendo la consulta, para ello podemos, desde root, hacer lo siguiente:

1
GRANT FILE ON *.*  TO 'usuario'@'host' ;

Como aclaración, debo recalcar que el permiso FILE es para usuarios de MySQL no de nuestro sistema; y el query anterior debe ser lanzado como root de MySQL.

¿No os apetece leer mucho? Hice un vídeo para esto:

Actualización 26/02/2015: Tenía dos posts que trataban de lo mismo, he unificado los dos posts en este. ¡Qué despiste!
Actualización 11/02/2017: He añadido un vídeo!!

También podría interesarte....