juampynr/syncdb

使用 Drush 加速导入和导出大型 Drupal 数据库。

安装次数: 34,757

依赖关系: 0

建议者: 0

安全性: 0

星标: 27

关注者: 5

分支: 5

开放问题: 6

类型:drupal-drush

dev-master 2017-12-14 09:51 UTC

This package is auto-updated.

Last update: 2024-09-17 06:19:12 UTC


README

此项目实现了两个 Drush 命令,以更快地导出和导入大型 Drupal 7 或 8 数据库。它是通过将表分割成单独的文件,然后并行导入它们来实现的。

以下是每个命令的描述

  • drush dumpdb 将数据库表导出到当前环境的临时目录。
  • drush syncdb @example.dev@example.dev 下载 SQL 文件并在当前环境中安装它们。
  • drush importdb --dump-dir=/foo/bar 使用与 syncdb 相同的方法导入 /foo/bar 中的所有 *.sql 文件。

由于这不是一个模块,因此没有 .module 或 .info 文件。这是一个 Drush 命令。Drush 可以在特定的目录中找到命令,例如 $HOME/.drush/sites/all/drush。在终端运行 drush topic docs-commands 以查看可以将此项目放置的其他位置,以便 Drush 可以发现它。根据您的需求,您可以选择在项目中保留此命令的版本化代码或不保留。

要求

  • Drush:版本 6 或更高。
  • Drupal 7 或 Drupal 8。
  • 数据库:仅在 MySQL 上进行了测试。

强烈建议您在包含要导入的数据的机器上安装 GNU-parallel。在 Ubuntu 上,运行 sudo apt-get install parallel。在 Mac 上,运行 brew install parallel。这不是强制要求。即使没有 GNU-parallel,drush syncdb 仍然可以导入表,但可能需要更长的时间来完成。

安装

转到您项目的根目录并运行以下命令

composer require juampynr/syncdb

这将通常将命令下载到 /path-to-drush/drush/commands/syncdb。如果您想将其移动到项目中的某个位置以便进行版本控制,请将其移动到 sites/all/drush 或运行 drush dl --destination=sites/all/drush syncdb。

接下来,登录到远程服务器,该服务器将作为团队从中下载表到其本地环境的数据源。在那里安装该命令。

用法

您应该在指定的源环境中设置一个定期作业,该作业运行 drush dumpdb。这通常是开发环境。这可以通过 crontabJenkins 来设置。以下是在 crontab 中设置此方法的方式

drush @example.dev ssh
crontab -e
# Paste the following command at the bottom of the opened file:
30 2 * * * drush --root=/path/to/your/drupalroot --quiet dumpdb --structure-tables-key=common

一旦设置了这个作业,就在远程环境中运行一次,这样它就会将表导出到例如 /tmp/syncdb-tables。现在您可以使用以下命令将这些表导入到本地环境中

drush syncdb @example.dev

自定义命令

您可以使用与 sql-sync 命令相同的方式使用 --structure-tables-key 选项。此选项将结构表导出到名为 structure.sql 的文件中。

如果您安装了 parallel,请通过阅读命令 man parallel 的内容来查看其选项。您可能有优化此命令的更多方法。

用法示例

以下是一些使用这两个命令的终端会话的截图

drush dumpdb

drush dumpdb 2

drush syncdb

drush syncdb 2

致谢

  • Andrew Berry (@deviantintegral),感谢他创建了MySQL Parallel,我从其中汲取了一些灵感。
  • Mateu Aguiló Bosh (@e0ipso),感谢他向我展示 mysql-parallel 的工作原理。
  • Dave Reid @davereid,感谢他为Concurrent Queue编写代码,我从其中借鉴了当 GNU-parallel 不可用时使用的 drush_invoke_concurrent() 方法。
  • Kris Bulman (@krisbulman),感谢他每周都提醒我下载大型数据库是多么缓慢。