Есть ли способ показать прогресс на `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 &

Я пытаюсь запустить их в одночасье, так как это может занять несколько часов.

Можете ли вы помочь мне придумать способ показать прогресс в выполнении этих задач?

Вот некоторые догадки:

  1. Получить несжатый размер файла БД и сравнить с моим локальным размером БД
  2. Бежать show processlist в mysql, чтобы увидеть, какую таблицу он в настоящее время вставляет (мой текущий метод, но некоторые таблицы огромны, и по крайней мере одна моя база данных имеет только одну гигантскую таблицу, поэтому большая часть процесса застряла в этой таблице, оставляя эту опцию менее чем полезной)

Все файлы db.sql.gz являются стандартными gzipped mysqldumps, поэтому я не думаю, что могу что-то встроить в дампы, чтобы дать мне обновление. (Но я открыт для этого, если я что-то упустил)


Правила Баунти

Ответы должны:

  1. Обеспечить полезный и достаточно точный прогресс scp (предпочтительно!) или через простую таблицу базы данных прогресса, к которой можно легко получить доступ).
  2. Не нарушать регулярные mysqldump экспортный или регулярный gunzip ... | mysql импорт (для других инженеров, которые могут не использовать то, что вы придумали)
  3. Не давайте моему 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" в каталоге баз данных. Если я знаю размер исходного каталога базы данных (почему бы и нет?), Я могу использовать его в качестве монитора прогресса. БД могут быть сброшены?

Другие вопросы по тегам