Как далеко продвинется импорт моего дампа MySQL?
В моей компании мы иногда импортируем большие клиентские базы данных MySQL (более 40 ГБ), которые могут загружаться на наших машинах разработчиков в течение дня. Хотя мы принимаем это время загрузки, поскольку оно выполняется в фоновом режиме, у нас нет какой-либо надежной возможности оценить, когда импорт завершится. Это блокирует нас от планирования соответствующего времени, чтобы действовать в соответствии с этим. Это все равно, что ждать появления кабельного парня.
Сейчас моя лучшая стратегия - это быстрый show tables
Команда, чтобы увидеть, какой процент таблиц были загружены. Однако, поскольку размеры таблиц сильно различаются как между собой, так и с каждым клиентом, это даже близко не является надежным.
У кого-нибудь есть хорошая техника или инструмент, который можно использовать для получения надежного процента того, как далеко продвинется импорт MySQL?
3 ответа
Вы можете сделать это с pv
Команда, отправив дамп в mysql
,
pv -i 1 -p -t -e /path/to/sql/dump | mysql -u USERNAME -p DATABASE_NAME
Он покажет вам индикатор выполнения во время выполнения импорта на основе пропускной способности ввода-вывода. (Как видно здесь.)
HeidiSql скажет вам, сколько ГБ уже загружено, что очень полезно при попытке выяснить, сколько еще нужно загрузить.
Вы также можете сделать show processlist
в исходной базе данных, чтобы увидеть, как далеко (с помощью автоматического увеличения идентификатора) в конкретной таблице экспорт. Эрик отмечает, что вы можете контролировать размер каталога данных базы данных по сравнению с размером источника.
Что-то, что я нашел полезным в ускорении дампов / импортов, - это делать это по таблицам, а затем запускать несколько mysqldumps одновременно, по существу, многопоточность вашего процесса. Я обычно делал около 4 отдельных дампов / восстановлений одновременно. Оптимальное количество будет зависеть от вашего оборудования и дисковых возможностей.
Очень упрощенный пример, чтобы дать вам идею:
mysqldump dbname table1 table2 table3 | mysql -h host &
mysqldump dbname table4 table5 table6 | mysql -h host &
mysqldump dbname table7 table8 table9 | mysql -h host &