文章

用 Git 和 Git hooks 解决多地开发时 MySQL 同步问题

需求

我经常在家和公司的不同电脑上开发一个Web项目, 代码托管可以用GitLab或者GitHub, 这解决了代码的多地同步问题, 但是MySQL一直没发现一个好的方式来同步。 目前MySQL多地同步的方案主要有以下几种

  • 使用可远程连接的MySQL, 多地开发时直接连接这个数据库, 这个方案如果网速不好的话,就不合适
  • A 地使用mysqldump导出sql文件,发送给 B 地,B 地再恢复到MySQL中,这个方案手动操作的话很麻烦,费时
  • 使用gitgit 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文件)

动手干

  1. 首先编辑pre-commit文件,这个钩子在代码commit之前可以执行脚本
    1
    
     [your editor] /path/to/your/repo/.git/hooks/pre-commit
    
  2. pre-commit钩子, 我们将要告诉系统去把我们的数据库dump到坚果云里面
    1
    
     mysqldump --skip-extended-insert demo > /Users/lee/我的坚果云/demo.sql
    
  3. pre-commit加上可执行权限
    1
    
     chmod +x /path/to/your/repo/.git/hooks/pre-commit
    
  4. 现在我们来写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
    
  5. 就是这样,现在当你commitpull代码时,MySQL数据库可以自动的在多个地方同步啦

总结

使用坚果云来同步导出的sql文件是因为坚果云在国内是唯一一家靠谱的云存储公司,其他国内的公司倒闭的倒闭,阉割的阉割,就是不让人省心 如果可以无障碍畅游网络的话,可以选择更好的Dropbox

享受生活吧

参考链接

本文由作者按照 CC BY 4.0 进行授权

Comments powered by Disqus.