Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

O mysqldump suporta uma barra de progresso?


Instale e use pv (está disponível como um pacote yum para CentOS)

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

Supondo que o tamanho esperado do arquivo dumpfile.sql resultante seja 100m (100 megabytes), o uso de pv seria o seguinte:

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

A saída do console será semelhante a:

[===> ] 20%

Veja a página de manual man pv para mais opções. Você pode exibir a taxa de transferência ou quanto tempo se passou ou quantos bytes foram transferidos e muito mais.

Se você não souber o tamanho do seu arquivo de despejo, existe uma maneira de obter um tamanho do banco de dados MySQL a partir do table_schema - não será o tamanho do seu arquivo de despejo, mas pode ser próximo o suficiente para suas necessidades:
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;

Atualizar

Na minha experiência, ao despejar todo o servidor MySQL, o tamanho real descompactado do despejo mysql (usando a opção mysqldump --hex-blob) é aproximadamente entre 75% a 85% do tamanho real dos dados MySQL obtidos de information_schema. Então, para uma solução geral, posso tentar o seguinte:

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