码迷,mamicode.com
首页 > 数据库 > 详细

MySQL结构自动同步工具-schemasync

时间:2015-07-02 19:41:02      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:mysql结构同步   schemasync中文乱码   

背景:

    最近项目处于开发期,基本每天都有测试版本提交测试,为保证测试顺利进行,测试库也需要进行同步,一开始是直接拿开发库的备份库进行恢复,覆盖掉测试库,但是随着测试的进行,测试人员开始反馈他们制造的测试数据没有了,就改变了数据库同步方法,使用navicat的结构同步功能进行结构同步,但是每次都点来点去的实在太麻烦,更改回滚是个麻烦事而且没有技术含量。无意间寻觅到一个工具schemasync,可以对比开发库与测试库的差别生成patch和revert两个sql文件,其中path是正向更改,revert是更改后的回滚脚本,自此同步数据库结构只需要潇洒的敲一个命令执行一个脚本,so easy。

 

安装要求:

  • Python 2.4,2.5,2.6其他版本没试过,我用的是2.6

  • MySQL要求是5.0以上,我使用的事Percona5.6

  • MySQLdb,1.2.1p2以上

  • SchemaObject 0.5.3以上,安装时会自动安装,不用管

安装:

  下载wget http://www.schemasync.org/downloads/SchemaSync-0.9.2.tar.gz

   tar -zxvf tar -zxvf SchemaSync-0.9.2.tar.gz

   cd SchemaSync-0.9.2

   sudo python setup.py install

使用方法:

   

Usage:

                schemasync [options] <source> <target>

                source/target format: mysql://user:pass@host:port/database


                        A MySQL Schema Synchronization Utility


Options:

  -h, --help            show this help message and exit

  -V, --version         show version and exit.

  -r, --revision      如果要生成的文件名称已经存在了,启用这个参数会给新文件加个序列号

  -a, --sync-auto-inc   同步自增长值,一般都不需要

  -c, --sync-comments   同步备注,备注对于后期数据库维护比较重要,建议启用

  --tag=TAG         为生成的文件打tag,会在文件名中体现

  --output-directory=OUTPUT_DIRECTORY

                        生成patch和revert文件的路径,必须是绝对路径,默认为当前                  工作路径

  --log-directory=LOG_DIRECTORY  设置日志文件的路径,必须是绝对路径,默认是output-                      directory,文件名为schemasync.log

                        

选项都很简单,没什么值得需要强调的。

为了后期维护方便,我们要求每个字段都有注释,但是用英文建表的人痛苦,看的人也不舒服,就都是英文,那么问题就来了,使用--sync-comments参数中文会乱码,导致字段备注不可用了,究其根源是python脚本没有指定使用utf8字符集,导致生成的patch文件为ansi编码,简单粗暴的解决办法就是把下载下来的源码包中的py文件全部指定utf8字符集,即如下文件

[root@vm-template-centos10022 SchemaSync-0.9.2]# find ./ -name ‘*.py‘

./ez_setup.py

./setup.py

./schemasync/schemasync.py

./schemasync/syncdb.py

./schemasync/utils.py

./schemasync/__init__.py

均添加#-*- coding:utf-8 -*-

每次都指定密码也比较麻烦,自己写了一个shell脚本,每次只需要指定源ip,目标ip,端口号,库名就可以

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


本文出自 “wolf_zh” 博客,请务必保留此出处http://wolfzh.blog.51cto.com/3723286/1670224

MySQL结构自动同步工具-schemasync

标签:mysql结构同步   schemasync中文乱码   

原文地址:http://wolfzh.blog.51cto.com/3723286/1670224

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!