我希望将mysql数据库(而不仅仅是模式)与Linux/BSD/Unix环境中的所有git提交和签出(可能是通过挂钩)“同步”。
当控制基于mysql的网站/应用程序和其它mysql应用程序的整个呈现+内容时是有用的,因为所述网站/应用程序的代码正在开发中,和/或控制整个网站。对于将小型的、相对静态的网站的“副本”(完全通过git)推送到各种测试/生产服务器(每个服务器都有单独的、独立的mysql服务器)可能很有用。
潜在的设计/工作流程: git提交转储mysql数据库,并将所述数据库(在.sql文件中)添加到提交中(可能通过预提交挂钩)。随后的git签出将所述.sql文件(从当前git分支)导入到数据库(可能通过提交后挂钩),因此与git提交/分支“同步”。这基本上是对整个数据库进行版本控制,将每个数据库版本同步到一个git提交。
如何实现这个目标?
发布于 2012-02-24 12:29:33
下面是我的WordPress数据库控制示例。
./dbase-baseurl-set.sh $baseurl需要告诉WordPress它在哪个主机上--不幸的是,WP不是模块化的。./dbase-baseurl-set.sh从工作的tree.git commit -n [...]来避免执行pre-commit挂钩。(首次添加/提交dabase-dump.sql.gz.)Ubuntu会话示例:
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的内容(请注意,为了最好的呈现,文件从原始文件进行了编辑,它不太可能引入错误,但仍有可能):
#!/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"https://stackoverflow.com/questions/8483451
复制相似问题