Migrate a vBulletin 4 forum to Discourse

유용한 정보를 공유해 주셔서 감사합니다! :+1:t6:

vBulletin 사용자를 선택하는 SQL 쿼리에 대해 또 다른 질문이 있습니다.

3년 전 저는 구형 phpbb 포럼을 Discourse로 이전했는데, 당시에는 약 20,000명의 사용자가 있었습니다.
물론 대부분의 사용자는 미사용 계정이었을 것입니다. 지난 3년간 Discourse는 비활성 사용자를 자체적으로 정리했으며, 현재는 더 정확한 3,000명의 회원 수를 유지하고 있습니다.

vBulletin에서 180,000명의 사용자를 가져와 Discourse에 공격적인 정리를 요청했을 때, 27,000명의 사용자가 남았으며 이는 합리적인 숫자로 보입니다.

저의 vBulletin에서:

  1. 다른 사용자의 프로필에 게시된 모든 메시지는 Discourse로 가져와질 때 카테고리가 없고 제목도 없는 토픽으로 변환되어 쓸모없는 노이즈만 추가되며,
  2. 오직 다른 사용자의 프로필에만 게시한 사용자의 대다수는 스팸으로 보이기 때문에,
    이전 과정에서 정리를 수행하고 싶으며, 이후에 처리하고 싶지 않습니다.

vBulletin 데이터베이스의 모든 구조를 이해하지는 못하는데, 노드(node) 체계가 다소 혼란스럽지만, 최소한 토픽 또는 답글을 1개 이상 게시한 사용자만 가져오려고 합니다.
제 생각에 토픽과 답글은 vBulletin 사용자 테이블의 lastpostid 필드를 채우지만, 공개 프로필 게시물은 채우지 않는 것 같습니다.

예, 저는 다음을 편집할 계획입니다:

  SELECT u.userid, u.username, u.homepage, u.usertitle, u.usergroupid, u.joindate, u.email
    CASE WHEN u.scheme='blowfish:10' THEN token
         WHEN u.scheme='legacy' THEN REPLACE(token, ' ', ':')
    END AS password,
    IF(ug.title = 'Administrators', 1, 0) AS admin
    FROM #{DB_PREFIX}user u
    LEFT JOIN #{DB_PREFIX}usergroup ug ON ug.usergroupid = u.usergroupid
ORDER BY userid
   LIMIT #{BATCH_SIZE}
  OFFSET #{offset}

다음과 같이 수정할 예정입니다:

  SELECT u.userid, u.username, u.homepage, u.usertitle, u.usergroupid, u.joindate, u.email, u.lastpost
    CASE WHEN u.scheme='blowfish:10' THEN token
         WHEN u.scheme='legacy' THEN REPLACE(token, ' ', ':')
    END AS password,
    IF(ug.title = 'Administrators', 1, 0) AS admin
    FROM #{DB_PREFIX}user u
    LEFT JOIN #{DB_PREFIX}usergroup ug ON ug.usergroupid = u.usergroupid
    WHERE u.lastpost > 0
ORDER BY userid
   LIMIT #{BATCH_SIZE}
  OFFSET #{offset}

단순히 WHERE u.lastpost > 0만 추가하는 것입니다.

이 쿼리를 사용한 카운트는 25,000명의 사용자를 반환합니다. 이는 이전 가져오기 후 Discourse 정리 과정을 거쳤음에도 불구하고 여전히 제목 없는 토픽(구 프로필 공개 메시지)이 남아 있던 상태의 활성 사용자 27,000명과 비교됩니다. 이는 약 2,000명의 사용자가 오직 다른 사용자의 프로필에만 게시했다는 것을 의미하며, 이는 터무니없는 숫자가 아닙니다.

제 추론이 맞는지, 그리고 WHERE u.lastpost > 0을 추가하는 것이 해로운 영향 없이 사용자 기반을 깔끔하게 정리해 줄 것이라고 생각하시나요?

데이터베이스의 이전 이력이 어떤지에 따라 달라집니다. phpBB에서 vBulletin으로 마이그레이션되었거나, vBulletin 업데이트를 여러 번 거쳤다면 이 추론이 틀릴 수 있습니다.

가장 좋은 방법은 더 많은 쿼리를 실행하여 추론을 검증하는 것입니다. 예를 들어 lastpost가 없는 사용자가 작성한 모든 게시물을 나열해 볼 수 있습니다.

또한 "좋아요"나 "투표"와 같은 플러그인이 있다면, 삭제해서는 안 되는 사용자를 삭제하게 될 수 있습니다.

저는 삭제하거나 제외하는 것에 대해 매우 보수적인 전략을 취합니다. 저장 공간은 저렴하니까요.

4개의 좋아요

감사합니다. 말씀하신 대로 하겠습니다. 신중하게 처리하는 편이 좋습니다. :slight_smile:
Discourse가 시간이 지나면서 자체적으로 정리를 하도록 두겠습니다.

포럼이 매우 오래되었고 vBulletin 이전에는 phpBB를 사용하다가 이관되었기 때문에, 이관 스크립트에 커스텀 게시물 정리 정규식을 며칠 동안 계속 추가해 왔습니다. 많은 부분을 처리해야 했지만, 이제 거의 마무리 단계에 왔다고 생각하고, 그렇게 되기를 바랍니다.

저는 vBulletin에 대해 잘 모릅니다. 하지만 제가 작업 중인 포럼은 vBulletin 5.6을 사용 중이었으며, 제가 그 안에 올린 일부 외부 이미지는 vBulletin 데이터베이스에서 다음과 같은 구문을 사용하고 있었습니다:
[IMG2=JSON]{"data-align":"none","data-size":"full","src":"https:\/\/forum.monocycle.info\/uploads\/default\/original\/2X\/3\/396192845ba93e7df2a6109a2608072efa21ee32.jpeg"}[/IMG2]
이것이 스크립트에서 "누락"된 것인지, 아니면 포럼 관리자가 이러한 img2 태그를 생성하는 플러그인을 사용한 것인지 확신이 서지 않습니다.

어쨌든, 저는 다음 코드로 이를 수정했습니다:

    raw = raw.gsub(/\[img2=json\].+?(http.+?).}\[\/img2\]/i) {"\n#{$1}\n"}

하나만 여쭤볼 것이 있습니다: Discourse가 시간이 지나면서 자동으로 가져온 게시물들을 다시 베이킹(rebake)할까요? 만약 그렇다면, 가장 최근 게시물부터 시작할까요?

2개의 좋아요

다시 인사드립니다.
제 포럼에는 약 1,000개의 태그가 있지만, Discourse에서는 아마도 이 태그들을 사용하지 않을 것입니다. 게다가 이 태그들은 아마도 꽤 엉망이 되어 있을 겁니다. 임포터에서 이 줄을 주석 처리하면 될까요?

    import_tags

아니면 부수적인 문제가 발생할 수도 있나요?

1개의 좋아요

안전하게 주석 처리할 수 있습니다.

2개의 좋아요

무언가를 가져온 후 Sidekiq이 작업을 완료할 때까지 기다리지 않는 것이 안전합니까?

사용자를 가져왔고, 현재 Sidekiq의 상태는 다음과 같습니다.

백업을 생성한 후 이를 프로덕션 포럼에 복원하면 이 작업들은 어떻게 되나요?

1개의 좋아요

아니요. 전체 재처리(rebake)를 통해 대부분의 이러한 작업이 다시 생성되긴 하지만, 기다리는 것을 강력히 권장합니다.

이들은 가져오기 인스턴스(import instance)에서 계속 실행될 것입니다.
백업에 포함되지 않으며 프로덕션 포럼으로 전송되지도 않습니다.

3개의 좋아요

감사합니다! :+1:

백업 복원 과정에서 일부 오류 메시지가 발생했는데(복원 완료나 포럼 작동에는 지장이 없는 메시지들), 이 때문에 sidekiq이 작업을 완료할 때까지 기다리지 않은 것이 원인인지 궁금했습니다.

vbulletin에서 새로운 가져오기를 시작했습니다: 개발용 discourse에 그룹과 30,000명의 사용자만 가져온 뒤, 몇십 분을 기다렸고, 그 후 백업을 생성하여 docker 기반 설치 환경에서 백업을 복원했습니다. 복원은 성공했지만, 로그에 이러한 오류가 표시됩니다.

ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: relation "users" does not exist LINE 1: SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1 ^ ) lib/a
10:03 pm
7
ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: relation "user_auth_tokens" does not exist LINE 1: SELECT "user_auth_tokens".* FROM "user_auth_tokens" WHERE ((...

이 오류들은 일관성이 없으며, 백업마다 관계(relation) 오류가 서로 다릅니다.
이 오류들이 어디서 오는지 파악할 수 없습니다. :confused:

1개의 좋아요

요약: 이러한 오류들이 임포트와 관련이 있다고 생각하지 않습니다.

이전에 비슷한 상황을 본 적이 있는데, 백업 복원 중 데이터베이스에 접근이 이루어져 발생하는 레이스 컨디션(race condition)으로 보입니다.

이것은 서버에 정상적인 트래픽이 유입되었거나, 일시 정지되지 않은 Sidekiq 프로세스 때문일 수 있습니다. 두 경우 모두 무해합니다. 제 입장이라면 복원이 완전히 완료되기 전에 발생하는 모든 PG 오류는 완전히 무시하겠습니다.

4개의 좋아요

그렇군요, 안심됩니다!

문제는 메시지 자체도 조금 무섭지만, 다음과 같은 이유 때문에 더 걱정됩니다.

  1. 임포트를 시작한 이후로 내가 만든 모든(거의 모든? :thinking:) 백업에서 이 현상이 발생하는데, 로컬 개발 포럼에서든 도커 기반 온라인 설치 환경에서든 백업을 복원할 때 항상 나타납니다.
  2. 복원 중 디스코urs 백업 인터페이스의 복원 로그가 계속 기록되지 못하게 막습니다. 복원 작업이 진행 중인데도 인터페이스는 “아카이브 압축 해제 중”(업로드가 없는 백업의 경우 "discourse_functions 스키마에 누락된 함수 생성 중…"이라고 표시됨) 단계에서 멈춰 있습니다.
    뭔가 크래시가 난 것처럼 보이지만, 잠시 기다리면 얼마 후 자동으로 로그아웃 처리됩니다. 다시 로그인하면 에러 메시지 외에는 임포트가 잘 완료된 것처럼 보입니다.

포럼은 정상적으로 작동하고 있으므로(다른 스레드에서 설명한 502 에러가 발생하는 카테고리 편집 기능 제외), 저는 포럼이 몇 주/몇 달/몇 년 후 제가 아직 파악하지 못한 어떤 문제로 인해 갑자기 작동하지 않게 될까 봐 걱정됩니다. 특히 1개월째 매일 이 임포트 작업에 매달리고 있는 상황에서 그런 일이 일어나는 것은 정말 원치 않습니다. :sweat_smile:

어쨌든 도움을 주셔서 감사합니다. 정말 고맙습니다. 저는 큰 커뮤니티를 위해 무보수로 이 임포트 작업에 많은 에너지를 쏟고 있는데, 제 질문에 답해 주시는 분들이 계신 것만으로도 큰 위안이 됩니다.

2개의 좋아요

우선 이 글을 올려주셔서 감사합니다. 방금 vBulletin 3.7.x 가져오기를 시도해 보았습니다. 모든 단계를 따랐는데, 가져오기 스크립트를 실행했을 때 연결할 수 없다고 표시됩니다. 하지만 저는 실제로는 연결할 수 있습니다. 혹시 아이디어가 있으신가요?

root@uat-app:/var/www/discourse# export DB_NAME="vb4"
root@uat-app:/var/www/discourse# export DB_USER="root"
root@uat-app:/var/www/discourse# export DB_PW="1234"
root@uat-app:/var/www/discourse# export TABLE_PREFIX="vbulletin"
root@uat-app:/var/www/discourse# export ATTACHMENT_DIR='/shared/vbulletin'
root@uat-app:/var/www/discourse# export TIMEZONE="America/Vancouver"
root@uat-app:/var/www/discourse# su discourse -c 'bundle exec ruby script/import_scripts/vbulletin.rb'
root:1234@localhost wants vb4
Loading existing groups...
Loading existing users...
Loading existing categories...
Loading existing posts...
Loading existing topics...
==================================================
Access denied for user 'root'@'localhost'
Cannot connect in to database.

Hostname: localhost
Username: root
Password: 1234
database: vb4

Edit the script or set these environment variables:

export DB_HOST="localhost"
export DB_NAME="vbulletin"
export DB_PW=""
export DB_USER="root"
export TABLE_PREFIX="vb_"
export ATTACHMENT_DIR '/path/to/your/attachment/folder'

Exiting.

아래에서 보시다시피, 저는 동일한 자격 증명을 사용하여 데이터베이스에 로그인할 수 있으며 데이터베이스 이름과 테이블 접두사를 확인했습니다.

root@uat-app:/var/www/discourse# mysql -uroot -p1234 -hlocalhost
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 70
Server version: 10.3.25-MariaDB-0+deb10u1 Debian 10

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> use vb4;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [vb4]> select * from information_schema.tables where table_schema = 'vb4' and table_name = 'vbulletinpost'
    -> ;
+---------------+--------------+---------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+---------------------+-------------------+----------+----------------+---------------+--------------------+-----------+
| TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME    | TABLE_TYPE | ENGINE | VERSION | ROW_FORMAT | TABLE_ROWS | AVG_ROW_LENGTH | DATA_LENGTH | MAX_DATA_LENGTH | INDEX_LENGTH | DATA_FREE | AUTO_INCREMENT | CREATE_TIME         | UPDATE_TIME         | CHECK_TIME          | TABLE_COLLATION   | CHECKSUM | CREATE_OPTIONS | TABLE_COMMENT | MAX_INDEX_LENGTH   | TEMPORARY |
+---------------+--------------+---------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+---------------------+-------------------+----------+----------------+---------------+--------------------+-----------+
| def           | vb4          | vbulletinpost | BASE TABLE | MyISAM |      10 | Dynamic    |    1037509 |            356 |   370191960 | 281474976710655 |     53087232 |         0 |        1046506 | 2020-11-14 14:27:01 | 2020-11-14 14:27:28 | 2020-11-14 14:27:32 | latin1_swedish_ci |     NULL |                |               | 288230376151710720 | N         |
+---------------+--------------+---------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+---------------------+-------------------+----------+----------------+---------------+--------------------+-----------+
1 row in set (0.001 sec)

MariaDB [vb4]>

또한 저는 /admincp/avatar.php?do=storage에서 탐색된 내용을 내보내고, 아바타를 다음과 같이 세 개의 다른 폴더로 내보냈습니다.

/shared/vbulletin/signaturepics/
/shared/vbulletin/customprofilepics/
/shared/vbulletin/customavatars/

그렇다면 이렇게 부모 폴더를 지정해야 하나요? 아니면 세 폴더의 내용을 하나에 모아 넣어야 하나요?

export ATTACHMENT_DIR='/shared/vbulletin'

1개의 좋아요

제 추측으로는 비밀번호에 특수문자가 포함되어 있지는 않나요?

2개의 좋아요

실제로는 알파벳과 숫자만 포함합니다. 어쨌든 다시 시도해 보았지만, 비밀번호를 명시적으로 설정하기 전까지는 작동하지 않는다는 것을 확인했습니다. 또한 설명서가 업데이트되어야 한다고 생각하여, 제가 실제로 사용했을 때 작동하는 내용을 여기에 붙여넣습니다.

1개의 좋아요

설명이 업데이트되어야 합니다. 2020년 11월 기준으로 제가 사용하는 방법은 다음과 같습니다. 이 가져오기를 screen을 사용하여 실행하는 것이 실제로 더 나은데, 가져오기에 수 시간이 걸리기 때문입니다. 또한 nohup을 사용하는 것은 도움이 되지 않을 가능성이 높습니다. 가져오기 스크립트가 가져온 각 항목의 수를 계속 업데이트하므로 stdout 파일이 매우 커질 수 있기 때문입니다.

vBulletin 데이터를 호스팅할 데이터베이스 설치

최신 패키지 다운로드

MySQL은 Oracle MySQL 저장소가 저장소 목록에 명시적으로 추가되지 않는 한 더 이상 사용할 수 없습니다. MariaDB가 MySQL을 대체했습니다.

root@uat-app:~# apt-get update
root@uat-app:~# apt-get install libmariadb-dev
root@uat-app:~# apt-get install default-mysql-server

데이터베이스 시작

root@uat-app:~# service mysql status
[info] MariaDB is stopped..
root@uat-app:~#
root@uat-app:~# service mysql start
[ ok ] Starting MariaDB database server: mysqld.
root@uat-app:~# service mysql status
[info] /usr/bin/mysqladmin Ver 9.1 Distrib 10.3.25-MariaDB, for debian-linux-gnu on x86_64
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Server version 10.3.25-MariaDB-0+deb10u1
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/run/mysqld/mysqld.sock
Uptime: 4 sec

Threads: 7 Questions: 461 Slow queries: 0 Opens: 177 Flush tables: 1 Open tables: 31 Queries per second avg: 115.250.

데이터베이스 연결을 위한 Gems 설치

아래 내용은 최신 'bundle’이 원래 설명의 일부 플래그를 지원하지 않으며 ‘deployment’ 모드를 해제할 필요가 있음을 보여줍니다.

root@uat-app:~# echo "gem 'mysql2', require: false" >> /var/www/discourse/Gemfile

root@uat-app:~# echo "gem 'php_serialize', require: false" >> /var/www/discourse/Gemfile

root@uat-app:~# cd /var/www/discourse
root@uat-app:/var/www/discourse# su discourse -c 'bundle install --no-deployment --without test --without development --path vendor/bundle'
[DEPRECATED] The `--path` flag is deprecated because it relies on being remembered across bundler invocations, which bundler will no longer do in future versions. Instead please use `bundle config set path 'vendor/bundle'`, and stop using this flag
[DEPRECATED] The `--without` flag is deprecated because it relies on being remembered across bundler invocations, which bundler will no longer do in future versions. Instead please use `bundle config set without 'development'`, and stop using this flag
You are trying to install in deployment mode after changing
your Gemfile. Run `bundle install` elsewhere and add the
updated Gemfile.lock to version control.

If this is a development machine, remove the /var/www/discourse/Gemfile freeze by running `bundle config unset deployment`.

The dependencies in your gemfile changed

You have added to the Gemfile:
* mysql2
* php_serialize

구성 업데이트 및 설치 재실행

CLI로 확인

구성 확인 결과 ‘deployment’ 모드로 설정되어 있음이 확인되었습니다.

root@uat-app:/var/www/discourse# bundle config list
Settings are listed in order of priority. The top value will be used.
deployment
Set for your local app (/var/www/discourse/.bundle/config): true

jobs
Set for your local app (/var/www/discourse/.bundle/config): 4

retry
Set for your local app (/var/www/discourse/.bundle/config): 3

path
Set for your local app (/var/www/discourse/.bundle/config): "vendor/bundle"

without
Set for your local app (/var/www/discourse/.bundle/config): [:development, :test]

구성 파일 검사로 확인

아래는 구성 파일을 검사하여 동일한 확인을 수행하는 방법입니다.

root@uat-app:/var/www/discourse# cat /var/www/discourse/.bundle/config
---
BUNDLE_DEPLOYMENT: "true"
BUNDLE_JOBS: "4"
BUNDLE_RETRY: "3"
BUNDLE_PATH: "vendor/bundle"
BUNDLE_WITHOUT: "development:test"

구성 업데이트

root@uat-app:/var/www/discourse# bundle config set path 'vendor/bundle'
Your application has set path to "vendor/bundle". This will override the global value you are currently setting
root@uat-app:/var/www/discourse# bundle config set without 'development:test'
Your application has set without to "development:test". This will override the global value you are currently setting
root@uat-app:/var/www/discourse# bundle config unset deployment

구성 다시 확인

root@uat-app:/var/www/discourse# bundle config list
Settings are listed in order of priority. The top value will be used.
path
Set for your local app (/var/www/discourse/.bundle/config): "vendor/bundle"
Set for the current user (/root/.bundle/config): "vendor/bundle"

without
Set for your local app (/var/www/discourse/.bundle/config): [:development, :test]
Set for the current user (/root/.bundle/config): [:development, :test]

jobs
Set for your local app (/var/www/discourse/.bundle/config): 4

retry
Set for your local app (/var/www/discourse/.bundle/config): 3

설치 재시도

Gems를 다시 설치하고 컨테이너를 종료합니다.

root@uat-app:/var/www/discourse# su discourse -c 'bundle install'
...........
Bundle complete! 125 Gemfile dependencies, 163 gems now installed.
Gems in the groups development and test were not installed.
Bundled gems are installed into `./vendor/bundle`
root@uat-app:/var/www/discourse# exit

vBulletin 데이터를 위한 디렉터리 생성

디렉터리 생성

[root@uat standalone]# pwd
/var/discourse/shared/standalone
[root@uat standalone]# mkdir vbulletin

vBulletin 데이터베이스 복사

[root@uat standalone]# scp <login user>@<vbulletin server IP>:/home/backup/vbulletin/vbulletin-2020-11-14-03:30:01.sql.bz2 ./vbulletin/.

vBulletin 데이터베이스 압축 해제

[root@uat containers]# docker exec -it app bash
root@uat-app:/# cd /shared/vbulletin
root@uat-app:/shared/vbulletin# bunzip2 vbulletin-2020-11-14-03\:30\:01.sql.bz2

데이터 소스 설정

데이터베이스 vb4 생성

root@uat-app:/shared/vbulletin# mysql -uroot -p -e 'CREATE DATABASE vb4'
Enter password:

vBulletin을 MariaDB로 가져오기

root@uat-app:/shared/vbulletin# mysql -uroot -p vb4 < vbulletin-2020-11-14-03\:30\:01.sql
Enter password:

프로필 아카이브 압축 해제

[root@uat vbulletin]# tar xvfz signaturepics.tar.gz
[root@uat vbulletin]# tar xvfz customavatars.tar.gz
[root@uat vbulletin]# tar xvfz customprofilepics.tar.gz

데이터베이스 루트 비밀번호 업데이트

root@uat-app:/var/www/discourse# mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 77
Server version: 10.3.25-MariaDB-0+deb10u1 Debian 10

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '1234';
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> quit
Bye

Discourse로 가져오기

데이터 소스 연결 세부 정보 설정

[root@uat vbulletin]# export DB_NAME="vb4"
[root@uat vbulletin]# export DB_USER="root"
[root@uat vbulletin]# export DB_PW="1234"
[root@uat vbulletin]# export TABLE_PREFIX="vbulletin"
[root@uat vbulletin]# export ATTACHMENT_DIR='/shared/vbulletin'
[root@uat vbulletin]# export TIMEZONE="America/Vancouver"
[root@uat vbulletin]# cd /var/www/discourse
root@uat-app:/var/www/discourse# su discourse -c 'bundle exec ruby script/import_scripts/vbulletin.rb'
root:1234@localhost wants vb4
Loading existing groups...
Loading existing users...
Loading existing categories...
Loading existing posts...
Loading existing topics...

importing groups...
15 / 15 (100.0%) [3272 items/min] n]
importing users
117 / 11033 ( 1.1%) [145 items/min] in]
4개의 좋아요

그러니까 데이터베이스에 처음 연결할 때 라이브러리를 섞어서 사용했던 것이 문제였나요?

2개의 좋아요

그렇지 않다고 생각합니다. 실제로 비밀번호를 명시적으로 변경한 후 실행이 가능했습니다. 이제 개인 메시지(PM)를 가져오는 과정에서 문제가 발생하고 있습니다. 아래와 같은 메시지가 많이 표시되고 있습니다. 이것이 무엇인지 혹시 아시는 분 계신가요?

importing private messages...
      139 / 177409 (  0.1%)  [399 items/min]  one of the participant's id is nil -- [nil, 270]
pm-149 has no target (a:1:{i:486;s:5:"TonyN";})
      364 / 177409 (  0.2%)  [418 items/min]  one of the participant's id is nil -- [nil, 276]
pm-420 has no target (a:1:{i:623;s:14:"the other side";})
      571 / 177409 (  0.3%)  [414 items/min]  one of the participant's id is nil -- [nil, 445]
pm-702 has no target (a:1:{i:767;s:6:"greatg";})
      572 / 177409 (  0.3%)  [414 items/min]  one of the participant's id is nil -- [nil, 445]
      605 / 177409 (  0.3%)  [416 items/min]  one of the participant's id is nil -- [nil, 461]
1개의 좋아요

해당 사용자가 어떤 이유로든 가져오지 못했거나 (이메일 주소 누락이 원인이 될 수 있었지만, 이는 이제 해결되었어야 합니다), 다른 이유로 인해 가져온 사용자 이름을 조회하는 코드가 제대로 작동하지 않는 것일 수 있습니다(예: 사용자 이름의 대소문자 문제).

3개의 좋아요

@pfaffman 네, 그렇게 보입니다. 다만 일부 세부 사항은 명확하지 않네요. 예를 들어 첫 번째 항목을 살펴보겠습니다.

  1. pm-149은 무엇을 의미합니까?
  2. a:1:{i:486;s:5:"TonyN";}에서 "TonyN"은 사용자 이름처럼 보이는데, 다른 숫자들은 무엇을 의미합니까?
  3. [nil, 270]은 어떻게 해석해야 합니까? 270은 무엇을 나타내는 것일까요?

어떤 부분에 문제가 있는지 이해할 수만 있다면, 데이터베이스를 조회해서 데이터 오류가 있는지 확인할 수는 있을 것 같습니다. 하지만 이 값들이 실제로 무엇을 의미하는지 확실하지 않습니다.

참고로, 가져온 모든 포럼이 모든 사용자에게 허용되어 있다는 것도 발견했습니다. 이는 관리자만 접근할 수 있도록 설정된 포럼들이 모두에게 공개되어 있다는 뜻입니다. 이 부분을 제어할 수 있는 방법이 있을까요?

1개의 좋아요

죄송합니다. 설명해 드릴 정도로 잘 기억나지 않습니다. 이 문제에 대해 제가 드릴 수 있는 무료 도움은 여기까지입니다.

물론입니다. Understanding groups and category permissions 를 참조하세요.

일부 가져오기(importer) 도구는 그룹을 가져오도록 노력하지만, 가져온 카테고리에 해당 권한을 적용하는 방법을 아는 도구는 거의 없습니다. 해당 설정을 수동으로 수정해야 합니다.

2개의 좋아요

@titusc 님의 지시에 따라 진행했는데, 데이터베이스 가져오기(import)에 문제가 생기는 것 같습니다…

root@DO-Discourse-app:/shared/vbulletin# mysql -uroot -p vb4 < CC12-Sat-Full-Backup.sql
Enter password: 
ERROR 1265 (01000) at line 4928: Data truncated for column 'method' at row 1
root@DO-Discourse-app:/shared/vbulletin#

무엇을 찾고 있는지에 대한 조언이 있을까요?

N/M 원래 데이터베이스에 오류가 있는 것 같습니다…

2개의 좋아요