josephdsouza86 / db-sync
辅助脚本,用于快速同步本地MySQL数据库与远程数据库,以及为部署到远程服务器准备本地数据库。
Requires
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.com
或subdomain.example.com
。 -
DOMAIN_LOCAL - 不应包括http://或尾部斜杠。例如:
www.example.local
或subdomain.example.local
。 -
DB_* - 提供设置本地数据库连接详情的选项。
-
REMOTE_DB_* - 提供设置远程预发布或生产数据库连接详情的选项。
-
SYNC_IGNORE_TABLES - 可选,可以留空。值表示表名,可以提供多个。例如:
SYNC_IGNORE_TABLES="wp_posts wp_postmeta wp_options"
-
SYNC_IGNORE_ACTIVE_PLUGINS - 应为
true
或false
。对于WordPress数据库,true
将忽略wp_options
表中的active_plugins
行,以避免影响您环境的活跃插件。
故障排除
- 数据包大小超过'max_allowed_packet'字节数 在您的
my.ini
或my.cfg
中更新max_allowed_packet
值以允许更大的数据包
[mysqld]
max_allowed_packet = 10M
待办事项
- 添加表忽略列表
- 改进表忽略列表,使其成为
Array
而不是字符串比较 - 添加表正则表达式忽略列表,以排除表组,例如通过提供
wp_wf*
等来排除Wordfence表 - 将脚本分组为"dump",这可以在本地创建备份或远程下载备份。还有"import",可用于恢复本地备份或导入下载的备份。其他shell脚本可以调用这些基本脚本,并传递参数。这消除了脚本重复,并使创建/维护命令脚本更容易(即更新、仅远程下载等)