News:

Want to get involved in developing SMF, then why not lend a hand on our github!

Main Menu

Ошибка при апгрейде SMF-1.1.21 до SMF-2.0.11

Started by G_D_I, January 08, 2016, 02:34:07 PM

Previous topic - Next topic

G_D_I

Здравствуйте, решил проапгрейдить форум с версии 1.1.21 до 2.0.11, но получаю ошибку:
QuoteExecuting database changes
Please be patient - this may take some time on large forums. The time elapsed increments from the server to show progress is being made!
Executing upgrade script 1 of 2.
Executing: "Updating holidays and calendar..." (5 of 19 - of this script)

!!
Error!
Incorrect date value: '0000-00-00' for column 'eventDate' at row 1
В таблице backup_forum_calendar_holidays, в первой строке такие данные:
ID_HOLIDAY    eventDate            title
1                   0004-01-01    New Year's

Подскажите, в чем может быть ошибка и как ее исправить?

G_D_I

Похоже, что ошибку вызывает следующий код в файле upgrade_1-1.sql в строке 757
UPDATE {$db_prefix}calendar_holidays
SET eventDate = '0001-01-01'
WHERE eventDate = '0000-00-00';

По крайней мере, если пытаться выполнить этот SQL запрос на сервере, то он возвращает ту же ошибку. Во всей таблице в полях eventDate нет ни одного значения '0000-00-00'.
Правильно ли будет просто удалить эту часть кода из SQL скрипта?

UPD. Закоментировал код, теперь другая ошибка:
QuoteError!
Incorrect date value: '0000-00-00' for column 'endDate' at row 1
Похоже что от этого кода:
UPDATE {$db_prefix}calendar
SET endDate = startDate
WHERE endDate = '0001-01-01'
OR endDate = '0000-00-00';

Странно что этот код стоит в строке 739, т.е. выше кода что я закомментировал ранее.

Следующая ошибка
QuoteError!
Incorrect date value: '0000-00-00' for column 'startDate' at row 1
и следующий кусок кода
UPDATE {$db_prefix}calendar
SET startDate = '0001-01-01'
WHERE startDate = '0000-00-00';


Еще одна ошибка:
Quote
!! Error! Incorrect date value: '0000-00-00' for column 'birthdate' at row 1
код в строке 780
UPDATE {$db_prefix}members
SET birthdate = '0001-01-01'
WHERE birthdate = '0000-00-00';


потом ошибка для кода в строке 773
UPDATE {$db_prefix}log_activity
SET date = '0001-01-01'
WHERE date = '0000-00-00';


Очень похоже на то что это проблемы с совмкстимостью MySQL сервера, у меня стоит 5.7.10
После комментирования всех частей кода что я приводил ранее, апгрейд прошел дальше и споткнулся на ошибке
QuoteError!
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 'IGNORE TABLE хххххх_log_floodcontrol CHANGE COLUMN ip ip char(16) NOT NUL' at line 1

за это отвечает код в строке 879
---# Updating flood control log...
ALTER IGNORE TABLE {$db_prefix}log_floodcontrol
CHANGE COLUMN ip ip char(16) NOT NULL default '                ';


Вот в синтаксисе SQL я не силен, подскажите, что тут не так?

G_D_I

Отвечаю сам себе, так уж повелось в этой теме.
Ошибка с синтаксисом связана с версией MySQL. У меня на сервере стоит MySQL 5.7.10. В документации я нашел следующую строку
QuoteAs of MySQL 5.7.4, the IGNORE clause for ALTER TABLE is removed and its use produces an error.
После этого я удалил слово IGNORE  из всех запросов ALTER TABLE и апгрейд отработал штатно. Но форум был а режиме обслуживания, причем, не простом, а в untouchable. Зайти в администрирование или залогиниться на форуме невозможно. Этот режим снимается только правкой файла Settings.php
# Note: If $maintenance is set to 2, the forum will be unusable!  Change it to 0 to fix it.
$maintenance = 2; # Set to 1 to enable Maintenance Mode, 2 to make the forum untouchable. (you'll have to make it 0 again manually!)

Собственно, из комментариев все понятно, надо поставить режим "0".
После этого форум заработал в нормальном режиме.

Advertisement: