Есть ли способ иметь индикатор выполнения mysqldump, который показывает пользователям статус их резервных копий?
Мне было интересно, есть ли способ определить, в то время как mysqldump запущен, сколько из резервной копии завершено или сколько осталось?
Я хотел бы предоставить своим пользователям панель выполнения консоли, чтобы показать им статус их резервных копий...
Кстати, я хочу написать вышеуказанную программу в стандартном С++, и платформа будет linux.
благодарю!
Ответы
Ответ 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