Giả sử bạn đã có git repo, hãy làm như sau trong shell script hoặc bất cứ thứ gì:
#!/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
Sau đó, bắt đầu tập lệnh này hàng ngày từ một công việc cron hoặc những gì có bạn.
CHỈNH SỬA:Bằng cách đặt tập lệnh vào $ gitdir / hooks / pre -commit (tên quan trọng), tập lệnh sẽ được thực thi trước mỗi lần cam kết. Bằng cách này, trạng thái của lược đồ DB được ghi lại cho mỗi lần cam kết, điều này có ý nghĩa. Nếu bạn tự động chạy tập lệnh sql này mỗi khi bạn cam kết, bạn sẽ phá hủy cơ sở dữ liệu của mình, điều này không có ý nghĩa.
#!/bin/sh
Dòng này chỉ định rằng đó là một tập lệnh shell.
mysqldump -u DBUSER -pDBPASSWORD DATABASE --no-data=true> SQLVersionControl/vc.sql
Điều này cũng giống như trong câu trả lời của tôi ở trên; chỉ lấy DDL từ cơ sở dữ liệu và lưu trữ trong tệp.
git add SQLVersionControl/vc.sql
Điều này thêm tệp SQL vào mọi cam kết được thực hiện cho kho lưu trữ của bạn.
exit 0
Điều này sẽ thoát khỏi tập lệnh thành công. Điều này có thể nguy hiểm. Nếu mysqldump
hoặc git add
không thành công, bạn có thể thổi bay thứ mà bạn muốn giữ lại.