Есть ли способ показать прогресс на `gunzip <database.sql.gz | mysql... `процесс?
Раз в неделю мне нужно запускать гигантское обновление базы данных в моей локальной среде разработки, например:
$ gunzip < /path/to/database1.sql.gz | mysql -uUSER -p database1 &
$ gunzip < /path/to/database2.sql.gz | mysql -uUSER -p database2 &
$ gunzip < /path/to/database3.sql.gz | mysql -uUSER -p database3 &
Я пытаюсь запустить их в одночасье, так как это может занять несколько часов.
Можете ли вы помочь мне придумать способ показать прогресс в выполнении этих задач?
Вот некоторые догадки:
- Получить несжатый размер файла БД и сравнить с моим локальным размером БД
- Бежать
show processlist
в mysql, чтобы увидеть, какую таблицу он в настоящее время вставляет (мой текущий метод, но некоторые таблицы огромны, и по крайней мере одна моя база данных имеет только одну гигантскую таблицу, поэтому большая часть процесса застряла в этой таблице, оставляя эту опцию менее чем полезной)
Все файлы db.sql.gz являются стандартными gzipped mysqldumps, поэтому я не думаю, что могу что-то встроить в дампы, чтобы дать мне обновление. (Но я открыт для этого, если я что-то упустил)
Правила Баунти
Ответы должны:
- Обеспечить полезный и достаточно точный прогресс
scp
(предпочтительно!) или через простую таблицу базы данных прогресса, к которой можно легко получить доступ). - Не нарушать регулярные
mysqldump
экспортный или регулярныйgunzip ... | mysql
импорт (для других инженеров, которые могут не использовать то, что вы придумали) - Не давайте моему DBA сердечный приступ - так что будьте спокойны
mysqldump
или альтернативные запросы ветви mysql.
2 ответа
Вы можете использовать -v: подробный режим (показать прогресс) в вашей команде, или есть другой метод, использующий Pipe Viewer (pv
) который показывает ход выполнения команды gzip, gunzip следующим образом:
$ pv database1.sql.gz | gunzip | mysql -u root -p database1
Это выдаст прогресс, подобный scp:
$ pv database1.sql.gz | gunzip | mysql -uroot -p database1
593MiB 1:00:33 [ 225kiB/s] [====================> ] 58% ETA 0:42:25
Вы также можете использовать Pipe Viewer для мониторинга mysqldump:
mysqldump -uroot -p database1 | pv | gzip -9 > database1.sql.gz
Если у вас еще нет pv
Вы можете установить его с помощью:
yum install pv
или с макпортами
sudo port install pv
Я думаю, что выполнил бы удаление базы данных перед загрузкой данных, и после того, как это произошло, я мог запустить непрерывную "du -sh" в каталоге баз данных. Если я знаю размер исходного каталога базы данных (почему бы и нет?), Я могу использовать его в качестве монитора прогресса. БД могут быть сброшены?