Almost Over

Импорт и Экспорт больших БД (MySQL/MariaDB) через SSH

Импорт и Экспорт больших БД (MySQL/MariaDB) через SSH

Бывают ситуации, когда дамп БД весит более 200 мб и различные менеджеры баз данных либо не справляются с задачей импорта вовсе, либо справляются, но с ошибками: то gateway timeout вылетит, то сама БД импортируется не полностью, а то и вовсе collation ломается. Можно бесконечно перечислять плюсы и минусы тех или иных менеджеров, однако ни один из них не показал более надёжный импорт, нежели, чем стандартный консольный mysql.

Импорт базы данных

Ниже приведен импорт большой MySQL базы, с временным изменением директивы net_buffer_length до 1 МБ и директивы max_allowed_packet до 1 ГБ. Если Ваша БД весит более 1 ГБ, следует увеличить директиву max_allowed_packet до размера Вашего файла базы данных.

Распаковывем, если файл с БД был сжат

$ gunzip filename.sql.gz

Логинимся в MySQL

$ mysql -u root -p[password]

Смотрим и меняем net_buffer_length

$ show global variables like 'net_buffer_length';
$ set global net_buffer_length=1000000;
$ show global variables like 'net_buffer_length';

Смотрим и меняем max_allowed_packet

$ show global variables like 'max_allowed_packet';
$ set global max_allowed_packet=1000000000;
$ show global variables like 'max_allowed_packet';

Подсоединяемся к нужной БД

$ connect [db_name]

Импортируем файл с БД

$ source /tmp/dbname.sql;

Возвращаем исходную max_allowed_packet

$ set global max_allowed_packet=16777216;
$ show global variables like 'max_allowed_packet';

Возвращаем исходную net_buffer_length

$ set global net_buffer_length=16384;
$ show global variables like 'net_buffer_length';

$ exit

Экспорт базы данных

$ mysqldump -u root -p[password] [db_name] > dbname.sql

Экспорт базы данных в сжатом виде

$ mysqldump -u root -p[password] [db_name] | gzip > compressed_dbname.sql.gz