MySQL volcado por consulta

220

¿Es posible hacerlo mysqldumpsolo SQL query?

Me refiero a volcar toda la base de datos, como phpmyadmincuando exportas aSQL

Jakub Arnold
fuente

Respuestas:

285

no mysqldump, sino mysql cli ...

mysql -e "select * from myTable" -u myuser -pxxxxxxxxx mydatabase

puedes redirigirlo a un archivo si quieres:

mysql -e "select * from myTable" -u myuser -pxxxxxxxx mydatabase > mydumpfile.txt

Actualización: la publicación original le preguntó si podía volcar de la base de datos por consulta. Lo que preguntó y lo que quiso decir fue diferente. Realmente quería simplemente mysqldump todas las tablas.

mysqldump --tables myTable --where="id < 1000"
Zak
fuente
22
¿Cómo restaurar este archivo txt volcado?
Vivek S
3
para aquellos que intentan el enfoque mysql -e. Tuve que personalizar el script un poco para que funcionara para mí. Este requiere que ingrese la contraseña sql cuando se ejecuta. mysql -e "select * from table WHERE query = 'asdasd'" -u root -p --database = DBNAME> text.txt
RichardW11
13
simplemente podría crear una nueva tabla para la consulta (CREATE TABLE SELECT) y luego volcar esa tabla con mysqldump. De esa manera puede restaurarlo fácilmente más tarde.
quano
1
para quien quiera usar mysqldump y restaurar el archivo, eche un vistazo aquí: stackoverflow.com/a/2431936/411786
Syco
2
Para importar datos que se exportan con mysql -e con la opción -B para salir como delimitado por tabulaciones, ejecute mysqlimport --ignore-lines = 1 --fields-terminated-by = '\ t'. Ver: stackoverflow.com/a/17071108/1676044
Kevin Borders el
259

Esto debería funcionar

mysqldump --databases X --tables Y --where="1 limit 1000000"
Thomas Ahle
fuente
44
Un mejor ejemplo podría ser algo que realmente se parezca a una cláusula where, como --where = "myColumn <1000" - el primer millón de filas de cada tabla parece una cosa extraña para solicitar;)
ijw
@ijw Si lo que quiere hacer es tomar una copia de seguridad de su tabla fácilmente reinsertable, probablemente no necesite una cláusula where para otra cosa que no sean los límites.
Thomas Ahle
3
@Sagotharan: Bueno, no es una consulta. Probablemente por eso.
Carreras de ligereza en órbita
79
!!¡¡ADVERTENCIA!! mysqldump agrega un comando 'DROP TABLE' en la parte superior del archivo exportado. Eso significa que si realiza una exportación parcial y luego la vuelve a importar, perderá todo lo demás. Pues lo hice.
Tamlyn
34
Sí, para no eliminar todos los datos de su tabla al restaurar desde el archivo de datos guardado, asegúrese de agregar la --no-create-infoopción. Vea mi respuesta para un ejemplo.
Gary
71

Puede volcar una consulta como csv así:

SELECT * from myTable
INTO OUTFILE '/tmp/querydump.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
Chico
fuente
8
¿Qué pasa si quiero volcar varias tablas?
SIFE
10
Esto crea un archivo en la máquina en la que se ejecuta la base de datos MySQL. Entonces, si está consultando desde una consola remota, este método falla. Si también hay una manera de hacerlo desde una consola remota, hágamelo saber.
dknight
2
¿Dónde guarda el archivo?
Techlord
1
@dknight Supongo que te refieres a una consola remota a través de una consola de terminal, en cuyo caso puedes recuperar el archivo volcado scpdespués de que finalice la conexión. Aquí hay un ejemplo. scp [email protected]:/tmp/querydump.csv ~/local.csv
Lucas
Parece inseguro: # 1290 - El servidor MySQL se está ejecutando con la opción --secure-file-priv, por lo que no puede ejecutar esta declaración
mikep
64

Volcar una tabla usando una consulta where:

mysqldump mydatabase mytable --where="mycolumn = myvalue" --no-create-info > data.sql

Volcar una mesa entera:

mysqldump mydatabase mytable > data.sql

Notas:

  • Reemplace mydatabase, mytabley la instrucción where con sus valores deseados.
  • Por defecto, mysqldumpincluirá DROP TABLEy CREATE TABLEdeclaraciones en su salida. Por lo tanto, si no desea eliminar todos los datos de su tabla al restaurar desde el archivo de datos guardado, asegúrese de usar la --no-create-infoopción.
  • Es posible que tenga que añadir las apropiadas -h, -uy -popciones a los comandos de ejemplo anterior con el fin de especificar el host de base de datos, el usuario y la contraseña deseada, respectivamente.
Gary
fuente
38

Puede usar la opción --where en mysqldump para producir una salida que está esperando:

mysqldump -u root -p test t1 --where="1=1 limit 100" > arquivo.sql

Como máximo, se eliminarán 100 filas de test.t1 de la tabla de la base de datos.

Saludos, WB

Wagner Bianchi
fuente
6

Si desea exportar su última n cantidad de registros en un archivo, puede ejecutar lo siguiente:

mysqldump -u user -p -h localhost --where "1=1 ORDER BY id DESC LIMIT 100" database table > export_file.sql

Lo anterior guardará los últimos 100 registros en export_file.sql, suponiendo que la tabla desde la que está exportando tenga una columna de identificación con incremento automático.

Deberá modificar los valores de usuario, localhost, base de datos y tabla. Opcionalmente, puede modificar la columna de identificación y exportar el nombre del archivo.

aullah
fuente
5

MySQL Workbench también tiene esta característica perfectamente en la GUI. Simplemente ejecute una consulta, haga clic en el icono Guardar junto a Exportar / Importar:

ingrese la descripción de la imagen aquí

Luego elija "sentencias SQL INSERT (* .sql)" en la lista.

ingrese la descripción de la imagen aquí

Ingrese un nombre, haga clic en guardar, confirme el nombre de la tabla y tendrá su archivo de volcado.

MPelletier
fuente
3

Combinar mucho de lo anterior aquí es mi ejemplo práctico real, seleccionando registros basados ​​tanto en meterid como en marca de tiempo. He necesitado este comando durante años. Se ejecuta muy rápido.

mysqldump -uuser -ppassword main_dbo trHourly --where="MeterID =5406 AND TIMESTAMP<'2014-10-13 05:00:00'" --no-create-info --skip-extended-insert | grep  '^INSERT' > 5406.sql
zzapper
fuente
-1

mysql Exporte la línea de comando de resultados de la consulta:

mysql -h120.26.133.63 -umiyadb -proot123 miya -e "select * from user where id=1" > mydumpfile.txt
lanni654321
fuente
me está funcionando en ubuntu, comando: mysql -h localhost -u root -p dbname -e "select * from users where id = 1; select * from staffs where id = 1" --xml> / var / www / html / project / backups / db.xml
Ramesh