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

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

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

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

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

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

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


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

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

  • Обеспечьте полезный и достаточно точный прогресс (либо визуальный, как scp (предпочтительный!), либо через простую таблицу базы данных прогресса, к которой можно легко получить доступ).
  • Не прерывать регулярный mysqldump экспорт или регулярный gunzip ... | mysql импорт (для других инженеров, которые не могут использовать все, что вы придумали)
  • Не давайте моему DBA сердечный приступ - так что оставайтесь в курсе особых mysqldump или альтернативных запросов ветвей mysql.
4b9b3361

Ответ 1

В вашей команде вы можете использовать -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

или с macports

sudo port install pv

Ответ 2

Я думаю, что перед загрузкой данных я бы выполнил базу данных с пересылкой, и после нее я смог запустить непрерывный "du -sh" в каталоге баз данных. Если я знаю размер исходного каталога базы данных (почему бы и нет?), То я могу использовать его в качестве монитора прогресса. Являются ли db недоступными?