Конвертирование кодировки базы данных DLE по SSH

Иногда при использовании больших баз данных, например при размерах более одного гигабайта, конвертирование БД в ту или иную кодировку становится не возможным при использовании текстовых редакторов или PHP скриптов, в связи с их ограниченными возможностями. Для таких случаев прекрасно подходят достаточно быстрые операции с использованием SSH, о чем собственно и пойдет речь в данной статье.

Итак рассмотрим как изменить кодировку базы данных для DLE прямо на сервере с использованием shell (SSH) на примере операционной системы CentOS 5. Если база данных очень большая, то для начала идем к файлу конфигурации MySQL сервера my. cnf и меняем в нем временно значение строк max_allowed_packet на большее. Т. е. например:

Перезапускаем сервер MySQL командой

Далее для простоты работы переходим по SSH в папку backup нужного сайта, где и будем проводить все манипуляции с базой данных по смене кодировки с utf-8 на windows-1251.Например, такой командой (все пути в командах будут указаны для примера и вам придется изменить их на свои относительно путей на вашем сервере):

На время работы сайт лучше отключить в админпанели скрипта для посетителей.

1. Делаем дамп последней базы данных используя раздел админки “Управление базой данных”. Дамп обычно имеет название что-то вроде 2012-03-16_02-10_user_base_55e2d753e9072ed783a2258bbf2d6106.sql. gz

Распакуем его командой:

У вас получится файл 2012-03-16_02-10_user_base_55e2d753e9072ed783a2258bbf2d6106.sql, который мы просто переименуем через панель управления для простоты работы, например, в dump. sql. Как вариант, если размер базы данных слишком большой, то дамп можно сделать через shell такой командой:

2. Теперь перекодируем dump. sql в нужную нам кодировку с нужными параметрами командой:

Т. е. мы конвертируем дамп из кодировки utf-8 в windows-1251 и сохраняем его как новый файл с названием dump_cp1251.sql.

3. Теперь у нас есть база данных в нужной нам кодировке windws-1251 и нам нужно выставить правильные DEFAULT CHARSET для всех таблиц. Делаем это командой:

Т. е. мы меняем в файле базы данных dump_cp1251.sql значения DEFAULT CHARSET с utf8 на ср1251 и сохраняем его как новый файл dump_cp1251_replace. sql.

4. Теперь можно восстановить этот дамп, который уже полностью поддерживает кодировку windows-1251, и сразу создать новую базу данных (или указать существующую – таблицы будут перезаписаны) командой:

На данном примере показан способ конвертирования из UTF-8 в windows-1251. Аналогичным способом конвертируется и из windows-1251 в UTF-8, только кодировки в командах меняются соответственно.

Дополнительно.

Если вы планируете установить новую базу данных на другом домене, то вы можете сразу сменить имя домена по всей базе данных на новое и затем восстановить базу данных. Пример такой замены:

И потом восстанавливаем базу по пункту 4.

Примечание: Если у вас в процессе создания или восстановления базы данных возникают ошибки сервера, то это обычно связано с маленькими лимитами max_allowed_packet в my. cnf (увеличивайте на очень больших базах пока не пропадет ошибка) или с нехваткой времени выполнения скрипта (время увеличивайте в php. ini или через панель управления).