есть ли способ иметь индикатор выполнения mysqldump, который показывает пользователям статус их резервных копий?
Мне было интересно, есть ли способ определить, в то время как mysqldump работает, сколько из резервной копии завершено или сколько осталось?
Я хотел бы предоставить моим пользователям индикатор выполнения консоли, чтобы показать им состояние их резервных копий...
кстати я хочу написать выше программу в стандартном c++ и платформа будет linux. спасибо!
3 ответа:
да, a патч был совершен 27 марта, 2010:
этот новый патч имеет дополнительный параметр -- show-progress-size который по по умолчанию установлен на 10 000. Поэтому, когда используется -- verbose, каждые 10 000 строки вы получите регулярный вывод состояния количества строк для a конкретный стол свалил.
Так что проверьте свою версию, обновите при необходимости и наслаждайтесь.
установить и использовать
pv
(он доступен в виде пакета yum для CentOS)http://www.ivarch.com/programs/pv.shtml
PV ("Pipe Viewer") - это инструмент для мониторинга хода выполнения данных по трубопроводу. Его можно ввести в любой нормальный трубопровод между двумя процессами, чтобы дать визуальное представление о том, как быстро данные проходит через, сколько времени это заняло, как близко к завершению его есть, и оценка того, как долго это будет до завершения.
предполагая ожидаемый размер результирующего файла дампа.sql файл 100м (100 мегабайт), использование
pv
будет выглядеть следующим образом:
mysqldump <parameters> | pv --progress --size 100m > dumpfile.sql
выход консоли будет выглядеть так:
[===> ] 20%
посмотрите на главную страницу
man pv
дополнительные параметры. Вы можете отобразить скорость передачи, или сколько времени прошло, или сколько байтов было передано, и многое другое.если вы не знаете размер файла дампа, есть способ, чтобы получить размер базы данных MySQL из table_schema - это не будет размер файла дампа, но это может быть достаточно близко для ваших нужд:
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;
обновление
по моему опыту, при сбросе всего сервера MySQL фактический несжатый размер дампа mysql (используя опцию mysqldump --hex-blob) составляет примерно от 75% до 85% от реального размера данных MySQL, полученных из information_schema. Так для общего решения, я мог бы попробовать следующее:
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
полная версия Russell E Glaue ответ. Получить округленный размер БД, как pv принимает только целое число и вычислить длину данных без индексов, в @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';")
создайте резервную копию в имя файла с меткой времени:
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