1

SMF 1.1 => SMF 2.0

Небольшое руководство о том, как обновить Simple Machune Forum c версии 1.1 (или 1.0) до 2.0.
На сервере имеем: Linux CentOS, nginx 0.98, MySQL 5.1.53, PHP 5.2.

Поехали.

  1. Делаем бэкап папки с форумам.
  2. Делаем бэкап базы данных.
  3. Очищаем таблицы с поисковым кэшем.
    mysql> USE %database_with_smf_name%
    mysql> TRUNCATE TABLE smf_log_search_messages;
    mysql> TRUNCATE TABLE smf_log_search_results;
    mysql> TRUNCATE TABLE smf_log_search_subjects;
    mysql> TRUNCATE TABLE smf_log_search_topics;

    Примечание: чтобы не возникло ошибки при обновлении, создайте в каждой из таблиц по одной пустой записи

  4. Теперь, скачиваем с оф.сайта пакет обновлений SMF 2.0 (Lagre upgrade). Помимо этого стоит скачать нужные языковые паки (русский). Распаковываем и перемешиваем. Готовую «смесь» загружаем на сервер в директорию с форумом (с перезаписью существующих файлов).
  5. Запускаем в браузере скрипт http://domain.com/path_to_smf/upgrade.php, и, следуя указаниям, обновляем форум.
    Примечание 1: в случае, если в корне форумной директории присутствует файл установки (install.php), то вас автоматически перенаправит на него. Для апгрейда форума удалите файл установки.
    Примечание 2: для UNIX-подобных систем — файл /Settings.php и директория /cache/должны быть доступны для записи всем.
  6. ???????
  7. PROFIT!

Возможные ошибки:

1) После обновления, при попытки зайти на форум, появится надпись «Невозможно загрузить ‘main’ шаблон.». Это означает, что по какой-то причине дирректория с темой форума по умолчанию пропала из /Themes/, просто верните её на место (Мы же сделали бэкапы, правильно?) и всё заработает.

2) Весь кириллистический текст, полученный из базы данных, будет похож на квадратики или на знаки вопросов в тёмных ромбиках. Это означает, что где-то ломается исходная кодировка.
Сначала идём в базу данных, в таблицу smf_settings, и ищем там строку, у которой поле variable равняется ‘global_character_set’. Если его там нет, то вставляем строку с таким параметром, где в поле value записываем ‘UTF-8’ (Мы же всегда используем UTF-8, правда?).
Теперь проверяем форум. Если русские буквы в названии тем видны — обновление завершено, поздравляю. Если нет… используем brute force!
Открываем файл /Sources/Subs-Db-mysql.php. Находим функцию smf_db_initiate и в самый её конец, перед оператором return, вставляем одну строку:

@mysql_query("SET NAMES UTF8", $connection);

Сохраняем. Проверяем форум — всё работает.

Источники:

  1. Официальное руководство на английском языке
  2. Обновление smf 1.0.*, smf 1.1.* -SMF 2.0 — Тема на русскоязычном форуме SMF
  3. Upgrade SMF 1.1.8 to SMF 2.0 RC3
0

Сброс root-пароля в MySQL под Debian Lenny

Бывает такое, что пароль предварительно не записывается, и потом, по разным причинам, забывается. Ниже приведён способ как это сделать.

1. Останавливаем демон мускула:

$ /etc/init.d/mysql stop

2. теперь снова запускаем его, но уже в безопасном режиме (и в фоне) через mysql_safe с опцией skip-grant-tables, что даёт нам возможность подключаться к мускулу без пароля:

$ /usr/bin/mysqld_safe --skip-grant-tables &

3. Теперь, когда преграда устранена, можем теперь спокойно войти в мускул без пароля:

$ mysql --user=root mysql

4.Далее, устанавливаем новый пароль и сбрасываем привилегии:

mysql> UPDATE USER SET Password=PASSWORD('%new_password%') WHERE USER='root';
# Query OK, 2 ROWS affected (0.04 sec)
# ROWS matched: 2  Changed: 2  Warnings: 0

mysql> FLUSH privileges;
# Query OK, 0 ROWS affected (0.02 sec)

mysql> exit
# Bye

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

$ /etc/init.d/mysql stop
$ /etc/init.d/mysql start

Всё. Вы успешно сбросили пароль от рута.
Для входа используем (с правами рута, естественно):

$ mysql --user=root --pass=%new_password%
$ mysql -u root -p %new_password%

PS:
Есть ещё один способ установить новый root-пароль, через bash, набрав под рутом:

$ mysqladmin -u root password %new_password%

Но лично у меня не сработало.

PPS:
И ещё несколько полезных SQL-запросов:

Назначение всех привилегий на все таблицы во всех базах данных пользователю %user% с паролем %password%:

mysql> GRANT ALL PRIVILEGES ON *.* TO '%user%'@'localhost' IDENTIFIED BY '%password%' WITH GRANT OPTION;

То же самое с возможностью доступа с других хостов:

mysql> GRANT ALL PRIVILEGES ON *.* TO '%user%'@"%" IDENTIFIED BY '%password%' WITH GRANT OPTION;

Назначение определённых привелегий на все таблицы в базе данных %database% пользователю %user% с паролем %password%:

mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX ON %database%.* TO '%user%'@"%" IDENTIFIED BY '%password%';

Источники:
1) Resetting a forgotten MySQL root password.
2) Настройка MySQL сервера после установки.