phpBB 마이그레이션 준비

phpBB 3.x 포럼을 Discourse로 이전하기 전에 데이터를 정리하고 준비하기 위해 몇 가지 단계를 거쳤습니다. 다른 사람들이 이전을 준비하는 데 도움이 되도록 제가 수행한 내용을 요약했습니다. 많은 제안이 데이터를 삭제하므로, 아래 제안 중 어떤 것을 수행하기 전에 반드시 데이터베이스 백업을 만들어 두십시오.

오래된 주제와 게시글 정리.

카테고리를 검토하여 모든 주제를 이전해야 하는지 결정하십시오. 모든 데이터가 필요한가요, 아니면 최근 몇 년간의 주제만으로도 충분한가요? phpBB는 주제 나이에 따라 자동으로 주제를 정리(Prune)합니다. phpBB ACP에서 포럼의 정리(Prune) 날짜를 설정하거나 조정할 수 있습니다. 포럼(Forums)으로 이동하여 수정하려는 포럼의 기어 위젯을 선택하십시오.

오래된 사용자 이름 정리.

Discourse 가져오기(importer)는 게시글을 작성하지 않은 사용자를 이전하지 않습니다. 이를 고려하여, 게시글을 작성한 적이 없는 오래된 사용자를 삭제할 수 있습니다. phpBB ACP로 이동하여 사용자 및 그룹(Users and Groups)을 선택하십시오. 사용자 정리(Prune Users) 옵션이 있습니다. 게시글 수를 0으로, 마지막 활동 날짜를 설정할 수 있습니다. 이를 통해 게시글을 작성한 적이 없고 포럼에서 오랫동안 활동하지 않은 모든 사용자를 삭제할 수 있습니다.

익명 사용자 게시글 수 확인.

Discourse 이전 시 익명 사용자는 정지된 사용자(suspended users)로 또는 모두 시스템 사용자(system user)로 이전됩니다. 익명 사용자에게 귀속된 주제/게시글이 얼마나 되는지 검토하십시오.

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 설정에는 중복 제목을 허용하는 플래그가 있습니다. 다음 쿼리는 중복 제목이 얼마나 많은지 이해하는 데 도움이 됩니다. 제 포럼에는 중복 제목이 있는 주제가 1,000개 이상이었으므로, 중복 주제 제목을 허용하도록 플래그를 업데이트했습니다.

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

고아(Orphan) 주제 찾기.

모든 주제는 게시글을 가져야 하지만, 가끔 문제가 발생할 수 있습니다. 이 쿼리는 게시글이 없는 모든 주제를 나열합니다.

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

고아 주제를 정리하십시오.

고아(Orphan) 게시글 찾기.

모든 게시글은 주제에 속해야 합니다. 이 쿼리는 유효한 topic_id가 없는 게시글을 나열합니다.

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

고아 게시글을 정리하십시오.

첫 번째 주제 게시글이 유효한 게시글인지 검증

주제의 첫 번째 게시글은 삭제될 수 있으며, 이로 인해 잘못된 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

첫 번째 주제 post_id를 정리하십시오.

다가오는 이전을 준비하면서 더 많은 항목을 찾으면 추가하겠습니다. 권장되는 체크 항목이 있다면 아래에 추가해 주십시오.

공유해 주셔서 정말 감사합니다. 모든 마이그레이션에서 확인해야 할 매우 좋은 항목들이네요.

phpBB에서도 이런 일이 발생할 수 있는지 정확히 기억은 나지 않지만, Users 테이블에 중복된 이메일이나 사용자 이름이 있는지我们经常 확인합니다. 또한 임시(staged) 상태의 사용자가 있는지 확인합니다. 임시 상태의 사용자를 일반 검증된 사용자로 마이그레이션하고 싶지는 않을 테니까요.

사용 중인 phpBB 버전에 따라 코드를 추가하여 매번 수동으로 게시물을 삭제할 필요가 없도록 할 수 있습니다.

다만, 삭제된 게시물을 수동으로 검토하는 것이 좋습니다. 일부 관리자는 영구 삭제 대신 아카이빙 목적으로 게시물을 숨긴 상태로 유지하길 원할 수 있습니다.