2017-04-03 3 views
0

공유 호스팅 서버에 drupal 7 설치가 있으며 데이터베이스 크기가 1GB 제한을 초과하면 서버 제공 업체가 node 테이블에서 일부 항목을 제거한 상황입니다.drupal 'node'테이블이 재생성 됨

많은 항목을 잃어 버렸지 만, 다른 테이블에있는 일부 데이터는 entity_id 개의 참조 번호가 있습니다.

다른 테이블의 참조를 사용하여 데이터를 쿼리 할 수 ​​있지만 누락 된 항목으로 인해 drupal 인터페이스에서 데이터를 표시 할 수 없습니다.

따라서 안전하게 테이블과 해당 테이블 참조로 node 항목을 다시 생성 할 수 있습니까?

Drupal 테이블의 필드 사용에 대한 정보는 어디에서 얻을 수 있습니까? 가능한 경우 단계별 가이드가 도움이 될 것입니다.

+0

전체 데이터베이스가있는 경우 백업 및 마이그레이션 모듈을 사용하여 안전하게 데이터를 내보내거나 가져올 수 있습니다. https://www.drupal.org/project/backup_migrate – Fky

+0

@Fky, 의견을 주셔서 감사합니다. 내 요구 사항은 누락 된 항목에 대한 백엔드 mysql 데이터베이스의 데이터를 다시 생성하는 것입니다. – Vijayakumar

+0

데이터베이스에 node_revision 테이블이 있는지 확인하십시오. 데이터베이스 백업이 없다고 가정하면 삭제 된 노드를 복구 할 수 없습니다. 나중에 다른 모듈을 사용하여 데이터베이스 백업을 유지하고 관리자 패널에서 이벤트를 모니터링하며 노드 개정을 유지할 수 있습니다. http://drupal.stackexchange.com/questions/645/is-it-possible-to -restore-a-deleted-node –

답변

0

자한 기르가 올바른 길 위에 있습니다. 리비전 정보를 통해 90 %를 얻을 수 있습니다.

이 예에서는 노드 테이블 만이 위조 된 삭제의 영향을 받았다고 가정합니다. 당신은 노드 객체를 사용하여이 다음 부분을 할 수

$result = db_query('SELECT nid, MAX(vid) AS vid, uid, title, `timestamp`, `status`, `comment`, promote, sticky FROM {node_revision} 
WHERE nid NOT IN (SELECT nid FROM {node}) GROUP BY nid'); 

관련 노드를 가지고 있지만, 주어진 우리가 노드 항목을 필요로 내가 직접 그것을 할 것하지 않는 수정하는 방법을 사용

시작 DB를 :

foreach ($result as $record) { 
    //You might be able to get the created date by looking at the earliest revision 
    $min_result = db_query('SELECT nid, MIN(vid) as vid, `timestamp` FROM {node_revision} WHERE nid = :nid', array(':nid' => $record->nid)); 
    $created = $min_result->fetchColumn(4); 

    $new_node = db_insert('node') 
    ->fields(array(
     'nid' => $record->nid, 
     'vid' => $record->vid, 
     'type' => 'YOU CANNOT GET THIS', 
     'language' => $record->language, 
     'title' => $record->title, 
     'uid' => $record->uid, 
     'created' => $created, 
     'updated' => $record->timestamp, 
     //you get the idea... 
    )); 

} 

나는 개정을 사용하여 콘텐츠 유형을 검색 할 수있는 방법을 찾을 수 없습니다, 그래서 솔루션의 약점이다. 필드 데이터가 모두 그대로 있다고 가정하면 노드를 다시 가져와야합니다.

* 면책 조항 :이 코드는 내 경험과 작은 인터넷 검색을 기반으로하므로 여기에 제시된 문제와 유사한 환경을 가짜로 만들 수 없습니다. 이것은 테스트되지 않았지만 여전히 가치가 있기를 바랍니다. Downvotes는 겸허하게 받아 들였다.

+0

'type'=> '이걸 가져올 수 없다'; 이 UID를 연결하는 것만으로 충분합니까? – Vijayakumar

+0

node_revision 테이블의 vuuid 필드 내용을 노드 테이블로 안전하게 복사 할 수 있습니까? – Vijayakumar

+0

uid가 노드 유형과 관련이 없습니다. 노드 유형은 노드 테이블에만 저장됩니다. 콘텐츠 형식에 필드 또는 필드 집합이 여러 개있는 경우 field_data_fieldname 테이블을 쿼리하여 해당 nid가 있는지 확인할 수 있습니다. vuuid를 노드 테이블의 uuid로 사용하고 싶지는 않습니다. uuid 모듈의 uuid_generate 메소드를 사용하려고합니다. uuid_generate()를 호출하고 적절한 생성 함수에 대한 콜백을 가져온 다음 user_call_func ('callbac_from_uuid')를 호출하여 uuid를 얻습니다. db_insert에 사용 된 배열에 uuid를 추가하십시오. – Quint