首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何“同步”/修订-控制整个mysql数据库的所有git提交和签出?

问如何“同步”/修订-控制整个mysql数据库的所有git提交和签出?
EN

Stack Overflow用户
提问于 2011-12-13 09:55:17
回答 1查看 2.3K关注 0票数 3

我希望将mysql数据库(而不仅仅是模式)与Linux/BSD/Unix环境中的所有git提交和签出(可能是通过挂钩)“同步”。

当控制基于mysql的网站/应用程序和其它mysql应用程序的整个呈现+内容时是有用的,因为所述网站/应用程序的代码正在开发中,和/或控制整个网站。对于将小型的、相对静态的网站的“副本”(完全通过git)推送到各种测试/生产服务器(每个服务器都有单独的、独立的mysql服务器)可能很有用。

潜在的设计/工作流程: git提交转储mysql数据库,并将所述数据库(在.sql文件中)添加到提交中(可能通过预提交挂钩)。随后的git签出将所述.sql文件(从当前git分支)导入到数据库(可能通过提交后挂钩),因此与git提交/分支“同步”。这基本上是对整个数据库进行版本控制,将每个数据库版本同步到一个git提交。

如何实现这个目标?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-24 12:29:33

下面是我的WordPress数据库控制示例。

  • WordPress-specific部件。./dbase-baseurl-set.sh $baseurl需要告诉WordPress它在哪个主机上--不幸的是,WP不是模块化的。./dbase-baseurl-set.sh从工作的tree.
  • git钩子环境变量的顶层运行。我找到的最好的文档是在git钩子中回答“什么是工作目录”和“设置了哪些环境变量”:Mark's Blog: "Missing git hooks documentation."
  • Bybass预提交。使用git commit -n [...]来避免执行pre-commit挂钩。(首次添加/提交dabase-dump.sql.gz.)
  • Optional.时可能非常有用git-control the hooks.

Ubuntu会话示例:

代码语言:javascript
复制
root@host /var/www/.git/hooks# ls -lF
total 12
-rwxr-xr-x 1 root webmasters  218 2012-02-23 22:06 post-checkout*
lrwxrwxrwx 1 root webmasters   13 2011-12-13 21:45 post-merge -> post-checkout*
-rwxr-xr-x 1 root webmasters  357 2012-02-23 22:06 pre-commit*
drwxr-sr-x 2 root webmasters 4096 2011-12-13 10:19 samples/
root@host /var/www/.git/hooks# 
root@host /var/www/.git/hooks# cat pre-commit 
#!/bin/bash
set -e
# run with '--no-data=true' to capture only schema
# mysqldump -umysqluser -pmysqlpasswd wordpressdbase --no-data=true | gzip > wordpressdbase-schema.sql.gz
echo -n 'dumping and compressing wordpress database... '
mysqldump -umysqluser -pmysqlpasswd wordpressdbase | gzip > wordpressdbase.sql.gz
git add wordpressdbase.sql.gz
echo 'done'
root@host /var/www/.git/hooks#
root@host /var/www/.git/hooks# cat post-checkout 
#!/bin/bash
set -e
baseurl="http://host.domain.com"
echo -n 'loading wordpress database... '
gunzip -c wordpressdbase.sql.gz | mysql -umysqluser -pmysqlpasswd wordpressdbase
echo 'done'
./dbase-baseurl-set.sh $baseurl
root@host /var/www/.git/hooks#
root@host /var/www/.git/hooks# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 10.04.3 LTS
Release:    10.04
Codename:   lucid
root@host /var/www/.git/hooks# 
root@host /var/www/.git/hooks# git --version
git version 1.7.0.4
root@host /var/www/.git/hooks#

dbase-baseurl-set.sh的内容(请注意,为了最好的呈现,文件从原始文件进行了编辑,它不太可能引入错误,但仍有可能):

代码语言:javascript
复制
#!/bin/bash
# Reset the WordPress "base" URL.  Useful in a git hook
set -e
echo -n "setting WordPress baseurl to '$1'... "printf -v sqlstr 'SELECT * FROM wp_options WHERE option_name = "home" OR option_name = "siteurl"; UPDATE wp_options SET option_v
alue = "%s" WHERE option_name = "home" OR option_name = "siteurl"' "$1"
echo "$sqlstr" | mysql -umysqluser -pmysqlpasswd wordpressdbase > /dev/null
echo "done"
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8483451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档