Vuelque una base de datos mysql a una copia de seguridad de texto sin formato (CSV) desde la línea de comando

Me gustaría evitar mysqldump ya que los resultados en una forma que solo es conveniente para mysql para leer. CSV parece más universal (un archivo por tabla está bien). Pero si hay ventajas en mysqldump, soy todo oídos. Además, me gustaría algo que pueda ejecutar desde la línea de comandos (linux). Si se trata de un script de mysql, sería útil señalar cómo hacer tal cosa.

Si puede hacer frente a la tabla a la vez, y sus datos no son binarios, use la opción -B para el comando mysql . Con esta opción, generará archivos TSV (separados por tabuladores) que pueden importarse a Excel, etc., con bastante facilidad:

 % echo 'SELECT * FROM table' | mysql -B -uxxx -pyyy database 

Alternativamente, si tiene acceso directo al sistema de archivos del servidor, use SELECT INTO OUTFILE que puede generar archivos CSV reales:

 SELECT * INTO OUTFILE 'table.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM table 

En MySQL mismo, puede especificar salida CSV como:

 SELECT order_id,product_name,qty FROM orders INTO OUTFILE '/tmp/orders.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' 

De http://www.tech-recipes.com/rx/1475/save-mysql-query-results-into-a-text-or-csv-file/

Puede volcar una base de datos completa de una vez con la opción mysqldump’s –tab. Proporciona una ruta de directorio y crea un archivo .sql con la syntax CREATE TABLE DROP IF EXISTS y un archivo .txt con los contenidos, separados por tabulaciones. Para crear archivos separados por comas, puede usar lo siguiente:

 mysqldump --password --fields-optionally-enclosed-by='"' --fields-terminated-by=',' --tab /tmp/path_to_dump/ database_name 

El usuario de mysql y el usuario que ejecuta el comando deben poder escribir esa ruta, así que, para simplificar, recomiendo chmod 777 /tmp/path_to_dump/ first.

La opción de seleccionar en archivo externo no funcionaría para mí, pero la forma siguiente de rodear el archivo delimitado por tabuladores a través de SED sí lo hizo:

 mysql -uusername -ppassword -e "SELECT * from tablename" dbname | sed 's/\t/","/g;s/^/"/;s/$/"/' > /path/to/file/filename.csv 

Aquí está el comando más simple para él

 mysql -h -u -p -e 'select * from databaseName.tableNaame' | sed 's/\t/,/g' > output.csv 

Si hay una coma en el valor de la columna, entonces podemos generar .tsv en lugar de .csv con el siguiente comando

 mysql -h -u -p -e 'select * from databaseName.tableNaame' > output.csv 

Si realmente necesita una “Copia de seguridad”, también necesita un esquema de base de datos, como definiciones de tabla, definiciones de vista, procedimientos de almacenamiento, etc. Una copia de seguridad de una base de datos no es solo la información.

El valor del formato mysqldump para copia de seguridad es específicamente que es muy FÁCIL usarlo para restaurar bases de datos mysql. Una copia de seguridad que no se restaure fácilmente es mucho menos útil. Si está buscando un método para hacer una copia de seguridad confiable de los datos de mysql para que pueda restaurar a un servidor mysql, entonces creo que debería seguir con la herramienta mysqldump.

Mysql es gratuito y se ejecuta en muchas plataformas diferentes. La configuración de un nuevo servidor mysql al que puedo restaurar es simple. No estoy para nada preocupado por no poder configurar mysql para que pueda hacer una restauración.

Estaría mucho más preocupado por una copia de seguridad / restauración personalizada basada en un formato frágil como csv / tsv. ¿Estás seguro de que todas tus comillas, comas o tabs que están en tus datos se escaparán correctamente y luego tu herramienta de restauración las analizará correctamente?

Si está buscando un método para extraer los datos, vea varios en las otras respuestas.

Echa un vistazo a mk-parallel-dump, que es parte del conjunto de herramientas maatkit, que siempre es útil. Esto puede volcar archivos separados por comas con la opción –csv.

Esto puede hacer su db completo sin especificar tablas individuales, y puede especificar grupos de tablas en una tabla de conjuntos de respaldo.

Tenga en cuenta que también vuelca definiciones de tabla, vistas y disparadores en archivos separados. Además de proporcionar una copia de seguridad completa en una forma más universalmente accesible, también puede restaurarse inmediatamente con mk-parallel-restre

Puede usar la secuencia de comandos siguiente para obtener la salida a los archivos csv. Un archivo por tabla con encabezados.

 for tn in `mysql --batch --skip-page --skip-column-name --raw -uuser -ppassword -e"show tables from mydb"` do mysql -uuser -ppassword mydb -B -e "select * from \`$tn\`;" | sed 's/\t/","/g;s/^/"/;s/$/"/;s/\n//g' > $tn.csv done 

usuario es su nombre de usuario, contraseña es la contraseña si no desea seguir escribiendo la contraseña para cada tabla y mydb es el nombre de la base de datos.

Explicación de la secuencia de comandos: la primera expresión en sed, reemplazará las tabs con “,” por lo que tiene campos encerrados entre comillas dobles y separados por comas. El segundo inserte una comilla doble al principio y la tercera inserte una comilla doble al final. Y el final se ocupa del \ n.

Respuesta de dos líneas de PowerShell:

 # Store in variable $Global:csv = (mysql -uroot -p -hlocalhost -Ddatabase_name -B -e "SELECT * FROM some_table") ` | ConvertFrom-Csv -Delimiter "`t" # Out to csv $Global:csv | Export-Csv "C:\temp\file.csv" -NoTypeInformation 

Boom-bata-boom

-D = el nombre de su base de datos

-e = consulta

-B = delimitado por tabuladores

    Intereting Posts