Вопросы и ответы - Макхост

Как перенести базу с одного сервера на другой?

Как перенести базу с одного сервера на другой?

19.11.2015   16:49
Сотрудник Иванов Виктор
 нет комментариев
ОТВЕТЫ НА ВОПРОС (1)
Сотрудник Иванов Виктор

Экспорт и импорт данных в MySQL обычно требуется при переносе информации из одной базы данных MySQL в другую и для осуществления резервного копирования.

Пример команд для экспорта и импорта базы данных:

mysqldump --opt -uимя_пользователя -pпароль -hимя_сервера_БД имя_базы > dump.sql

Данные будут сохранены в файле dump.sql. Далее (в случае необходимости) восстанавливаем данные из резервной копии (дампа) так:

mysql -uимя_пользователя -pпароль -hимя_сервера_БД имя_базы < dump.sql

Если пароль был утерян, вы можете самостоятельно изменить его в панели управления, в разделе "Базы данных".

Дополнительные опции утилиты mysqldump:

Опцию --quick рекомендуется использовать, если база данных MySQL слишком большая для того, чтобы целиком поместиться в памяти. При этом утилита mysqldump выдает ошибку:

mysqldump: Out of memory (Needed XXXXX bytes)
mysqldump: Got error: 2008: MySQL client
run out of memory when retrieving data from server

В итоге строчка для создания копии базы данных получается следующей:

mysqldump --quick --opt -uимя_пользователя -p -hимя_сервера_БД --add-drop-table имя_базы > dump.sql

Для совместимости дампа, сделанного на стороннем сервере мы рекомендуем создавать дамп базы данных с ключом:

--max_allowed_packet=1M

Если во время импорта вы получите ошибку вида:

mysqldump: Error 2020:
Got packet bigger than 'max_allowed_packet'
bytes when dumping table `some_table_name ` at row: 2

значит в вашей базе данных присутствуют данные, которые невозможно разделить на отдельные части, каждая не больше одного мегабайта. Как правило, такое случается, если базу данных MySQL используют для хранения содержимого различных файлов, например, картинок или музыки, не размещая их непосредственно в файловой системе. В таком случае, если размер какого-нибудь файла превышает определённое значение – база данных становится непригодной для использования на наших серверах и потребуется либо удалить такие данные из вашей базы, либо рассмотреть вариант использования сервера баз данных на VPS-сервере, где можно установить нужное ограничение max_allowed_packet в необходимое значение, либо не использовать его вообще.

Для корректного переноса баз в кодировке отличной от cp1251 добавьте опцию

--default-character-set=utf8

Если на сервере, с которого вы переносите базу, Вам недоступен ssh, воспользуйтесь cgi скриптом:

#!/bin/sh DB=db USER=user PASS=pass HOST=localhost TODAY=`/bin/date '+%Y-%m-%d_%H-%M-%S'` echo "Content-Type: text/plain" echo "Content-Disposition: attachment; filename=$DB.$TODAY.sql" echo mysqldump --opt --quick --max_allowed_packet=1M --default-character-set=utf8 -u "$USER" -p"$PASS" -h $HOST $DB

Замените db, user и pass на свои значения, закачайте скрипт в cgi-bin директорию своего сайта под именем dump.cgi, установите на файл права 755 и откройте в браузере http://site.tld/cgi-bin/dump.cgi

Браузер предложит сохранить дамп с именем db.2012-01-01.sql

 

19.11.2015   16:52
 Комментировать

Для ответа нужно зарегистрироваться или авторизоваться.