Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将一个或两个Drupal安装中的内容导入到新的Drupal安装中_Sql_Mysql_Drupal - Fatal编程技术网

Sql 将一个或两个Drupal安装中的内容导入到新的Drupal安装中

Sql 将一个或两个Drupal安装中的内容导入到新的Drupal安装中,sql,mysql,drupal,Sql,Mysql,Drupal,我们正在将一个大型网站opendemocracy.net从Drupal 4.7升级到Drupal 6。我们现有的安装在数据库中有很多多余的表,这些表来自我们不使用的曾经使用过的模块:理想情况下,我们不会保留这些表,或者我们的旧块,等等。这是因为:(a)最好保持数据库尽可能小,(b)新块最好从ID 1开始,等等,(c)尽可能干净的安装应该尽量减少任何问题(例如,我们粗糙的旧安装有一些奇怪的问题,例如不允许我们创建任何新块) 我们真正想要保留的只是节点(加上注释)、分类法、文件、统计信息、用户、路径

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

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

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

  • 将论坛安装的node和term_nodes表中的nid(和vid)增加主安装中的最高nid(或vid)
  • 在主安装中使用与论坛安装中的论坛词汇表相同的术语创建一个新词汇表(位于mainstall.com/admin/content/forum-我不确定如何指定这是论坛词汇表)
  • 将论坛安装的term_nodes表中的tid更改为主安装中此新词汇表中术语的tid值
  • 将论坛安装的已修改节点和术语_节点表的内容插入主安装的节点和术语_节点表中
  • 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 cms复制到drupal,但应该能够帮助您将drupal内容添加到另一个drupal站点

    在第一部分,我不太同意杰里米的观点。您必须非常小心地在Drupal数据库中混搭。有时事情似乎是可行的,但后来,您发现您为自己制造了很多问题,因为您删除了一个表中的某些内容,而这些内容在另一个表中引用。此外,你们的方块id数也不会影响德鲁友创造新方块的能力。若你们想要“漂亮”的id,请确保你们彻底测试了。但考虑到成本/收益,这绝对不值得

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

    当Drupal创建新节点时,它只需执行SQL插入,因此处理ID的是数据库。所以你不必为此担心。Jeremy建议的模块应该能够帮助您将数据传输到新的Drupal安装中。如果你想写一个剧本,你的建议似乎很好

    注意
    正如许多升级指南所说。在进行主要升级时,您应该始终通过所有主要的Drupal版本(例如4到5、5到6…)进行升级,直到达到目标。原因是内部结构和数据库模式在每个主要版本中都会发生变化。因此,您需要在版本5中对数据结构进行更改,才能成功升级到版本6。我在我最初的帖子中没有提到这一点,因为我认为这是常识,但尽管如此,还是提一提可能是个好主意


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

    我想说您的基本方法是好的,但您有理由担心会出现问题。实际上,您主要关心的应该是引用完整性,因为自版本4.7以来,id处理发生了变化。最初,Drupal没有使用数据库引擎的自动递增/串行功能,而是通过sequences表生成自己的id。他们在Drupal5中切换到了serials,但由于某种原因,我不记得他们仍然保留序列表,直到在版本6中删除它

    因此,如果我处于您的位置,我会添加一个中间步骤,首先升级/迁移到Drupal 5安装,然后再升级到Drupal 6。理由是,升级过程或多或少是一个手工调整的操作集合,使用有困难的用户的输入进行优化。由于大多数错误报告来自仅进行“1版本”升级的用户,因此采用相同的路线应将遇到意外情况的可能性降至最低
    ALTER TABLE node AUTO_INCREMENT = 5432;