30 сент. 2017 г.
Всем привет. В этой статье расскажу, как реализовать progress bar для mysqldump. Это может быть полезно, когда нужно сделать дамп достаточно большой базы данных, или наоборот, залить уже имеющийся дамп.
Пусть у нас будет база данных размером примерно 500мб. Для начала попробуем просто сделать дамп. Выполним такую команду:
mysqldump -uroot -p -hlocalhost large_database > large_database_dump.sql
Дамп делается, но т.к. база данных достаточно большая, непонятно, на какой стадии находится процесс. И вообще происходит ли что-то. Остается лишь примерно отслеживать процесс по изменяющимся таблицам в базе данных.
То же самое происходит при импорте дампа базы.
mysql -uroot -p -D large_database < large_database_dump.sql
Тут на помощь приходит утилита pv. Обычно, она установленна по умолчанию. Если нет, то её можно установить такой командой (Ubuntu/Debian):
apt-get install pv
Дамп можно сделать таким образом:
mysqldump -uroot -pTLtXwnzi0MWn -hlocalhost large_database | pv -s 500M > large_database_dump.sql
Здесь нам нужно знать размер базы данных. Чтобы получить примерный размер базы данных, нужно выполнить такой sql запрос:
SELECT table_schema "DB Name",
Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB"
FROM information_schema.tables
GROUP BY table_schema;
Залить дамп базы данных можно такой командой:
pv large_database_dump.sql | mysql -uroot -pTLtXwnzi0MWn -D large_database
Спасибо за внимание!