我在共享主機服務器中安裝了drupal 7,並且在數據庫大小超過1gb限制時,服務器提供商從node
表中刪除了一些條目。drupal'節點'表重新生成
我失去了很多條目,但其他表中存在一些數據,其中entity_id
參考編號。
我可以使用其他表中的引用來查詢我的數據,但由於這些缺失條目,drupal接口無法顯示數據。
那麼,我怎麼能安全地重新生成條目到node
表和它的表引用?
我在哪裏可以獲得有關drupal表中字段使用情況的信息? 如果可能,一步一步的指導將是非常有益的。
我在共享主機服務器中安裝了drupal 7,並且在數據庫大小超過1gb限制時,服務器提供商從node
表中刪除了一些條目。drupal'節點'表重新生成
我失去了很多條目,但其他表中存在一些數據,其中entity_id
參考編號。
我可以使用其他表中的引用來查詢我的數據,但由於這些缺失條目,drupal接口無法顯示數據。
那麼,我怎麼能安全地重新生成條目到node
表和它的表引用?
我在哪裏可以獲得有關drupal表中字段使用情況的信息? 如果可能,一步一步的指導將是非常有益的。
賈漢吉爾是在正確的軌道上。修改信息將爲您提供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');
你可以使用一個節點對象做下一部分,但是考慮到我們需要的只是節點條目我就直接這樣做是爲了數據庫:
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...
));
}
我沒能找到一種方法來檢索使用修訂內容類型,所以這是解決方案的弱點。假設你的所有字段數據仍然存在,這應該讓你的節點回來。
*免責聲明:我無法僞裝類似於此處顯示的問題的環境,因此此代碼基於我的經驗和一點Google搜索。這尚未經過測試,但我希望它仍然有價值。虛心接受Downvotes。
'type'=>'您無法獲取此內容';連接的uid足夠了嗎? – Vijayakumar
我可以安全地將node_revision表中的vuuid字段的內容複製到節點表中嗎? – Vijayakumar
uid與節點類型無關。節點類型只存儲在節點表中。如果你的內容類型有一些區別字段或字段集,你可以查詢field_data_fieldname表來查看nid是否在那裏。你不想在節點表上使用vuuid作爲你的uuid。你會想要使用uuid模塊的uuid_generate方法。你可以調用uuid_generate()並獲得相應生成函數的回調,然後調用user_call_func('callbac_from_uuid')來獲得uuid。將uuid添加到用於db_insert的數組中。 – Quint
如果你有一個完整的數據庫,你可以使用備份和遷移模塊安全地導出/導入數據https://www.drupal.org/project/backup_migrate – Fky
@Fky,謝謝你的評論。我的要求是重新生成後端mysql數據庫中的數據以查找缺失的條目。 – Vijayakumar
檢查數據庫中是否有node_revision表。假設你沒有數據庫備份,你不能恢復你刪除的節點。將來你可以使用不同的模塊來保持數據庫備份,在管理面板中監視事件,保持節點修改等。看看這篇文章http://drupal.stackexchange.com/questions/645/is-it-possible-to -restore-a-deleted-node –