Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Arsen1

Переход с ipb 2.3.6 на ipb 3

Recommended Posts

Хотел для себя прояснить- до апдейта на 3.0.5 у меня база была вся в MyIsam (по крайней мере так было написано в колонке "тип" напротив всех таблиц), после- изменились ряд таблиц на InnoDB. Но как я понимаю, InnoDB не поддерживает полнотекстовый поиск (он доступен только начиная с версии MySQL 5.6.4, как написано в интернете) и вроде бы работает "хуже" для IPB (техподдержка IPB).

 

1. Так откуда взялась печаль InnoDB в базе? 3.0.5 сама переделала? Тогда зачем ругается на отсутствие полнотекстового поиска?

2. Стоит ли сконвертировать всё в MyIsam (или Inno DB?)?

3. Чем чревато игнорирование "The used table type doesn't support FULLTEXT indexes" при апдейте в последующей работе форумного движка?

4. Каким запросом можно точно выяснить тип таблиц в существующей базе (2.3.6) и сделать батч-конвертацию в тот или иной тип?

 

Спасибо.

Share this post


Link to post

По п.4 ответ нашел сам, работает:

 

<?php

 

$host = 'localhost';

$log = 'логин';

$pass = 'Пароль';

$db = 'Имя базы';

 

mysql_connect($host,$log,$pass);

mysql_select_db($db);

 

$q = mysql_query("SHOW TABLES");

while ($table = mysql_fetch_array($q))

{

mysql_query("ALTER TABLE `".$table['Tables_in_'.$db]."` ENGINE = InnoDB");

}

 

 

?>

Share this post


Link to post

Сам столкнулся с той же проблемой, и всетаки нашел решение здесь спасибо)

Share this post


Link to post
23.12.2009 в 21:21, Ph-A сказал:

Берем дистрибутив IPB 3.x

Любой? В сети читал, что надо самый первый из линейки.

23.12.2009 в 21:21, Ph-A сказал:

Гайд по обновлению до 3x - Обновление форума IP.Board до версии 3

 По ссылке пустая страница - ни сообщения об ошибке, ни другого текста. Совсем пусто.

Share this post


Link to post
11 минут назад, Vlad777 сказал:

Любой? В сети читал, что надо самый первый из линейки.

Можно с помощью версии IPB 3.0.5 или сразу последний IPB 3.4.9 в них есть необходимые скрипты по обновлению с предыдущих версий.

 

11 минут назад, Vlad777 сказал:

По ссылке пустая страница - ни сообщения об ошибке, ни другого текста. Совсем пусто.

В курсе, к сожалению, после обновления этот раздел не обновил, т.к. эти статьи уже музейные, если нужно, то вот её содержимое:

Скрытый текст

В IP.Board 3 было сделано много существенных изменений в архитектуре приложения. Одним из самых больших нововведений стала работа форума с UTF-8.

 

При обновлении вашего старого форума до версии 3, вам скорее всего прийдется столкнуться с необходимостью сконвертировать вашу старую базу в новую (в формате UTF-8).

 

Данная инструкция поможет сделать шаг за шагом.

Шаг 0. Готов ли ты к переходу?

 

Прежде чем грезить о переходе на новый форум, необходимо узнать, сможет ли сервер работать с ним.

 

Для оценки существующей конфигурации PHP, создаем в корневой директории старого форума файл myinfo.php с содержимым


 
 

Запускаем скрипт в браузере. Результатом будет табличка следующего вида:

phpinfo.png

 

Во-первых, версия PHP - она должна быть 5.1.x, а лучше 5.2.x, если версия PHP 4.x.x или PHP 5.3.x, форум у вас работать не будет.

 

Во-вторых, новому IP.Board 3 нужны модули расширения PHP:

 


  •  

  • dom
  • gd
  • iconv
  • libxml
  • mbstring
  • mysqli или mysql
  • Reflection
  • SimpleXML
  • SPL

 

Ищите эти модули поиском по странице. Если одного из выше перечисленных модулей не будет - форум не будет работать.

 

В-третьих, крайне желательно наличие следующих модулей:

 


  •  

  • json
  • sockets
  • sphinx
  • XCache или APC

 

Данные модули позволяют оптимизировать работу форума, но они не обязательны для его работы.

 

В-четвертых, память выделенная для PHP.

 

Найдите значение memory_limit в таблице на странице. Оно должно быть не менее 32M, идеально 128M, значение надо смотреть в первой колонке (Local Value). Если памяти будет меньше, то форум не сможет нормально обновиться, возникнут проблемы с импортированием стилей, настроек и языков.

 

Итак, если все условия выполнены - мы готовы к обновлению. Приступим...

 

Шаг 1. Подготовка.

 

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

Для обладателей SSH

 

Делаем резервную копию базы данных:

 

Получаем всю информацию о соединении с БД


> cat ./mydomain.ru/htdocs/forums/conf_global.php | grep sql

$INFO['sql_driver']			=	'mysql';
$INFO['sql_host']			=	'server.mysql';
$INFO['sql_database']			=	'db_forum';
$INFO['sql_user']			=	'db_user';
$INFO['sql_pass']			=	'db_passw';
$INFO['sql_tbl_prefix']			=	'ibf_';
$INFO['sql_debug']			=	'1';
$INFO['mysql_tbl_type']			=	'MyISAM';
$INFO['mysql_codepage']			=	'cp1251';
 

 

Путь до conf_global.php у вас конечно будет свой. Здесь все данные для наглядности, у вас они будут другими!

 

Теперь когда данные нам известны делаем резервную копию базы


> mysqldump  -h server.mysql -u db_user -p db_forum --default-character-set=cp1251 > dump.sql
 

И сделаем сразу архивчик


> tar -czf dump.tar.gz dump.sql
 

Для обладателей SypexDumper

 

Подробная инструкция по использованию

 

Шаг 2. Новые файлы.

 

Теперь необходимо закачать новые файлы форма на сервер. Для этого в начале разберемся со старыми. Часть из них нам больше уже не понадобиться никогда. Потому удаляем следующие директории и файлы:


./sources
./skin_acp
./retail
./resources
./modules
./lofiversion
./jscripts
./ips_kernel
./interface
./install
./init.php
./index.php
./favicon.ico
./converge_local
./admin.php
./admin
 

Должны остаться следующие файлы и директории:


./uploads
./style_images
./style_emoticons
./style_captcha
./style_avatars
./conf_global.php
./cache
 

Теперь берем дистрибутив форума, и все файлы и директории из папки upload закачиваем на сервер при помощи FTP-клиента. Должно получиться так


./xml.php
./uploads
./style_images
./style_emoticons
./style_captcha
./style_avatars
./robotstxt.txt
./retail
./public
./lofiversion
./ips_kernel
./interface
./initdata.php
./index.php
./hooks
./favicon.ico
./converge_local
./conf_global.php
./cache
./admin
 

Теперь нужно проверить, что все права на директории расставлены правильно. IP.Board 3 требует записи в следующие директории


./cache
./cache/tmp
./cache/lang_cache
./cache/lang_cache/1
./cache/skin_cache
./public/style_images
./public/style_css
./hooks
./uploads
 

И файл ./conf_global.php

 

Для того чтобы не было проблем выставляем этим директориям и файлу CHMOD 777 (rwxrwxrwx).

 

Шаг 3. Подготовка к обновлению.

 

Кодировка в conf_global.php

Ваш старый conf_global нужно изменить, чтобы обновление прошло успешно. Допустим сейчас он выглядит так


 
 

Нам необходимо указать кодировку соединения с базой данных, что бы ее понял новый форум. Для этого после строчки


$INFO['sql_tbl_prefix']			=	'ibf_';
 

Добавляем


$INFO['sql_charset']			=	'utf8';
 

Строчку


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

Можно удалить за ненадобностью.

 

Перекодирование базы данных

 

Это очень важный этап. Если его выполнить неверно, дальнейшее обновление форума не будет иметь смысла.

 

Основная идея перекодирования базы

У нас есть резервная копия базы в файле. Это простой текст в кодировке windows-1251 (cp1251). Для того чтобы перевести этот текст в UTF-8, необходимо воспользоваться конвертером (редактор текста с поддержкой перекодирования, утилита для перекодирования; все что угодно, что может перевести текст из Windows-1251 в UTF-8).

 

После того как текст переведен в UTF-8, необходимо поправить инструкции в этом тексте, чтобы сама база работала с ним как с UTF-8. А именно есть две команды SET NAMES и DEFAULT CHARSET. На базе cp1251 они выглядят так


SET NAMES cp1251

) ENGINE=InnoDB DEFAULT CHARSET=cp1251
 

В нашей резервной копии таких команд больше чем две. Значит нам нужно их заменить во всем файле на


SET NAMES utf8

) ENGINE=InnoDB DEFAULT CHARSET=utf8
 

 

Перекодирование средствами SSH

Воспользуемся утилитой iconv для преобразования нашей резервной копии (которую мы делали на первом шаге), делается это так:


>iconv -f cp1251 -t utf8 dump.sql > dump.utf8
 

 

Назначение ключей следующее:

-f cp1251 – конвертировать из кодировки cp1251

-t utf8 – в кодировку utf8

dump.sql – файл который надо сконвертировать

> dump.utf8 – результаты конвертации запишутся сюда

 

Возможно появление проблем при конвертации, которые прервут процесс конвертирования. Это как правило происходит из-за невозможности найти соответствие символов одной кодировки в символы другой. В таких случаях стоит добавить еще один ключ (-c) в вызов iconv. Т.е. команда будет выглядеть уже так:


>iconv -c -f cp1251 -t utf8 dump.sql > dump.utf8
 

 

В этом случае при возникновении проблемы при конвертировании, символ будет пропущен, а конвертирование продолжится.

 

Итак весь текст у нас переведен в UTF-8, теперь необходимо изменить команды SQL. Делается это так

 

Собственно так как дамп у нас должен быть в правильной cp1251 кодировке, то делаем замену в файле этих значений на новые:

 


> sed 's/SET NAMES cp1251/SET NAMES utf8/g'  1.dump.utf8
> sed 's/DEFAULT CHARSET=cp1251/DEFAULT CHARSET=utf8/g'  dump.utf8.sql
 

 

Данную команду наглядно описать с русскими значениями:

 


sed 's/БЫЛО/СТАЛО/g'  КУДА ЗАПИСЫВАЕМ
 

 

Перекодирование подготовленным SypexDumper

 

В директории Tools дистрибутива мы расположили скрипт измененного SypexDumper, который уже настроен на работу с базой вашего форума. Необходимо закачать данный скрипт в корневую директорию форума на сервере и запустить.

 

Вводите данные для доступа к базе форума в первом окне.

 

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

 

Делаете дамп базы. После завершения dumper напишет, что резервная копия готова и даст ссылку на ее скачивание. Скачивать не надо. Просто заходим по FTP на сервер форума и убеждаемся, что копия действительно сделана и находится в директории cache. Вы можете скачать этот дамп к себе на компьютер. Запомните имя файла резервной копии.

 

Возвращаемся к форме дампера из которой вы начали делать резервную копию. Теперь в нем необходимо выбрать восстановление базы.

В первом выпадающем списке выбираете вашу базу данных, во втором - название файла резервной копии. Запускаете восстановление.

 

После того как восстановление будет завершено. При помощи phpMyAdmin или схожего по возможности инструмента, проверяете, что все таблицы теперь имеют сравнение utf8_general_ci, и все данные внутри таблиц нормально отображаются.

 

Другие способы

 

Конвертирование посредством самого MySQL

 

http://forums.ibresource.ru/index.php?showtopic=58417 от Ritsuka

 

Дополнение к способу Ritsuka для больших баз

 

Если скрипт подвисает на конвертировании базы, в основном на таблице posts, то необходимо воспользоваться модифицированным скриптом и SSH.

 

Загружаете следующий скрипт в корневую директорию форума:

 


 
 

Запускаете скрипт через браузер. Вы получите список инструкций для выполнения в mysql. Копируете код страницы в файл, например win2utf.sql, и закачиваете данный файл на сервер. Запомните путь к файлу, для примера у нас будет путь /home/user/htdocs/

 

Заходите на сервер с использованием SSH и выполняете следующую команду:

 


mysql -uusername -p dbname 
 

 

Имя пользователя username, имя базы dbname и путь до файла sql запросов у вас должны быть свои.

 

Вводите пароль и ожидаете завершения работы команды mysql.

Использование специального Perl скрипта

 

Метод исключительно для SSH.

 

Скачиваете скрипт

 


wget http://www.pablowe.net/convert_charset
 

 

Выставляете ему права на запуск

 


chmod a+x convert_charset
 

 

Запускаете конвертацию базы форума в тестовом режиме

 


./convert_charset --database=database --host=localhost --user=username --askpass --test
 

 

В консоль будут выведены команды, которые будет выполнять скрипт. Убедитесь, что все таблицы базы будут сконвертированы. Если скрипт не сможет найти таблицы, выполните следующую команду:

 


mysql -u username -pDBUSERPASSWORD -e 'SHOW TABLES' database | awk '{if (NR>1) {if (NR==2) {a=$1} else {a=a "," $1}} } END {print a}'
 

Данные для username, DBUSERPASSWORD и database должны быть вашими.

 

Вы получите список таблиц в базе, дальше этот список необходимо добавить к ключу –tables

 


./convert_charset --database=database --host=localhost --user=username --askpass --tables=admin_login_logs,admin_logs,admin_permission_rows,announcements,.... --test
 

 

Убедившись, что все таблицы будут затронуты, запустите команду без ключа –test

 

Восстановление новой базы данных

 

Наша база сконвертирована и готова к обновлению. Однако ее еще надо восстановить на сервере MySQL.

Сначала необходимо поменять кодировку старой базы.

 

При наличии SSH

 


>mysql -u db_user -p db_forum -e 'ALTER DATABASE db_forum DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci'
Enter password:
>
 

 

При отсутствии SSH

 

В любом доступном интерфейсе для работы с базой данных (например, phpMyAdmin) перейти в базу форума и выполнить запрос

 


ALTER DATABASE db_forum DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
 

 

Вместо db_forum должно быть название ваше базы!

 

Теперь развернем базу. Делается это так:

 

При наличии SSH

 


>mysql -u db_user -p --default-character-set=utf8 db_forum 
 

 

При отсутствии SSH

 

Восстанавливать лучше SypexDumper. Закидываете сконвертированную резеврную копию в директорию, куда SypexDumper сохраняет резервные копии баз. И запускаете SypexDumper. Внимательно следуете инструкциям

 

Дамп развернут, кодировка базы utf8, база готова для обновления.

 

Шаг 4. Обновление

 

Теперь у нас все готово, чтобы запустить скрипт обновления. Заходите браузером на страницу http://mydomain.ru/forum/admin/upgrade/ и следуете указаниям мастера обновления.

 

Шаг 5. Ошибки после обновления

 

Кодировка страниц

 

Бывает так, что после обновления, зайдя на страницу форума, вы видите что-то подобное:

oh_shit.png

 

Проблема в том, что выбирается не правильная кодировка для страниц. Проверьте в АЦ параметр Кодировка страниц форума (АЦ → Системные настройки → Настройки серверного окружения → Кодировка страниц форума) он должен содержать значение utf-8.

 

Если все правильно, попробуйте создать файл .htaccess в корневой директории сервера, со следующим содержанием:

 


AddDefaultCharset utf-8
AddCharset utf-8 *

CharsetSourceEnc utf-8
CharsetDefault utf-8
 

 

Не все символы выводятся

 

При просмотре страницы форума, часть символов пропала, а вместо них ромбики:

wtf.png

 

Причины может быть две:

1. Вы забыли изменить conf_global.php так как об этом писалось в шаге 1.

Попробуйте выполнить эти изменения, если не поможет внимательно повторите обновление.

2. Вы сконвертировали базу, которая уже была в UTF.

Начните обновление с шага 2, но не выполняйте перекодирование базы (самого текста), а только выполните замены команд SQL.

 

  • Like 1

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...