Подготовка к миграции на phpBB

Я предпринял несколько шагов по очистке и подготовке данных перед переносом форума phpBB 3.x в Discourse. В этом руководстве описывается мой процесс, чтобы помочь другим подготовиться к миграции. Многие из предложенных действий приведут к удалению данных, поэтому обязательно сделайте резервную копию базы данных перед выполнением любых рекомендаций ниже.

Удаление старых тем и сообщений.

Проверьте свои категории и определите, нужно ли мигрировать все темы. Нужны ли вам все данные или достаточно тем за последние несколько лет? phpBB автоматически удаляет темы по возрасту. Вы можете настроить или изменить даты удаления для своих форумов в панели администратора phpBB (ACP). Перейдите в раздел «Форумы» и выберите значок шестеренки для форума, который вы хотите изменить.

Удаление старых имен пользователей.

Импортер Discourse не переносит пользователей, которые не публиковали сообщения. Понимая это, вы можете удалить старых пользователей, которые никогда не писали. Перейдите в панель администратора phpBB и выберите «Пользователи и группы». Там есть опция «Очистка пользователей». Вы можете установить количество сообщений равным 0 и указать дату последнего посещения. Это позволит удалить всех пользователей, которые никогда не публиковали сообщения и не были активны на вашем форуме в течение определенного времени.

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

При миграции в Discourse анонимные пользователи будут перенесены как заблокированные пользователи или все они будут объединены в системного пользователя. Проверьте, сколько тем и сообщений приписано анонимному пользователю.

MySQL определяет user_id анонимного пользователя. Для большинства установок это user_id = 1.

SELECT `user_id`, `username` FROM `phpbb_users` where `username_clean` = "anonymous" 

Для проверки тем и сообщений обновите запрос, используя user_id вашего системного анонимного пользователя:

SELECT * FROM `phpbb_posts` where `poster_id` = "1" 
SELECT * FROM `phpbb_topics` where `topic_poster` = "1" 

Исходя из этих результатов, вы должны решить, как настроить систему для обработки сообщений и тем анонимных пользователей. У меня их было немного, и я их удалил.

Проверка скрытых или мягко удаленных сообщений.

Эта функция была реализована в phpBB 3.1. Проверьте, есть ли у вас скрытые или мягко удаленные сообщения. Discourse игнорирует это поле и импортирует сообщения. Сообщения были удалены пользователем или модераторами по определенной причине.

SELECT * FROM `phpbb_posts` where `poster_visibility` = "2"

Удалите все перечисленные сообщения.

Проверка корректности адресов электронной почты.

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

SELECT `user_email` FROM `phpbb_users` where CHAR_LENGTH(`user_email`) != CHAR_LENGTH(TRIM(`user_email`)) ORDER BY `user_id` ASC

Проверка дубликатов заголовков.

В настройках Discourse есть флаг, разрешающий дубликаты заголовков. Следующий запрос поможет вам понять, есть ли у вас много дубликатов заголовков. На моем форуме было более 1000 тем с одинаковыми заголовками, поэтому я изменил флаг, чтобы разрешить дубликаты заголовков тем.

SELECT `topic_title`, COUNT(*) as count FROM `phpbb_topics` GROUP BY `topic_title` HAVING COUNT(*) > 1 ORDER BY `count` DESC

Поиск сиротских тем.

Каждая тема должна иметь хотя бы одно сообщение, но иногда что-то идет не так. Этот запрос покажет все темы без сообщений.

SELECT * FROM `phpbb_topics` WHERE `topic_id` NOT IN (Select topic_id from phpbb_posts) ORDER BY `topic_approved` DESC

Очистите все сиротские темы.

Поиск сиротских сообщений.

Каждое сообщение должно принадлежать какой-либо теме. Этот запрос покажет сообщения, у которых нет корректного topic_id.

SELECT * FROM `phpbb_posts` WHERE `topic_id` NOT IN (Select topic_id from phpbb_topics) ORDER BY `post_id` DESC

Очистите все сиротские сообщения.

Проверка первого сообщения темы на корректность

Первое сообщение темы может быть удалено, что приведет к тому, что у темы будет неверный topic_first_post_id. Этот запрос проверяет, что topic_first_post_id корректен.

SELECT * FROM `phpbb_topics` WHERE `topic_first_post_id` NOT IN (Select post_id from phpbb_posts) ORDER BY `topic_approved` DESC

Исправьте topic_first_post_id для первых сообщений тем.

Я буду добавлять дополнительные пункты по мере их обнаружения в ходе подготовки к предстоящей миграции. Если у вас есть рекомендуемые проверки, пожалуйста, добавьте их ниже.

Спасибо большое за分享. Это очень полезные пункты для проверки при каждой миграции.

Я не совсем помню, может ли такое случиться в phpBB, но мы часто проверяем, нет ли дубликатов электронных адресов или имен пользователей в таблице Users. Мы также проверяем наличие «подготовленных» пользователей, так как их не следует мигрировать как обычных, подтвержденных пользователей.

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

Хотя, вручную просматривать удаленные посты — это хорошая практика. Некоторые администраторы могут захотеть сохранить их (скрытыми, для архивных целей), вместо того чтобы удалять их навсегда.