2009-10-18 3 views
4

큰 사이트 opendemocracy.net을 Drupal 4.7에서 Drupal 6로 업그레이드하고 있습니다. 기존 설치에는 데이터베이스에 한 번에 여러 개의 불필요한 테이블이 있습니다. 우리가 사용하지 않을 모듈을 사용합니다. 이상적으로는 이러한 블록이나 오래된 블록 등을 유지하지 않을 것입니다. 이는 (a) 가능한 한 데이터베이스를 작게 유지하는 것이 좋을 것입니다. (b) 새 블록이 ID 1 등에서 시작하는 것이 좋을 것입니다. (c) 가능한 한 설치를 정리하면 문제가 최소화됩니다. 예를 들어, 오래된 설치에는 새로운 블록을 만들지 않는 등의 이상한 문제가 있습니다.).하나 또는 두 개의 Drupal 설치 내용을 신선한 Drupal 설치로 가져 오기

노드 (주석 포함), 분류, 파일, 통계, 사용자, 경로 별칭 및 하나의 사용자 정의 테이블을 유지해야합니다. 나는 (이 질문 끝에 나열된) 테이블을 복사하여 새로운 4.7 설치로 복사 한 다음 업그레이드를 시도해 보았다. 내 질문은 : 이것이 효과가 있습니까? 좋은 생각입니까? 같은 목표를 달성하기위한 더 좋은 방법이 있습니까?

또한 다른 설치에서 동일한 작업을 수행해야하고 동일한 내용의 새 설치에 해당 내용을 추가해야하는 경우 어떻게해야합니까? 우리 포럼을위한 별도의 설치가 있습니다. 다음과 같은 접근 방식이 효과가있는 것처럼 보였습니다.하지만 새로운 콘텐츠를 만들 때 문제가 발생할 것이라는 걱정이됩니다. 새 콘텐츠를 만들 때 걱정이됩니다 (Drupal은 어떤 nids가 무료인지 확인하고 데이터베이스 변수는 변경해야합니까?) :

같은 조건으로 함께 포럼의 노드와 term_nodes 테이블의 NIDS (과 VIDS)이 주에서 가장 높은 NID (또는 VID)에 의해 설치
  1. 증가가
  2. 주에 새로운 어휘를 만들고, 설치하고 설치 포럼에 포럼 vocab을 설치하십시오 (maininstall.com/admin/content/forum에서 - 포럼 어휘를 지정하는 방법을 모르겠어요)
  3. 포럼의 term_nodes 테이블에있는 tids를 tid 기본 설치에서이 새로운 어휘의 용어 값은
  4. 수정 된 노드의 내용과 포럼의 term_nodes 테이블을 기본 설치의 노드 및 term_nodes 테이블에 삽입하십시오.

PS : 여기에 복사를 필요로 내가 찾은 테이블은 다음과 같습니다

audio, audio_attach, audio_image, audio_metadata, comments, files, node, node_access, node_comment_statistics, node_counter, node_revisions, node_type, od_story, term_data, term_hierarchy, term_node, term_relation, term_synonym, url_alias, users, vocabulary, vocabulary_node_types 

답변

3

나는 Jeremy와 처음에는 동의하지 않습니다. 당신은 Drupal 데이터베이스에서 매시를 신중히해야합니다. 일이 제대로 작동하는 것처럼 보일 수도 있지만 나중에 다른 테이블에서 참조되는 테이블에서 무언가를 삭제하기 때문에 자신이 많은 문제를 만들었다는 것을 알게됩니다. 또한 블록의 ID 번호는 실제로 효과가 없습니다. Drupals는 새로운 블록 등을 생성하는 기능을 제공합니다. "예쁜"ID를 원하면 철저하게 테스트하십시오. 그러나 비용/편익을 고려할 때, 이것은 분명히 가치가 없습니다.

4.7을 새로 작성한 후 전술에서 업그레이드하면 전략이 잘 작동합니다. 하지만, 먼저 데이터베이스를 현재 배포판의 복사본으로 복사 한 다음 사용하지 않을 모듈을 모두 비활성화하고 제거하는 것이 좋습니다. 이렇게하면이 모듈과 관련된 모든 데이터가 지워지고 사용중인 테이블을 변경 한 경우에도 테이블을 정리하는 데 도움이됩니다. 이것은 아무 것도 할 수 없지만 사용중인 데이터를 정리하는 데 도움이 될 수 있습니다.

새 노드를 만들 때 단순히 SQL INSERT를 수행하므로 ID를 처리하는 데이터베이스입니다. 그래서 그것에 대해 염려 할 필요가 없습니다. Jeremy가 제안한 migrate 모듈은 데이터를 새로운 Drupal 설치로 전송하는 것을 도와 줄 수 있어야한다고 제안합니다. 만약 당신이 오히려 스크립트를 쓰고 싶다면, 당신이 제안한 것은 괜찮아 보인다.


으로 많은 업그레이드 가이드 및 upgrade handbook들은 말한다. 주요 업그레이드를 수행 할 때는 목표에 도달 할 때까지 모든 주요 Drupal 릴리스 (예 : 4에서 5, 5에서 6 ...)를 통해 업그레이드해야합니다. 그 이유는 모든 주요 릴리스에서 내부 구조와 데이터베이스 스키마가 변경되기 때문입니다. 따라서 버전 6으로 성공적으로 업그레이드하려면 버전 5의 데이터 구조에서 변경해야합니다. 원래의 게시물에는이 내용을 언급하지 않았지만 일반적인 지식으로는이 내용을 언급하지 않았습니다. 아무 것도 언급하지 않는 것이 좋습니다. 적다.

또 다른 주목할 점은 Henrik O가 올바르게 지적 했으므로 데이터베이스의 AUTO_INCREMENT 값을 변경할 수 있다는 것입니다. 나는 4.x 업그레이드를 기억하지 못하지만, Drupal은 4-5 업그레이드의 일부로이 문제를 처리 할 것이라고 생각한다. AUTO_INCREMENT을 변경하기 위해 쿼리를 실행할지 여부도 모든 백엔드가이 속성을 사용하는 것은 아니므로 데이터베이스 백엔드에 따라 다릅니다. PostgreSQL은 그런 식으로 연재물을 관리하지 않으므로 Drupal에 사용하면 올바른 nids가있는 노드를 자동으로 만들어야합니다.

+0

일반적으로 일부 테이블 만 복사하면 문제가 발생할 수 있지만 이미 설치에 문제가 있습니까? 이 용액에 의해 부분적으로 정류된다. –

+0

네, Jeremy는 그게 가능한 한 설치를 깨끗하게하고자하는 이유 중 하나입니다. 언급하지 않은 다른 이유는 기존 데이터베이스에서 업그레이드하면 몇 가지 문제가 발생한다는 것입니다. 첫째, 특히 시스템 모듈을 업그레이드 할 때 질식하는 것처럼 지나치게 오래 걸리는 것처럼 보입니다. (마치므로 어쩌면 문제가되지 않지만 걱정할 것입니다.) 둘째, 몇 가지 문제가 있습니다. 오류 보고서 : 이전에보기가 설치되고 부적절하게 제거되었으므로 존재하지 않는보기 테이블을 업데이트하려고합니다. 존재하지 않는 그룹에 대한 사용 권한이 업데이트됩니다. – od56

+0

블록 ID를 변경하는 것을 언급하고 테이블을 복사하지 않도록주의해야합니다. db에서 직접 변경하면 가끔씩 부적절한 버그가 발생할 수 있습니다. 테이블을 복사하는 것만 큼 큰 문제는 아닙니다. 일반적으로 문제가 있는지 빠르게 확인할 수 있습니다. 그러나 드루팔 (Drupal이 데이터베이스를 손질 해 모듈의 전문가가 당신을 도와줍니다. 그들은 원치 않는 일들을 위해 데이터베이스를 정리하는 기능을 작성하기 때문에 적어도 많은 사람들이 그렇게합니다. – googletorp

1

깨끗한 기반을 만드는 당신의 접근 방식은 다음 작업을 함께 스틱 것 같다 설치합니다.

질문의 두 번째 부분은 migrate 모듈입니다. 이것은 드루팔 (drupal)이 아닌 CMS에서 드루팔 (drupal)으로 복사하도록 설계되었지만, 다른 드루팔 (drupal) 사이트에 드루팔 (drupal) 콘텐트를 추가 할 수 있어야합니다.

3

기본 접근 방식은 괜찮 으면 좋겠지 만 자동으로 깨는 것에 대해서는 우려 할 만합니다. ID 처리가 버전 4.7 이후 변경되었으므로 주 관심사는 참으로 참조 무결성이어야합니다. 원래 Drupal은 데이터베이스 엔진의 자동 증가/연속 기능을 사용하지 않았지만 시퀀스 테이블을 통해 자체 ID 생성을 수행했습니다. 그들은 드루팔 (Drupal 5)에서 연재로 바꿨지 만 어떤 이유로 인해 시퀀스 테이블을 버전 6에서 삭제할 때까지 여전히 시퀀스 테이블을 유지했다는 것을 기억하지 못합니다.

그래서 내가 현재 위치에 있다면 중간 단계를 추가하고 먼저 Drupal 5로 업그레이드/마이그레이션 한 다음 Drupal 6으로 또 다른 업그레이드를하십시오. 업그레이드 프로세스는 다소 문제가있는 사용자 입력을 사용하여 수정 된 작업 모음입니다. 대부분의 오류 보고서는 '1 버전'업그레이드를 수행하는 사용자에게만 제공되므로 동일한 경로를 사용하면 예기치 않은 오류/조건이 발생할 확률을 최소화해야합니다.

post on drupal.org 또한 '병합'하려는 포럼 인스턴스가 Drupal 5 설치이므로 마이그레이션의 중간 단계 인 Drupal 5 '단계'에서 병합을 수행 할 수 있습니다. (또는 메인 인스턴스에 병합하기 전에 해당 인스턴스를 Drupal 6으로 개별적으로 업그레이드 할 것입니다.)

Drupal> = 5에서 id 조정에 관해서는 영향을받는 각각의 AUTO_INCREMENT 시작 값을 조정해야합니다 테이블을 명시 적으로. MySQL은 예를 들어, 발행 :

ALTER TABLE node AUTO_INCREMENT = 5432; 

(주 지금부터 5432에서 시작하는 새로운 일련 번호 (ID를) 설정을 시작하기 위해 노드 테이블을 말할 것이다 : AUTO_INCREMENT이 처리의 MySQL의 방법은 경우입니다 PostgreSQL을 사용하는 경우 documentation for the serial 'pseudo' type과 함께 제공되는 시퀀스 생성 메커니즘을 참조하십시오.

분명히 새 인스턴스를 철저히 테스트해야합니다. 새로운 데이터의 삽입을 테스트하고 기존 데이터 (노드, 용어, 마이그레이션 한 모든 것)를 업데이트하는 데 중점을 두십시오. 그러면 참조 무결성과 관련된 오류가 표시됩니다.

것은 철저 당신은 괜찮을 것 - 행운을 빕니다 :)


편집 : 또한,주의 깊게 '변수'테이블 항목을 확인해야합니다 일부 설정과 같은 ID에 대한 참조가 포함되어있을 수 있습니다 "표준"테이블 항목 (예 : 어휘 vid, 용어 tid 또는 유사 함 - 특히 사례에서 forum_nav_vocabularyforum_containers)

+0

MYSQL 만 auto_increment를 사용하여 추가 할 수도 있습니다. – googletorp

+0

좋은 지적입니다. –

관련 문제