Есть ли способ показать прогресс на `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.
Ответы
Ответ 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 недоступными?