辅助脚本,用于快速同步本地MySQL数据库与远程数据库,以及为部署到远程服务器准备本地数据库。

安装: 127

依赖: 0

建议者: 0

安全性: 0

星级: 7

观察者: 0

分支: 21

语言:Shell

1.0.7 2022-07-06 11:02 UTC

This package is auto-updated.

Last update: 2024-09-15 15:59:44 UTC


README

当在一个活跃的项目上工作时,你的本地数据库可能比预演或生产数据库过时,这会使本地开发变得困难或不可预测。

DB Sync提供了脚本,可以快速更新本地MySQL开发数据库与远程预演或生产数据库,同时还可以在部署到远程服务器之前,在本地数据库上运行安全的搜索/替换。它假定你的远程数据库可以通过IP白名单等方式外部访问。

免责声明:这些脚本和命令最初是为我们开发团队内部使用而创建的,以加快常见的重复性任务。但是,它们可能对其他人有所帮助。欢迎在你的项目中使用,效果可能会有所不同。

要求

  • Composer
  • PHP >= 5.3.0
  • 本地开发环境,如Vagrant。

备注

  • 这些脚本需要一个在项目根目录中的.env配置文件。如果你使用WordPress,可以使用scottjs/wp-dotenv来允许WordPress共享相同的.env文件,避免维护两个配置文件。
  • 此脚本是为WordPress设计的,但它应该适用于其他项目,例如Laravel 5。

安装

从项目的根目录运行composer require "josephdsouza86/db-sync:1.*" --dev

或者,你可以手动将"josephdsouza86/db-sync": "1.*"添加到你的composer.json文件中

"require-dev": {
	"josephdsouza86/db-sync": "1.*"
}

然后,将以下脚本添加到你的composer.json文件中

"scripts": {
	"database-update" : [
		"vendor/josephdsouza86/db-sync/database-update.sh"
	],
	"database-prepare" : [
		"vendor/josephdsouza86/db-sync/database-prepare.sh"
	],
	"database-import" : [
		"vendor/josephdsouza86/db-sync/database-import.sh"
	],
	"database-export" : [
		"vendor/josephdsouza86/db-sync/database-export.sh"
	]
}

从项目的根目录运行composer update命令。

在项目的根目录创建一个.env文件,并添加/更新以下配置选项

DOMAIN_REMOTE=www.example.com
DOMAIN_LOCAL=www.example.local

DB_HOST=localhost
DB_NAME=example
DB_USER=root
DB_PASSWORD=password

REMOTE_DB_HOST=123.123.123.123
REMOTE_DB_NAME=example
REMOTE_DB_USER=root
REMOTE_DB_PASSWORD=password

SYNC_IGNORE_TABLES=
SYNC_IGNORE_ACTIVE_PLUGINS=true

用法

从项目的根目录,你可以运行以下composer命令

  • composer database-update - 当在一个活跃的项目上工作时,你的本地数据库可能比预演或生产数据库过时。此命令将备份并清空你本地配置的数据库,并用你的远程或生产数据库的副本更新它。此命令需要在.env文件中设置所有DB_*REMOTE_DB_*选项,并假定你的远程数据库可以外部访问。

  • composer database-prepare - 当在本地开发时,CMS中创建的图片和资产链接可能引用的是你的本地开发网站地址,在预演或生产中不会工作。此命令将在你的本地配置的数据库上运行安全的搜索/替换脚本,将.env文件中配置的DOMAIN_LOCAL的所有实例替换为DOMAIN_REMOTE。然后,数据库将导出到dumps/prepared-database-YYYY.MM.DD-HH.MM.SS.sql,以便部署。

  • composer database-import - 如果项目根目录中存在setup/database.sql文件,此命令将导入该文件到你的本地数据库配置(由.env文件指定)。如果你在一个项目中工作,并希望团队成员快速获取数据库副本,这非常有用。

  • composer数据库导出 - 此命令将导出本地数据库的副本,该数据库配置在.env文件中,并保存到setup/database.sql。如果此文件存在,它将被覆盖。这可以快速获取当前开发数据库的快照,与他人共享。

配置

以下是对.env文件中使用到的每个配置选项的解释。

  • DOMAIN_REMOTE - 应指向您的远程或生产环境(如果可用),不包括http://或尾部斜杠。例如:www.example.comsubdomain.example.com

  • DOMAIN_LOCAL - 不应包括http://或尾部斜杠。例如:www.example.localsubdomain.example.local

  • DB_* - 提供设置本地数据库连接详情的选项。

  • REMOTE_DB_* - 提供设置远程预发布或生产数据库连接详情的选项。

  • SYNC_IGNORE_TABLES - 可选,可以留空。值表示表名,可以提供多个。例如:SYNC_IGNORE_TABLES="wp_posts wp_postmeta wp_options"

  • SYNC_IGNORE_ACTIVE_PLUGINS - 应为truefalse。对于WordPress数据库,true将忽略wp_options表中的active_plugins行,以避免影响您环境的活跃插件。

故障排除

  • 数据包大小超过'max_allowed_packet'字节数 在您的my.inimy.cfg中更新max_allowed_packet值以允许更大的数据包
[mysqld]
max_allowed_packet = 10M

待办事项

  • 添加表忽略列表
  • 改进表忽略列表,使其成为Array而不是字符串比较
  • 添加表正则表达式忽略列表,以排除表组,例如通过提供wp_wf*等来排除Wordfence表
  • 将脚本分组为"dump",这可以在本地创建备份或远程下载备份。还有"import",可用于恢复本地备份或导入下载的备份。其他shell脚本可以调用这些基本脚本,并传递参数。这消除了脚本重复,并使创建/维护命令脚本更容易(即更新、仅远程下载等)