Раз в неделю мне нужно запустить гигантское обновление базы данных в мою локальную среду разработки, например:
$ 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.