Прикручиваем прогрессбар к Mysqldump

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

Спасибо за внимание!