В очередной раз экспортируя и импортируя данные через phpMyAdmin столкнулся с долгим ожиданием, которое заставило найти более быстрый вариант - через терминал linux
.
При импорте часто приходилось видеть что-то типа такого:
Достигнут временной лимит выполнения скрипта. Для завершения импорта, пожалуйста повторно отправьте тот же файл и импорт будет возобновлен.
Для экспорта используется утилита mysqldump, по указанной ссылке можно найти используемые этой утилитой опции.
Для примера экспорт 5кк записей занял примерно 8 секунд, а размер
sql
файла 700мб (на локальном сервере разработчика).
Пример:
$ mysqldump mydatabase mytable --result-file=/home/user/database.sql
Указание mydatabase
является обязательным, а mytable
опциональным, если не будет выбрана таблица для экспорта, то экспортируется вся база данныхю Опция --result-file
указывает куда нужно сохранить файл экспорта, но можно обойтись без нее просто перенаправив вывод в файл:
$ mysqldump mydatabase > /home/user/mydatabase.sql
Возможно потребуется аутентификация, для этого используем имя пользователя (-u username
) и пароль (-p
):
$ mysqldump mydatabase -u root -p > /home/user/mydatabase.sql
Enter password:
Если нужно указать список баз данных для экспорта, то можно использовать опцию --databases
:
$ mysqldump --databases mydatabase1 mydatabase2 > /home/user/mydatabase.sql.gz
Часто бывает что нужно получить сжатые дампы, для этого можно использовать gzip
:
$ mysqldump mydatabase | gzip > /home/user/mydatabase.sql.gz
Но дампы желательно проверить чтобы убедиться что в них действительно пригодная для восстановления информация, это можно сделать при помощи любого просмотрещика файлов, который на лету умеет распаковывать архивы и показывать содержимое, например mcedit
:
Заходим на MySQL сервер через терминал:
$ mysql -u user -p
Выбираем базу данных, в которую будет происходить импорт:
$ USE database_name;
Учитывая рекомендации при импорте из MySQL применяем следующее:
$ SET autocommit=0;
$ SET unique_checks=0;
$ SET foreign_key_checks=0;
Указываем sql
файл импорта:
$ source path/to/datafile.sql
Далее можно наблюдать вывод процесса импорта прямо в консоль.
Завершаем транзакцию и меняем настройки на первоначальные:
$ COMMIT;
$ SET unique_checks=1;
$ SET foreign_key_checks=1;