Итак рассмотрим как изменить кодировку базы данных для DLE прямо на сервере с использованием shell (SSH) на примере операционной системы CentOS 5. Если база данных очень большая, то для начала идем к файлу конфигурации MySQL сервера my.cnf и меняем в нем временно значение строк max_allowed_packet на большее. Т.е., например:
max_allowed_packet = 256M
Перезапускаем сервер MySQL командойservice mysqld restart
Далее для простоты работы переходим по SSH в папку backup нужного сайта, где и будем проводить все манипуляции с базой данных по смене кодировки с utf-8 на windows-1251.Например, такой командой (все пути в командах будут указаны для примера и вам придется изменить их на свои относительно путей на вашем сервере):cd /var/www/user/data/www/site.ru/backup
На время работы сайт лучше отключить в админпанели скрипта для посетителей.1. Делаем дамп последней базы данных используя раздел админки "Управление базой данных". Дамп обычно имеет название что-то вроде 2012-03-16_02-10_user_base_55e2d753e9072ed783a2258bbf2d6106.sql.gz
Распакуем его командой:
gunzip 2012-03-16_02-10_user_base_55e2d753e9072ed783a2258bbf2d6106.sql.gz
У вас получится файл 2012-03-16_02-10_user_base_55e2d753e9072ed783a2258bbf2d6106.sql, который мы просто переименуем через панель управления для простоты работы, например, в dump.sql. Как вариант, если размер базы данных слишком большой, то дамп можно сделать через shell такой командой:mysqldump -uИМЯ_БАЗЫ -pПАРОЛЬ_БАЗЫ -hlocalhost -A > dump.sql
2. Теперь перекодируем dump.sql в нужную нам кодировку с нужными параметрами командой:iconv -f UTF-8 -t WINDOWS-1251 dump.sql > dump_cp1251.sql
Т.е. мы конвертируем дамп из кодировки utf-8 в windows-1251 и сохраняем его как новый файл с названием dump_cp1251.sql.3. Теперь у нас есть база данных в нужной нам кодировке windws-1251 и нам нужно выставить правильные DEFAULT CHARSET для всех таблиц. Делаем это командой:
cat dump_cp1251.sql | replace "utf8" "cp1251" > dump_cp1251_replace.sql
Т.е. мы меняем в файле базы данных dump_cp1251.sql значения DEFAULT CHARSET с utf8 на ср1251 и сохраняем его как новый файл dump_cp1251_replace.sql.4. Теперь можно восстановить этот дамп, который уже полностью поддерживает кодировку windows-1251, и сразу создать новую базу данных (или указать существующую - таблицы будут перезаписаны) командой:
mysql -uuser -ppassword newbdname --default-character-set=cp1251 < dump_cp1251_replace.sql
На данном примере показан способ конвертирования из UTF-8 в windows-1251. Аналогичным способом конвертируется и из windows-1251 в UTF-8, только кодировки в командах меняются соответственно.
Дополнительно...
Если вы планируете установить новую базу данных на другом домене, то вы можете сразу сменить имя домена по всей базе данных на новое и затем восстановить базу данных. Пример такой замены:
cat dump_cp1251.sql | replace "site.ru" "new.site.ru" > dump_cp1251_replace.sql
И потом восстанавливаем базу по пункту 4.Примечание: Если у вас в процессе создания или восстановления базы данных возникают ошибки сервера, то это обычно связано с маленькими лимитами max_allowed_packet в my.cnf (увеличивайте на очень больших базах пока не пропадет ошибка) или с нехваткой времени выполнения скрипта (время увеличивайте в php.ini или через панель управления).
Комментарии