Экспорт и импорт данных из MySQL через терминал

18.06.2021

В очередной раз экспортируя и импортируя данные через phpMyAdmin столкнулся с долгим ожиданием, которое заставило найти более быстрый вариант - через терминал linux.

При импорте часто приходилось видеть что-то типа такого:

Достигнут временной лимит выполнения скрипта. Для завершения импорта, пожалуйста повторно отправьте тот же файл и импорт будет возобновлен.

Экспорт

Для экспорта используется утилита mysqldump, по указанной ссылке можно найти используемые этой утилитой опции.

Для примера экспорт 5кк записей занял примерно 8 секунд, а размер sql файла 700 мб (к слову это на слабом ноутбуке):

•••
bash
mysqldump database table --result-file=/home/user/database.sql

Некоторые из опций:

  • -u username - указание пользователя для входа
  • -p - (без параметров), утилита потребует ввода пароля

Импорт

Заходим в MySQL сервер через терминал:

•••
bash
mysql -u user -p

Выбираем базу данных, в которую будет происходить импорт:

•••
sql
USE database_name;

Учитывая рекомендации при импорте из MySQL применяем следующее:

•••
sql
SET autocommit=0; SET unique_checks=0; SET foreign_key_checks=0;

Указываем sql файл импорта:

•••
sql
source path/to/datafile.sql

Далее можно наблюдать вывод процесса импорта прямо в консоль.

Завершаем транзакцию и меняем настройки на первоначальные:

•••
sql
COMMIT; SET unique_checks=1; SET foreign_key_checks=1;