Бормотухи.НЕТ

Вернуться   Бормотухи.НЕТ > Web-мастеру > DataLife Engine > Инструкции, модификации и статьи для DLE
Расширенный поиск

Инструкции, модификации и статьи для DLE Сборник инструкции, модов и статей по движку DataLife Engine

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2012, 23:23 Вверх   #1
Коварный тип
 
Аватар для Serberg
Serberg вне форума
Доп. информация
Сообщение Конвертирование кодировки базы данных DLE средствами сервера по SSH

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

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

Итак рассмотрим как изменить кодировку базы данных для DLE прямо на сервере с использованием shell (SSH) на примере операционной системы CentOS 5. Если база данных очень большая, то для начала идем к файлу конфигурации MySQL сервера my.cnf и меняем в нем временно значение строк max_allowed_packet на большее. Т.е., например:
PHP код:
max_allowed_packet 256M 
Перезапускаем сервер MySQL командой
PHP код:
service mysqld restart 
Далее для простоты работы переходим по SSH в папку backup нужного сайта, где и будем проводить все манипуляции с базой данных по смене кодировки с utf-8 на windows-1251.Например, такой командой (все пути в командах будут указаны для примера и вам придется изменить их на свои относительно путей на вашем сервере):
PHP код:
cd /var/www/user/data/www/site.ru/backup 
На время работы сайт лучше отключить в админпанели скрипта для посетителей.

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

Распакуем его командой:
PHP код:
gunzip 2012-03-16_02-10_user_base_55e2d753e9072ed783a2258bbf2d6106.sql.gz 
У вас получится файл 2012-03-16_02-10_user_base_55e2d753e9072ed783a2258bbf2d6106.sql, который мы просто переименуем через панель управления для простоты работы, например, в dump.sql. Как вариант, если размер базы данных слишком большой, то дамп можно сделать через shell такой командой:
PHP код:
mysqldump -uИМЯ_БАЗЫ -pПАРОЛЬ_БАЗЫ -hlocalhost -dump.sql 
2. Теперь перекодируем dump.sql в нужную нам кодировку с нужными параметрами командой:
PHP код:
iconv -f UTF--t WINDOWS-1251 dump.sql dump_cp1251.sql 
Т.е. мы конвертируем дамп из кодировки utf-8 в windows-1251 и сохраняем его как новый файл с названием dump_cp1251.sql.

3. Теперь у нас есть база данных в нужной нам кодировке windws-1251 и нам нужно выставить правильные DEFAULT CHARSET для всех таблиц. Делаем это командой:
PHP код:
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, и сразу создать новую базу данных (или указать существующую - таблицы будут перезаписаны) командой:
PHP код:
mysql -uuser -ppassword newbdname --default-character-set=cp1251 dump_cp1251_replace.sql 
На данном примере показан способ конвертирования из UTF-8 в windows-1251. Аналогичным способом конвертируется и из windows-1251 в UTF-8, только кодировки в командах меняются соответственно.

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

Если вы планируете установить новую базу данных на другом домене, то вы можете сразу сменить имя домена по всей базе данных на новое и затем восстановить базу данных. Пример такой замены:
PHP код:
cat dump_cp1251.sql replace "site.ru" "new.site.ru" dump_cp1251_replace.sql 
И потом восстанавливаем базу по пункту 4.

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

Автор: ower_xz
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 02:39. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot
 

Время генерации страницы 0.09364 секунды с 13 запросами