小编典典

使用Git跟踪mysql模式-一些问题

mysql

如果建议这样做?

我可以问一些有关如何跟踪mysql模式版本的git命令示例吗?

我们是否应该使用通常在应用程序根目录上使用的另一个存储库?

我应该使用一种叫做钩子的东西吗?

更新:

1) 我们导航到.git数据库所在的项目根目录。

2) 我们创建一个名为hooks的子文件夹。

3) 我们将类似以下内容放入名为db-commit的文件中:

   #!/bin/sh
   mysqldump -u DBUSER -pDBPASSWORD  DATABASE --no-data=true> SQLVersionControl/vc.sql
   git add SQLVersionControl/vc.sql
   exit 0

现在我们可以:

4) git commit -m

该提交将包括刚提交前已运行的mysql模式转储。

以上内容的来源在这里:http : //edmondscommerce.github.io/git/using-
git-to-track-db-schema-changes-with-git-
hook.html

如果这样做是可以接受的方式,我可以请耐心的人逐行并尽可能详细地评论一下,这是怎么回事:

#!/bin/sh
mysqldump -u DBUSER -pDBPASSWORD  DATABASE --no-data=true> SQLVersionControl/vc.sql
git add SQLVersionControl/vc.sql
exit 0

非常感谢。


阅读 211

收藏
2020-05-17

共1个答案

小编典典

假设您已经有一个git repo,请在shell脚本中执行以下操作或执行以下操作:

#!/bin/bash -e
# -e means exit if any command fails
DBHOST=dbhost.yourdomain.com
DBUSER=dbuser
DBPASS=dbpass # do this in a more secure fashion
DBNAME=dbname
GITREPO=/path/to/git/repo
cd $GITREPO
mysqldump -h $DBHOST -u $DBUSER -p$DBPASS -d $DBNAME > $GITREPO/schema.sql # the -d flag means "no data"
git add schema.sql
git commit -m "$DBNAME schema version $(`date`)"
git push # assuming you have a remote to push to

然后每天从cron作业或您拥有的内容中启动此脚本。

编辑:通过将脚本放入$ gitdir / hooks / pre- commit
(名称很重要)中,该脚本将在每次提交之前执行。这样,每次提交都可以捕获数据库模式的状态,这很有意义。如果您每次提交时都自动运行此sql脚本,则将删除数据库,这没有任何意义。

#!/bin/sh

此行指定它是一个shell脚本。

mysqldump -u DBUSER -pDBPASSWORD  DATABASE --no-data=true> SQLVersionControl/vc.sql

这与我上面的答案相同;仅从数据库中获取DDL并将其存储在文件中。

git add SQLVersionControl/vc.sql

这会将SQL文件添加到对存储库的每次提交中。

exit 0

这将成功退出脚本。这可能很危险。如果mysqldumpgit add失败,您可能会吹走想要保留的东西。

2020-05-17