用SchemaSync自动进行MySql同步

2016-11-25 Frank 数据库

[TOC]

SchemaSync是一个开源的命令行工具,用于读取源DB和目标DB的schema,自动生成同步更新和回滚的sql,方便自动化的Schema同步。

网址:http://mmatuson.github.io/SchemaSync/

源码:https://github.com/mmatuson/SchemaSync

一、安装使用

  • 命令格式
schemasync [options] <source> <target>

# source/target 格式: mysql://user:pass@host:port/database

# 输出(sql脚本): <database>[_<tag>].YYYYMMDD.(patch revert)[_<version>].sql
  • 克隆代码
git clone git@github.com:mmatuson/SchemaSync.git
  • 执行安装(需要python的setuptools)
python setup.py install
  • 还需要安装 python-mySQLdb
apt-get install python-mysqldb

好了,现在可以用schemasync命令比较任意两个mysql DB实例,并自动生成两者之间同步和回滚的SQL语句:

schemasync mysql://root:pass@host1:3306/db_A mysql://root:pass@host2:3306/db_B

Migration scripts created for mysql://localhost/db_B

Patch Script: ~/db_B.20161125.patch.sql

Revert Script: ~/db_B.20161125.revert.sql

可以看到它自动产生了两个sql文件,patch.sql是更新的sql脚本,revert.sql则是回滚用的sql脚本。

二、自动同步shell脚本

mysqlha_sync2test.sh
#!/bin/bash
s_host=$1
d_host=$2
port=$3
db=$4
mysql_path="/usr/local/mysql-5.6.24"
sync_time=`date +"%H%M%S"`
sync_date=`date +"%Y%m%d"`
s_user='db_read_user'
s_pwd='123456'
d_user='root'
d_pwd='123456'

schemasync --tag="${sync_time}" --output-dir="/data/mysql_schemasync" --sync-comments mysql://${s_user}:${s_pwd}@${s_host}:${port}/${db} mysql://${d_user}:${d_pwd}@${d_host}:${port}/${db}
patch_file="/data/mysql_schemasync/${db}_${sync_time}.${sync_date}.patch.sql"
if [ -f $patch_file ]
then
    cd ${mysql_path}&&./bin/mysql -h${d_host} -P${port} -u${d_user} -p${d_pwd} $db < "${patch_file}"
else
    echo "结构一致,不需要Migration操作"
fi

另mark一款go语言写的同步工具:https://github.com/hidu/mysql-schema-sync

三、小结

有了这个工具,再配合jenkins,从此持续部署再也不是难事了。

四、参考资料

用SchemaSync自动进行MySql同步
MySQL结构自动同步工具-schemasync

标签: database

发表评论 登录

Top