AddThis Smart Layers

понедельник, 27 сентября 2010 г.

Восстановление большой базы данных MySQL из дампа

На днях нужно было локально, в Windows, запустить рабочую копию сайта клиента. После всех чисток, объем базы данных составлял "всего" 1.5 гига.
Так как локально стоит Wamp, из доступных средств для заливки sql дампа такого размера был только phpmyadmin. Тот же EMS MySQL Manager даже слышать не хотел ничего о том чтобы открыть 1.5 гиговый скрипт.


Чтобы phpmyadmin смог переварить такой скрипт, нужно:
1. увеличить время таймаута php
2. увеличить время обработки sql в самом phpmyadmin

Во-первых, как оказалось, файл настроек php.ini в Wamp-е находится не в папке PHP, а в папке Apache
C:\wamp\bin\apache\apache2.2.8\bin\php.ini
Примечание: Путь к Wamp может меняться в зависимости от того где он установлен, а также версия Apache может быть другой.

В этом файле нужно выставить следующие настройки:
post_max_size = 750M
upload_max_filesize = 750M
max_execution_time = 18000
max_input_time = 18000
memory_limit = 1000M

По большому счету цифры 750M, 18000, 1000M взяты с потолка. Главное чтобы это были какие-то очень большие значения.

Далее, нужно дописать пару значений переменных в файле настроек phpmyadmin.
Обычно он находится здесь:
C:\wamp\apps\phpmyadmin3.2.0.1\config.inc.php
Примечание: Путь к phpmyadmin может меняться в зависимости от того где установлен Wamp, а также версия может быть другой.

Переменная $cfg['UploadDir'] уже присутствует в файле, но она пуста.
Пропишем в нее путь к папке где лежит файл дампа базы данных:
$cfg['UploadDir'] = 'C:/Users/User/Documents/backups';
Важно, файл с дампом должен иметь расширение sql, либо sql.gz чтобы система могла его распознать.

Далее, прописываем новую переменную (по умолчанию ее нет в файле настроек):
$cfg['ExecTimeLimit'] = 0;

Эта переменная отменяет лимит времени на обработку sql скриптов. Для Wamp вполне нормально, для рабочих серверов как эта, так и настройки в php.ini указанные выше совершенно неприемлимы.

После этого перезапускаем Wamp и теперь при импорте базы данных в phpmyadmin появится новое поле selectlist с доступными в указанной папке дампами. Выбираем нужную базу и запускаем импорт.

В моем случае, после 40 минут обработки система сообщила что в скармливаемом sql есть ошибка несовместимая с жизнью и благополучно убилась.

Самое обидное, тот же самый дамп залитый на сервере с помощью mysqldump команды отработал на ура.

Комментариев нет :

Отправить комментарий