sql - 将一个/两个 Drupal 安装中的内容导入到一个新的 Drupal 安装中

标签 sql mysql drupal

我们正在将一个大型站点 opendemocracy.net 从 Drupal 4.7 升级到 Drupal 6。我们现有的安装在数据库中有很多多余的表,这些表来 self 们不会使用的曾经使用过的模块:理想情况下,我们不会'保留这些,或我们的旧 block 等。这是因为:(a) 保持数据库尽可能小会很好,(b) 新 block 从 ID 1 开始会很好,等,(c) 尽可能干净的安装应该尽量减少任何问题(例如,我们笨拙的旧安装有一些奇怪的问题,例如不让我们创建任何新 block )。

我们真正想要保留的只是我们的节点(加上评论)、分类法、文件、统计信息、用户、路径别名和一个自定义表。我已经尝试将我认为管理这些的表(列在这个问题的末尾)复制到新的 4.7 安装中,然后从中升级,它似乎可以工作。我的问题是:这行得通吗?这是个好主意吗?是否有更好的方法来实现某些相同的目标?

此外,如果我们需要对另一个安装执行相同的操作,并将其内容添加到同一个新安装中怎么办?我们的论坛有一个单独的安装。以下方法似乎可行,但我担心创建新内容时会导致问题到达我创建的新 nids(Drupal 如何检查哪些 nids 是免费的;是否有我应该更改的数据库变量?):

  1. 将论坛安装的 node 和 term_nodes 表中的 nids(和 vids)增加到主安装中最高的 nid(或 vid)
  2. 在主安装中使用与论坛安装中的论坛词汇相同的术语创建一个新词汇(在 maininstall.com/admin/content/forum - 我不确定如何指定这是论坛词汇)
  3. 将论坛安装的 term_nodes 表中的 tids 更改为主安装中这个新词汇表中术语的 tid 值
  4. 将论坛安装的修改后的 node 和 term_nodes 表的内容插入到主安装的 node 和 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

最佳答案

我不太同意杰里米的第一部分。你必须非常小心地混搭你的 Drupal 数据库。有时事情似乎可行,但后来,您发现自己给自己制造了很多问题,因为您删除了一个表中的某些内容,而另一个表中引用了这些内容。此外,您的 block 的 ID 号实际上不会影响 Drupals 创建新 block 等的能力。如果您确实想要“漂亮”的 ID,请确保您彻底测试。但考虑到成本/ yield ,这绝对不值得。

您创建一个新的 4.7 然后从那里升级的策略应该可以正常工作。但是,我建议您首先将数据库复制到当前发行版的副本中,然后停用并卸载所有您不会使用的模块。这将清除与这些模块关联的所有数据,并且还应该有助于清理您的表,以防更改了您正在使用的表。这可能不会做任何事情,但它可以帮助清理您正在使用的数据。

当 Drupal 创建新节点时,它只是执行 SQL INSERT,因此它是处理 ID 的数据库。所以你不必为此担心。 migrate模块 Jeremy 建议,应该能够帮助您将数据传输到新的 Drupal 安装中。如果您更愿意编写脚本,您的提议似乎还不错。

注意
许多升级指南和upgrade handbook说。在进行重大升级时,您应该始终升级所有主要的 Drupal 版本(例如 4 到 5、5 到 6 ...),直到达到您的目标。原因是内部结构以及数据库模式在每个主要版本中都会发生变化。因此,您需要在版本 5 中对数据结构进行更改,才能成功升级到版本 6。我在原来的帖子中没有提到这一点,因为这是常识,但最好什么都不提越少。

另一件值得注意的事情是,正如 Henrik O 正确指出的那样,您可以更改数据库中的 AUTO_INCREMENT 值。我不记得 4.x 升级,但我相信 Drupal 会在 4-5 升级的一部分中解决这个问题,因为它在该版本中实现了串行表,而不是自己管理它。此外,是否运行查询来更改 AUTO_INCREMENT 取决于数据库后端,因为并非所有后端都使用此属性。 PostgreSQL 不以这种方式管理序列号,因此如果您将它用于 Drupal,它应该会自动开始创建具有正确 nids 的节点。

关于sql - 将一个/两个 Drupal 安装中的内容导入到一个新的 Drupal 安装中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1584577/

相关文章:

mysql - mysql中如何按组查找累计值?

WHERE中IN和OR之间的SQL区别

asp.net - 将 linq 查询转换为having

php - 按组合连接排序

php - Wordpress 数据库类 - MySQL Type Bit

drupal - 不完整的库定义 drupal 8

php - Drupal Commons 迁移站点 500 错误

javascript - Drupal - Devel Themer 未显示

c# - 将数据表转换为哈希表或将 sqldatareader 转换为哈希表的简便方法

mysql - 在实现以下触发器 :- Subquery returns more than 1 row 后,我在invoice_line_item 中添加行时遇到错误