Перейти к контенту
  • 0

Перевод базы с 2.1.7 на 3


Endy

Вопрос

Рекомендуемые сообщения

  • 0
С дефолтными да. Поэтому и нужен запрос character_set к текущей базе, что бы понять, что выставить в параметре --default-character-set=?

 

Если делать запрос к старой базе:

 

character_set_client 	utf8
character_set_connection 	utf8
character_set_database 	latin1
character_set_filesystem 	binary
character_set_results 	utf8
character_set_server 	latin1
character_set_system 	utf8

 

А если к новой базе форума:

 

character_set_client 	utf8
character_set_connection 	utf8
character_set_database 	utf8
character_set_filesystem 	binary
character_set_results 	utf8
character_set_server 	latin1
character_set_system 	utf8

Изменено пользователем Endy
Ссылка на комментарий
Поделиться на других сайтах

  • 0
Если делать запрос к старой базе:

Гм ...

Когда SypexDumper делает бекап, он какую кодировку таблиц определяет?

В conf_global.php есть строчка --

$INFO['mysql_codepage']			=	'?';

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Если делать запрос к старой базе:

Гм ...

Когда SypexDumper делает бекап, он какую кодировку таблиц определяет?

 

 

 

А когда SypexDumper делает копию, то если в браузере стоит UTF8, буквы портятся. Я уже пробовал в этом dumper.php скрипте менять кодировку на UTF8, но никакого результата это не дало.

 

В conf_global.php есть строчка -- 
[code]$INFO['mysql_codepage']			=	'?';

Там стоит "utf8"

 

Попробовал делать дамп с mysqldump, потом перекодировка и восстановление. Не помогло.

Изменено пользователем Endy
Ссылка на комментарий
Поделиться на других сайтах

  • 0
А когда SypexDumper делает копию, то если в браузере стоит UTF8

Я не о том. SypexDumper при работе пишет

 

Подключение к БД `bitrix`.
Создание файла с резервной копией БД:
-  bitrix_2010-03-20_17-56.sql
------------------------------------------------------------
Установлена кодировка соединения `cp1251`.
Обработка таблицы `b_agent` [11].
Установлена кодировка соединения `utf8`.
Обработка таблицы `b_blog` [4].

Вот интересны значение -- Установлена кодировка соединения...

 

Там стоит "utf8"

А нужна ли перекодировка таблиц .... (мысли вслух).

 

Попробовал делать дамп с mysqldump,

С параметром --default-character-set=latin1 ?

 

потом перекодировка и восстановление. Не помогло.

Я бы не перекодировал пока. Главная цель, получить нормально читаемый дамп. А потом, поменять кодировку, уже проще.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

В клиент-центре подсказали правильное решение.

 

Делаем запрос для каждой таблицы по-отдельности

 

ALTER TABLE`ibf_topics` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci, CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

итд. для всех таблиц. Естественно всё это можно вставить в один SQL запрос.

 

Теперь экспортируем базу данных. Мне пришлось экспортировать также по таблицам, потому что ограничения на сервере не давали потом сделать импорт базы 90Мb. Чтобы упростить себе жизнь написал пару маленьких bash скриптов.

 

Этот делает дамп с каждой таблицы в базе данных и сохраняет его в каталоге "tables". Список таблиц надо предварительно сохранить в файле "pattern"

#!/bin/sh
file=pattern
mysqldump='/usr/local/mysql-5.1.39-linux-i686-glibc23/bin/mysqldump -u USER_NAME -pPASSWORD  BASE_NAME'
cat $file | while read line; do
if [ $line ]; then
$mysqldump --tables $line  > tables/$line
echo -ne 'Создан дамп для таблицы: '$line''
echo
tput sgr0
echo
fi
done

 

Теперь дампы таблиц нужно дважды перекодировать. Честно говоря, я не понял почему.

 

$ iconv -c -f utf8 -t latin1 ibf_topics.sql > test
$ iconv -f cp1251 -t utf8 test > final

 

Я сделал перекодирование этим скриптом.

#!/bin/bash
file=pattern
cat $file | while read line; do
if [ $line ]; then
iconv -c -f utf8 -t latin1 tables/$line > test
iconv -f cp1251 -t utf8 test > $line
rm -f test
echo "OK"
fi
done

 

Всё. Восстанавливаем дамп любым доступным способом. Поскольку у меня есть SSH доступ, немного автоматизировал этот процесс.

 

#!/bin/bash
file=pattern
cat $file | while read line; do
if [ $line ]; then
mysql -u USER_NAME -pPASSWORD BASE_NAME < $line
echo "Restore from dump '$line' is done"
fi
done

 

Вот и всё. Делем апгрейд и форум в порядке!

 

Огромное спасибо клиент-центру за точный и оперативный ответ и P(A) и Ritsuka за участие и помощь!

Изменено пользователем Endy
Ссылка на комментарий
Поделиться на других сайтах

Гость
Эта тема закрыта для публикации сообщений.
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.