Cómo exportar / volcar una tabla MySql en un archivo de texto que incluye los nombres de campo (también conocidos como encabezados o nombres de columna)
Pregunta
En el intérprete de MySql, es muy fácil volcar una tabla en la pantalla junto con sus nombres de campo.
Parece que no hay una manera simple de exportar una tabla a un archivo CSV delimitado por tabulaciones o incluyendo sus encabezados de columna.
Estoy tratando de hacer esto usando solo SQL o la línea de comando de Linux, sin escribir un programa en otro idioma.
Gracias
Solución
La canalización de la consulta al cliente de línea de comandos genera una lista separada por tabulaciones con los nombres de las columnas como la primera línea
$ echo "select * from surveys limit 5" | mysql -uroot -pGandalf surveys
phone param1 param2 param3 param4 p0 p1 p2 p3 audio4 code time
XXXXXXXXX 2008-07-02 11:17:23 XXXXXXXX SAT - - - - - ERROR 2008-07-02 12:18:32
XXXXXXXXX 2008-07-02 11:22:52 XXXXXXXX SAT - - - - - COLGADO 2008-07-02 12:04:29
XXXXXXXXX 2008-07-02 11:41:29 XXXXXXXX SAT - - - - - COLGADO 2008-07-02 12:07:22
XXXXXXXXX 2008-07-02 12:16:19 XXXXXXXX SAT 1 1 1 9 XXXXXXXXX_4.wav OK 2008-07-02 16:14:27
XXXXXXXXX 2008-07-02 08:21:25 XXXXXXXX SAT 1 1 1 1 XXXXXXXXX_4.wav OK 2008-07-02 12:29:40
Otros consejos
Este pequeño script debería hacerlo:
- 1. elija la tabla y el archivo de salida aquí / esta debería ser la única entrada
select 'mytable' into @tableName;
select 'c://temp/test.csv' into @outputFile;
- 2. obtenga los nombres de las columnas en un formato que se ajuste a la consulta
select group_concat(concat("'",column_name, "'")) into @columnNames from information_schema.columns
where table_name=@tableName;
- 3. construir la consulta
SET @query = CONCAT(
"select * from
((SELECT ",@columnNames,")
UNION
(SELECT * FROM `",@tableName,"`)) as a
INTO OUTFILE '", @outputFile, "'");
- 4. ejecuta la consulta
PREPARE stmt FROM @query;
EXECUTE stmt;
Lo logré de esta manera:
echo "select * from table"| mysql database -B -udbuser -puser_passwd | sed s/\\t/,/g > query_output.csv
La opción -B de mysql separa las columnas mediante pestañas, que se convierten en comas mediante sed. Tenga en cuenta que los encabezados también se generan.
Puede hacerlo con el comando mysqldump . Eche un vistazo a las opciones --tab y --xml.
He creado un procedimiento para automatizar la exportación del contenido de una mayor cantidad de tablas a un archivo .csv usando SELECT ... INTO OUTFILE
. Consulte lo siguiente si necesita algo como esto
http://lifeboysays.wordpress.com/2012/06/23/mysql-how-to-export-data-to-csv-with-column-headers/ .
Utiliza el método descrito por cafe876, pero funcionará para una o toda una serie de tablas, además de que puede establecer el delimitador y el carácter de comillas para usar.
Utilicé el comando anterior y lo modifiqué según mis requisitos.
Necesitaba obtener la columna de contraseñas de la base de datos mysql de wordpress en un archivo de texto, para ello utilicé el siguiente comando
echo "select user_pass from wp_users"| mysql -uroot -proot wp_database > passwordList.txt