Подтвердить что ты не робот

Есть ли способ иметь индикатор выполнения mysqldump, который показывает пользователям статус их резервных копий?

Мне было интересно, есть ли способ определить, в то время как mysqldump запущен, сколько из резервной копии завершено или сколько осталось?

Я хотел бы предоставить своим пользователям панель выполнения консоли, чтобы показать им статус их резервных копий...

Кстати, я хочу написать вышеуказанную программу в стандартном С++, и платформа будет linux. благодарю!

4b9b3361

Ответ 1

Да, патч был отправлен 27 марта 2010 года:

Этот новый патч имеет дополнительный параметр --show-progress-size, который значение по умолчанию - 10 000. Поэтому, когда используется --verbose, каждые 10 000 вы получите регулярный вывод состояния количества строк для определенная таблица сбрасывается.

Поэтому проверьте свою версию, при необходимости обновите ее и наслаждайтесь.

Ответ 2

Установите и используйте pv (он доступен как пакет yum для CentOS)

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

PV ( "Pipe Viewer" ) - это инструмент для мониторинга прогресса данных через трубопровод. Он может быть вставлен в любой нормальный трубопровод между двумя процессами, чтобы дать визуальную индикацию того, как быстро данные проходит, сколько времени прошло, как близко к его завершению является, и оценка того, как долго это будет до завершения.

Предполагая, что размер ожидаемого файла dumpfile.sql составляет 100 м (100 мегабайт), использование pv будет следующим:

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

Выход консоли будет выглядеть так:

[===> ] 20%

Посмотрите справочную страницу man pv для получения дополнительных параметров. Вы можете отобразить скорость передачи или сколько времени прошло, сколько было передано байт и т.д.

Если вы не знаете размер вашего файла дампа, есть способ получить размер базы данных MySQL из таблицы_схема - это не будет размер вашего файла дампа, но он может быть достаточно близок к вашему необходимо:

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;

Ответ 3

Полная версия ответа Russell E Glaue. Получите округленный размер db, поскольку 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