VBsupport перешел с домена .ORG на родной .RU
Ура!
Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей
Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже: Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота. Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
При апгрейде движка с vbulletin 4.2.2 на vbulletin connect 5.1.5 столкнулся с проблемой
Code:
Specified key was too long; max key length is 767 bytes
Эта специфическая ошибка у вас возникнет при совпадении двух условий:
Форум использует кодировку UTF-8
MySQL поддерживает формат InnoDB
Скрипт апгрейда по возможности старается использовать формат InnoDB, поскольку он дает ряд преимуществ по отношению к MyISAM (блокировки на уровне строки, а не таблицы и тп)
Проблема описана на сайте MySQL и связана с тем что по умолчанию в InnoDB индексный ключ для одной колонки может быть длиной до 767 байт. Учитывая что UTF8 символы могут занимать до 3 байт, длина индексируемой колонки не может быть более ~255 байт. Решить проблему можно несколькими путями: включить конфигурационный параметр innodb_large_prefix и объявить формат строк как DYNAMIC или COMPRESSED. Либо принудительно объявить формат проблемных таблиц как MyISAM, тем более что таких в процессе апгрейда всего две. Для этого в файле
/core/install/includes/class_upgrade_500a1.php необходимо сделать две замены:
Строка 141 и строка 384
PHP Code:
) ENGINE = " . $this->hightrafficengine . "
заменить на
PHP Code:
) ENGINE =MyISAM
Это позволит обойти проблему и сделать апгрейд форумной платформы. В дальнейшем вы можете вручную поменять формат этих таблиц на InnoDB, сделав соответствующие изменения в настройках MySQL сервера о которых я сказал выше
Кроме того в процессе апгрейда могут возникать ошибки
Code:
MySQL server has gone away
Тут достаточно просто увеличить таймаут соединения в my.cnf или в скрипте /core/install/includes/class_upgrade.php строка 1985 после
PHP Code:
protected function run_query($message, $query, $ignorable_errors = array())
{
InnoDB, поскольку он дает ряд преимуществ по отношению к MyISAM
это спорное утверждение
Quote:
Originally Posted by Сергей Ильюхин
Надеюсь это поможет вам при апгрейде
Спасибо за статью
Надеюсь, желающих обновляться будет минимум
@mindframe
Специалист
Join Date: Nov 2010
Posts: 471
Версия vB: 3.8.x
Пол:
Reputation:
Professional 318
Репутация в разделе: 214
0
Quote:
Originally Posted by Luvilla
это спорное утверждение
Очень спорное, надо опираться на то, для чего будет использоваться та или иная таблица и исходя из этого уже делать выбор, из базового:
если нужны транзакции, то Inno, если таблицы, схожие с post, то-есть в целом единоразовое написание и в дальнейшем только чтение, то MyISAM, из значительных минусов Inno для вб, не работает fulltext.
Вопрос очень тонкий, сам до конца ещё не понял, но для себя сделал простую формулу:
- надёжность, транзакции - InnoDB;
- производительность, объёмы - MyISAM.
Last edited by mindframe : 02-03-2015 at 09:43 AM.
Luvilla
Гость
Posts: n/a
Quote:
Originally Posted by mindframe
- надёжность, ... - InnoDB;
а что ты делаешь, если InnoDB покрашилась?
@mindframe
Специалист
Join Date: Nov 2010
Posts: 471
Версия vB: 3.8.x
Пол:
Reputation:
Professional 318
Репутация в разделе: 214
0
@Luvilla, единого решения не существует, ну и случается это относительно редко, но в большинстве случаев всё согласно официальным манам: innodb_force_recovery.
Подробнее: http://dev.mysql.com/doc/refman/5.0/...-recovery.html