zimzat / db-changeset-manager
自动化将SQL文件(更改集)应用到不同环境或用户的数据库中的过程。
v0.3.4
2015-10-08 01:45 UTC
Requires
- php: >=5.4.0
- ext-pdo: *
README
自动化将SQL文件(更改集)应用到不同环境或用户的数据库中的过程。
创建版本化目录,让开发者可以将SQL文件放入其中,通过发布过程应用到其他环境,并将它们返回给其他开发者,以确保每个人都能与数据库更改保持同步。此项目不试图强制特定的语法、冗长的声明或提供自动冲突解决或检测;只是简单地应用环境之间的更改过程。
典型的更改集目录看起来可能像这样
changesets
├── v1.0
│ ├── 20150102_create-user.sql
│ └── 20150103_track-user-actions.sql
├── v1.1
│ └── 20150103_track-user-action-date.sql
├── v1.3
│ ├── 2015-01-15_create-user-profile.sql
│ ├── 2015-01-16_blogs.sql
│ └── 2015-01-17_user-roles.sql
├── v1.3.1
│ └── 2015-01-20_add-user-roles.sql
└── v1.5
├── 2015-01-15_long-awaited-feature.sql
├── 2015-02-01_index-blogs.sql
├── 2015-02-03_add-reporting.sql
└── 2015-02-10_blog-tags.sql
更改按照版本号顺序应用到数据库中,然后按文件名进行数字排序,因此从1.0升级到1.3时,会先应用'track-user-actions',即使它们的日期前缀相同。
默认情况下,目录应该以前缀'v'开头,但可以通过在db.ini中指定versionPrefix来更改或删除。版本方案应遵循version_compare()规定的标准。
文件必须以.sql
结尾,并且在所有版本之间必须具有唯一名称,但其他名称可以随意命名。在应用到数据库之前,会对文件列表进行自然排序(2在10之前)。
限制
- 不允许SELECT语句。
- 不允许CREATE DATABASE、DROP DATABASE或USE DATABASE语句。
要求
- PDO
- MySQL
安装
安装此工具支持的方法是通过Composer。
composer install zimzat/db-changeset-manager
命令行使用
安装后,可以使用php shell文件从命令行应用更改。
ln -s ./vendor/bin/dbChangeManager.php .
./dbChangeManager.php
命令行工具期望定义一个配置文件,指定访问名称和权限。
host = localhost
dbname = test
username = root
; password = secret
changesetPath = changesets
; versionPrefix = v
可用的命令,也可以在运行不带任何选项的命令时看到,包括
./bin/dbChangeManager.php -h
./bin/dbChangeManager.php -s [-c db.ini]
./bin/dbChangeManager.php -t <version> [-a | -n | -i | -o <file>] [-c db.ini]
Specify an action:
-h Display this help message.
-s Display the current version of the database
-t version Specify new version to target upgrade to
Set a run mode:
-a Apply: Execute all changesets and tracking against the database immediately
-n No Op: Run as normal but perform no modifying operations against the database.
-i Interactive: Provide interactive confirmation prompts before applying changes.
-o file File: Output all SQL commands to a file which can be run separately.
Other options:
-c file Specify the db config file to use, defaults to db.ini
PHP使用
还可以直接从PHP脚本中调用该工具,通过实例化\DbVcs\ChangeManager对象及其依赖项。
$changeManager = new \DbVcs\ChangeManager(
'changesets',
new \PDO(
'mysql:host=localhost;dbname=test',
'root',
null, [
\PDO::ATTR_EMULATE_PREPARES => false,
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
]
),
new \DbVcs\Processor\NoOp(),
new \DbVcs\Output()
);
注意:应该扩展\DbVcs\Output类,以将结果发送到所需的位置和方式(日志文件、浏览器、数据库等)。