用 Git 和 Git hooks 解决多地开发时 MySQL 同步问题
用 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 进行授权