Как "синхронизировать" / контролировать ревизии всей базы данных mysql со всеми коммитами и проверками git? - PullRequest
2 голосов
/ 13 декабря 2011

Я хочу "синхронизировать" базу данных mysql (а не только схему) со всеми коммитами и извлечениями git (возможно, через ловушки) в среде Linux / BSD / Unix.

[Полезно при управлении всемпрезентация + контент веб-сайта / приложения на базе mysql и других приложений mysql, так как код для указанных сайтов / приложений находится в стадии разработки и / или для «контроля над оборотом» всего веб-сайта.Предположительно полезно для отправки «копий» (исключительно через git) небольших, относительно статичных веб-сайтов на различные тестовые / производственные серверы, каждый из которых имеет отдельные независимые серверы mysql.]

Потенциальный дизайн / рабочий процесс: дампы git commitбаза данных mysql и добавляет указанную базу данных (в файле .sql) к коммиту (возможно, через ловушку перед фиксацией).Последующая проверка git импортирует указанный файл .sql (из текущей ветви git) в базу данных (возможно, через ловушку после фиксации), следовательно, «синхронизируется» с git commit / branch.Это, в основном, rev контролирует всю базу данных, синхронизируя каждую версию базы данных с git commit.

Как это реализовать?

1 Ответ

3 голосов
/ 24 февраля 2012

Мой WordPress -database-control приведен ниже.

  • Детали для WordPress . ./dbase-baseurl-set.sh $baseurl необходимо указать WordPress, на каком хосте он находится - WP, к сожалению, не такой модульный. ./dbase-baseurl-set.sh работает с верхнего уровня рабочего дерева.
  • git hooks env vars . Самый лучший документ, который я нашел, чтобы ответить «что такое рабочий каталог» и «какие переменные среды установлены» в git hooks: Блог Марка: «Отсутствует документация по git hooks».
  • Предварительная фиксация Bybass . Используйте git commit -n [...], чтобы избежать выполнения pre-commit hook. (Потенциально полезно при первом добавлении / коммите dabase-dump.sql.gz.)
  • Дополнительно . git-control the hooks .

Пример сеанса 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"
...