Saltar al contenido

¿MySQLdump admite una barra de progreso?

Solución:

Instalar y usar pv (está disponible como paquete yum para CentOS)

http://www.ivarch.com/programs/pv.shtml

PV (“Pipe Viewer”) es una herramienta para monitorear el progreso de los datos a través de una tubería. Se puede insertar en cualquier canalización normal entre dos procesos para dar una indicación visual de la rapidez con la que pasan los datos, cuánto tiempo han tardado, qué tan cerca de completarse está y una estimación de cuánto tiempo tardará en completarse.

Suponiendo que el tamaño esperado del archivo dumpfile.sql resultante es de 100 m (100 megabytes), el uso de pv sería el siguiente:

mysqldump <parameters> | pv --progress --size 100m > dumpfile.sql

La salida de la consola se verá así:

[===> ] 20%

Mira la página del manual man pv para más opciones. Puede mostrar la tasa de transferencia, cuánto tiempo ha transcurrido, cuántos bytes se han transferido y más.

Si no conoce el tamaño de su archivo de volcado, hay una manera de obtener un tamaño de la base de datos MySQL a partir de table_schema; no será el tamaño de su archivo de volcado, pero puede ser lo suficientemente cercano para sus necesidades:

SELECT table_schema AS "Database", ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS "Size (MB)" FROM information_schema.TABLES GROUP BY table_schema;

Actualizar

En mi experiencia, al descargar todo el servidor MySQL, el tamaño real sin comprimir del volcado de mysql (usando la opción mysqldump –hex-blob) es aproximadamente entre el 75% y el 85% del tamaño en vivo de los datos MySQL obtenidos de information_schema. Entonces, para una solución general, podría intentar lo siguiente:

SIZE_BYTES=$(mysql --skip-column-names <parameters> <<< 'SELECT ROUND(SUM(data_length) * 0.8) AS "size_bytes" FROM information_schema.TABLES;')

mysqldump <parameters> --hex-blob | pv --progress --size $SIZE_BYTES > dumpfile.sql

Sí, se comprometió un parche el 27 de marzo de 2010:

Este nuevo parche tiene un parámetro adicional –show-progress-size que por defecto está configurado en 10,000. Entonces, cuando se usa –verbose, cada 10,000 líneas obtendrá una salida de estado regular del número de filas para una tabla en particular volcada.

Así que verifique su versión, actualice si es necesario y disfrute.

Una versión completa de la respuesta de Russell E Glaue. Obtenga un tamaño de base de datos redondeado ya que pv solo acepta números enteros y calcule la longitud de los datos sin índices, según el comentario de @mtoloo:

db_size=$(mysql  -h"$DB_HOST" 
    -u"$DB_USERNAME" 
    -p"$DB_PASSWORD" 
    --silent 
    --skip-column-names 
    -e "SELECT ROUND(SUM(data_length) / 1024 / 1024, 0) 
        FROM information_schema.TABLES 
        WHERE table_schema="$DB_NAME";")

Cree una copia de seguridad en un nombre de archivo con marca de tiempo:

mysqldump -h"$DB_HOST" 
    -u"$DB_USERNAME" 
    -p"$DB_PASSWORD" 
    --single-transaction 
    --order-by-primary 
    --compress 
    $DB_NAME | pv --progress --size "$db_size"m > "$(date +%Y%m%d)"_backup.sql
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *