juampynr / syncdb
使用 Drush 加速导入和导出大型 Drupal 数据库。
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
。这通常是开发环境。这可以通过 crontab 或 Jenkins 来设置。以下是在 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
的内容来查看其选项。您可能有优化此命令的更多方法。
用法示例
以下是一些使用这两个命令的终端会话的截图
致谢
- Andrew Berry (@deviantintegral),感谢他创建了MySQL Parallel,我从其中汲取了一些灵感。
- Mateu Aguiló Bosh (@e0ipso),感谢他向我展示 mysql-parallel 的工作原理。
- Dave Reid @davereid,感谢他为Concurrent Queue编写代码,我从其中借鉴了当 GNU-parallel 不可用时使用的
drush_invoke_concurrent()
方法。 - Kris Bulman (@krisbulman),感谢他每周都提醒我下载大型数据库是多么缓慢。