2011-02-11 26 views
13

Quiero hacer un mysqldump directamente a mi servidor remoto. He visto sugerencias para usar el modificador -c o usar gzip para comprimir los datos sobre la marcha (y no en un archivo). ¿Cuál es la diferencia entre los dos? ¿Cómo puedo saber si ambas máquinas admiten el interruptor -C? ¿Cómo haría un gzip sobre la marcha? Estoy usando linux en ambas máquinas.¿cuál es la diferencia entre -C y gzipping un mysqldump?

mysqldump -C -u root -p database_name | mysql -h other-host.com database_name 
+0

Hasta donde yo sé, -C comprime el código sql mientras se envía desde el servidor mysql de origen al servidor de destino donde está volcando el sql, luego lo descomprime en el servidor de destino y guarda el código descomprimido archivo en el (usualmente) disco duro. Mientras gzipping daría como resultado un archivo comprimido (gzip) que se guarda en el disco duro. –

Respuesta

15

La opción -C utiliza compresión que puede estar presente en el protocolo cliente-servidor MySQL. Gzip'ing usaría la utilidad gzip en una tubería. Estoy bastante seguro de que esto último no serviría de nada ya que la compresión y la descompresión ocurrirían en la misma máquina en este caso. Si la máquina desde la que está descargando es local, entonces la opción -C probablemente esté desperdiciando ciclos de CPU: comprime los mensajes de protocolo entre mysqldump y mysqld daemon.

La única canalización de comandos que podría tener sentido aquí es algo como:

mysqldump -u root -p database_name | mysql -C -h other-host -Ddatabase_name -B 

La salida de mysqldump va a la tubería que va a leer el cliente mysql de línea de comandos. La opción -C dice mysql para comprimir los mensajes que está enviando al other-host. La opción -B deshabilita el almacenamiento en búfer y el comportamiento interactivo en el cliente mysql, lo que puede acelerar un poco más las cosas.

Probablemente sería más rápido para hacer algo como:

mysqldump -u root -p database_name | gzip > dump.gz 
scp dump.gz [email protected]:/tmp 
ssh [email protected] "gunzip /tmp/dump.gz | mysql -Ddatabase_name -B; rm /tmp/dump.gz" 

Siempre que tenga SSH corriendo en la otra máquina de todos modos.

+0

¿Dónde puedo encontrar más información sobre -B? No puedo encontrar nada. ¿Actúa como --quick? –

+0

No debería ser: "mysqldump -C -u root -p nombre_base_datos | mysql -h otro-host -Ddatabase_name -B"? –

+1

No, la opción '-C' comprime la comunicación entre la aplicación cliente (' mysqldump' o 'mysql') y el servidor (' mysqld'). La ejecución de las compresiones 'mysqldump -C' y de la conexión con * localhost * le dice al daemon de MySQL que comprima los datos que está enviando a' mysqldump', que luego los descomprime antes de escribir en la tubería de salida.Usar la opción de compresión solo tiene sentido cuando la aplicación cliente y el daemon se encuentran en hosts separados. –

0

Siempre leo las páginas man para este tipo de cosas. Si nos fijamos en la man pages for mysqldump se puede ver que el -C (eso es un de capital C) bandera hace que la compresa mysqldump todos los datos en tránsito solo . esto hace que se transmita en secuencia, pero llega, como lo verán, sin comprimir. Puedes volcar el archivo al sistema local y luego transferir un gzip de todo a la vez.

de la página man:

o --compress, -C 

     Compress all information sent between the client and the server if 
     both support compression. 
+0

"... pero llega, como lo verás, sin comprimir" ... ¿qué significa eso? ¿Cómo pasa de comprimido a descomprimido? ¿Está usando el interruptor -C básicamente haciendo un gzip sobre la marcha? –

+1

".... si ambos admiten compresión." ¿Cómo sé si mis dos servidores admiten compresión? –

+0

No puedo suponer que esté haciendo gzip, pero lo comprime sobre la marcha. –

Cuestiones relacionadas