Перейти к содержанию
  • Обновление форума IP.Board 2.3.x - 4.1.x

       (0 отзывов)

    invisionbyte

     

    Основная проблема обновления форума IP.Board 3.x это конечно же кодировка, на версиях 2.x русскоязычные форумы в основном пользовались кодировкой cp1251. Если кодировка форума utf8, значит вы сэкономите время на конвертации базы данных.

    Исходная информация о пациенте:

    • Версия форума: 2.3.4
    • До какой версии будем обновляться: 4.1
    • На форуме сообщений: 902482
    • Зарегистрировано пользователей: 30311

    Приступим...

    Копия форума

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

    Процесс обновления будет производиться постепенно по каждой линейке: 3.0.x -> 3.1.x -> 3.2.x -> 3.3.x -> 3.4.x -> 4.0.x -> 4.1.x . Эта схема выбрана не зря - она зарекомендовался себя как самая стабильная схема обновления с минимально возможным возникновением ошибок.

    Supex Dumper

    Скачать программу можно на официальном сайте - https://sypex.net/, упрощённая версия программы абсолютно бесплатна, она нам вполне подойдёт. Скачиваем программу и загружаем папку sxd в корневой каталог форума. Переходим в адресной строке по адресу site.ru/sxd, вводим данные для доступа к базе и видим очень простой и удобный интерфейс, позволяющий импортировать/экспортировать базу.

    SSH

    Для подключения по протоколу SSH воспользуемся программой Putty, скачать которую можно также абсолютно бесплатно с сайта putty.org.ru/download.html. Подключаемся к серверу и снимаем копию с помощью команд:

    Экспорт

    mysqldump -u пользователь_БД -p имя_БД > имя_файла

    Импорт

    mysql -u пользователь_БД -p имя_БД < файл_дампа_БД

    Теперь работаем только с копией форума

    Удаление ненужных файлов

    В IP.Board 2.x используется устаревшая структура директорий, поэтому нам необходимо почистить форум перед обновлением и удалить все ненужные для дальнейшего использования файлы и папки.

    Удаляем:

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

    Загружаем дистрибутив IP.Board 305.zip в корень форума и распаковываем архив с заменой файлов. Проходим процесс авторизации и выставляем chmod 0777 на соответствующие папки:

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

    Открываем файл conf_global.php и меняем строчку

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

    На

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

     

    Конвертация базы данных из cp1251 в utf8

    Для процесса конвертации кодировки базы, необходимо выполнить определённый запрос к каждой таблице:

    ALTER TABLE название_таблицы DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci, CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci ;

    либо воспользоваться скриптом, позволяющим создать такие запросы автоматически. Автор скрипта - Ritsuka. Сам скрипт:

    Спойлер
    
    <?php
    include("conf_global.php");
    $codepage='utf8';
    $collation='utf8_general_ci';
    $dbhost = $INFO['sql_host'];
    $dbuser = $INFO['sql_user'];
    $dbpass = $INFO['sql_pass'];
    $dbname = $INFO['sql_database'];
    $dbprefix = $INFO['sql_tbl_prefix'];
    if( !ini_get('safe_mode') ){ 
                @set_time_limit(0); 
            } 
    @header("Content-Type: text/plain; charset=UTF-8"); 
    $dbconn = mysql_connect($dbhost, $dbuser, $dbpass) or die( mysql_error() );
    $db = mysql_select_db($dbname) or die( mysql_error() );
    
    $sql = "ALTER DATABASE `".$dbname."` DEFAULT CHARACTER SET $codepage COLLATE $collation";
    print "$sql;\n";
    
    $sql ="SELECT table_name FROM information_schema.tables WHERE table_schema = '".$dbname."' AND table_collation NOT LIKE '".$collation."' AND table_name LIKE "."'".$dbprefix."%';";
    
    $result = mysql_query($sql) or die( mysql_error() );
    
    while ( $row = mysql_fetch_row($result) )
    {
    $table = mysql_real_escape_string($row[0]);
    $sql = "ALTER TABLE $table DEFAULT CHARACTER SET $codepage COLLATE $collation, CONVERT TO CHARACTER SET $codepage COLLATE $collation";
    print "$sql;\n";
    }
    
    mysql_close($dbconn);
    flush();
    ?>

     

    Копируем содержание скрипта и вставляем в файл php, например convert.php. Загружаем файл на сервер и обращаемся к файлу из строки браузера. Результатом работы скрипта вы увидите запросы к базе, которые необходимо выполнить в phpmyadmin.

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

    После перекодирования базы рекомендуется сделать её копию, например тем же Supex Dumper, чтобы у вас всегда была в наличии база в utf8. Теперь у нас всё готово для запуска процесса обновления.

    Обновление форума до 3.0.5

    Обращаемся в адресной строке по адресу: site.ru/admin/upgrade и следуем указаниям мастера обновления. В процессе обновления форума IP.Board до 3.0.5 у вас могут возникнуть следующие ошибки:

    Ошибка: CREATE TABLE. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TYPE=MyISAM' at line 33

    Начиная с версии MySQL 5.5 синтаксис изменился с TYPE= на ENGINE= . Таким образом, необходимо скопировать весь лог ошибок в текстовый документ. 

    Исправление ошибки. В таком случае нам нужно запустить процесс обновления ещё раз. Отметьте опцию выполнения запросов вручную перед началом обновления, в этом случае у нас появится возможность самостоятельно выполнять необходимые запросы исправив TYPE=MyISAM на ENGINE=MyISAM вручную. То есть, перед выполнение предложенных мастером запросов, мы их исправляем. ВНИМАНИЕ: проверяйте каждый запрос на наличие 'TYPE=MyISAM'.

    После обновления возникла другая неприятная ошибка - текст сообщений отображается знаками вопроса:

    Спойлер

    img1.thumb.PNG.daa1486ac460c933213f42a0c

    Идём в базу и видим точно такую же картину:

    Спойлер

    img2.thumb.PNG.e8aea6b2a70ffd89fa02c5475

    Делаем вывод - нужно было убедиться не только в правильном сравнении таблиц (utf8_general_ci), но и правильное отображение данных в них, хотя бы в самых основных - сообщения, темы, форумы, пользователи. 

    Перекодировка базы в utf8 с помощью Supex Dumper

    Заливаем бэкап базы от 2.3.x и делаем экспорт базы с помощью программы Supex Dumper, выбрав в опции Кодировка значение utf8. После этого удаляем базу в phpmyadmin и импортируем её дампером, снова указав кодировку utf8 и поставив галочку на пункте Коррекция кодировки. 

    Вуаля:

    Спойлер

    img3.thumb.PNG.39c5297a8afba939f6e317959

    Обновление форума с 3.0.5 до 3.1.4

    Загружаем IP.Board  314.zip в корень форума, распаковываем архив с заменой файлов и выставляем права на указанные мастером обновления папки. Для обновления форума переходим по адресу site.ru/admin/upgrade и снова отмечаем галочку на пункте

    В получаемых запросах снова меняем TYPE=MyISAM на ENGINE=MyISAM и выполняем в phpmyadmin. 

    Процесс обновления завершён успешно! Снимаем копию форума (без папки uploads) и базы данных и продолжаем наше обновление.

    Обновление форума с 3.1.4 до 3.2.3

    Технология обновления такая же - загружаем 323.zip в корень форума, распаковываем и переходим по site.ru/admin/upgrade. Начиная с этой версии редактировать запросы уже не нужно, разработчики учли этот момент и исправили запросы для более новой версии MySQL. 

    Обновление форума с 3.2.3 до 3.3.4

    Без проблем обновляемся до IP.Board 334.zip и продолжаем наше обновление.

    Обновление форума с 3.3.4 до 3.4.6

    Точно также производим обновление, залив дистрибутив 3.4.6.zip в корень форума. Проблем на этом этапе не возникло. Если у вас будут проблемы при обновлении - пишите в комментариях, будем разбираться.

    Обновление 3.4.6 до 4.1.4

    Обновление производится по общему принципу - заливаем файлы 4.1.4.zip поверх старых с заменой существующих. Переходим по адресу site.ru/admin/upgrade. Перед обновлением рекомендуем ознакомиться с общей информацией по переходу между линейками 3.x и 4.x - Обновление с 3.x до 4.x - общая информация

     

    Таким образом мы произвели обновление большого форума на IP.Board 2.3.x до актуальной на данный момент версии 4.1.x с  почти миллионом сообщений без потери какой-либо информации.



    Обратная связь

    Рекомендуемые комментарии

    Комментариев нет



    Присоединяйтесь к обсуждению

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

    Гость
    Добавить комментарий...

    ×   Вставлено с форматированием.   Вставить как обычный текст

      Разрешено использовать не более 75 эмодзи.

    ×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

    ×   Ваш предыдущий контент был восстановлен.   Очистить редактор

    ×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

    Загрузка...

×
×
  • Создать...

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

Используя наш сайт вы соглашаетесь с нашей Политикой конфиденциальности