用 Git 和 Git hooks 解决多地开发时 MySQL 同步问题
需求
我经常在家和公司的不同电脑上开发一个Web
项目, 代码托管可以用GitLab
或者GitHub
, 这解决了代码的多地同步问题, 但是MySQL
一直没发现一个好的方式来同步。 目前MySQL
多地同步的方案主要有以下几种
- 使用可远程连接的
MySQL
, 多地开发时直接连接这个数据库, 这个方案如果网速不好的话,就不合适 - A 地使用
mysqldump
导出sql
文件,发送给 B 地,B 地再恢复到MySQL
中,这个方案手动操作的话很麻烦,费时 - 使用
git
和git hooks
在提交和合并代码时自动相应的导出和恢复数据库, 这个方案自动化了MySQL
的导出和恢复工作,简直完美
条件准备
- mysql 5.6+, 修改
my.cnf
文件, 在[client]
下面添加1 2
user=你的 MySQL 账号 password=你的 MySQL 密码
以解决
MySQL5.6 Using a password on the command line interface can be insecure
的问题 - git
- 坚果云(用于差量同步导出的
sql
文件)
动手干
- 首先编辑
pre-commit
文件,这个钩子在代码commit
之前可以执行脚本1
[your editor] /path/to/your/repo/.git/hooks/pre-commit
- 写
pre-commit
钩子, 我们将要告诉系统去把我们的数据库dump
到坚果云里面1
mysqldump --skip-extended-insert demo > /Users/lee/我的坚果云/demo.sql
- 给
pre-commit
加上可执行权限1
chmod +x /path/to/your/repo/.git/hooks/pre-commit
- 现在我们来写
post-merge
钩子,我们将要告诉系统在git
合并代码的时候,把放在坚果云上的sql
文件恢复到本地的MySQL
数据库中1
[your editor] /path/to/your/repo/.git/hooks/post-merge
在
post-merge
文件里写上1
mysql demo < ~/我的坚果云/demo.sql
不要忘记给
post-merge
加上可执行权限啦1
chmod +x /path/to/your/repo/.git/hooks/post-merge
- 就是这样,现在当你
commit
和pull
代码时,MySQL
数据库可以自动的在多个地方同步啦
总结
使用坚果云来同步导出的sql
文件是因为坚果云在国内是唯一一家靠谱的云存储公司,其他国内的公司倒闭的倒闭,阉割的阉割,就是不让人省心 如果可以无障碍畅游网络的话,可以选择更好的Dropbox
享受生活吧
参考链接
本文由作者按照 CC BY 4.0 进行授权
Comments powered by Disqus.