MySQL表结构自动同步工具mysql-schema-sync安装使用

mysql表结构自动同步工具

用于将 线上 数据库结构变化同步到 本地环境!
支持功能:

  1. 同步新表
  2. 同步字段 变动:新增、修改
  3. 同步索引 变动:新增、修改
  4. 支持预览(只对比不同步变动)
  5. 邮件通知变动结果
  6. 支持屏蔽更新表、字段、索引、外键
  7. 支持本地比线上额外多一些表、字段、索引、外键

    github地址:https://github.com/hidu/mysql-schema-sync

首先安装go 和 git环境

安装go语言环境

下载安装包
wget -c https://studygolang.com/dl/golang/go1.10.3.linux-amd64.tar.gz
解压到/usr/local
tar -C /usr/local -xzf go1.10.3.linux-amd64.tar.gz 
配置环境变量
vi /etc/profile
在文件末尾添加
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
生效环境变量
source /etc/profile
验证
go version
go version go1.10.3 linux/amd64
安装成功

安装git

yum -y install git

安装mysql-schema-sync

go get -u github.com/hidu/mysql-schema-sync

执行命令会在当前目录生成一个go/文件夹

以我的安装目录为例 我下载在了/root 目录下 ,

mysql-schema-sync的命令在/root/go/bin/下

配置文件config.json 和 自动运行脚本check.sh 在目录/root/go/src/github.com/hidu/mysql-schema-sync下

配置文件

一定要注意新添加的参数  -tables_ignore string  如果默认值的话工具会跳过所有表的检测 

解决办法可以写一个没有的表名 例如  -tables_ignore "x" 

{
     "source":"root:密码@(10.238.160.1:3306)/xiaodai",
     "dest":"root:密码@(10.238.160.2:3306)/xiaodai",
     "alter_ignore":{
        "tb1*":{
            "column":["aaa","a*"],
            "index":["aa"],
            "foreign":[]
        }
     },
     //  tables: table to check schema,default is all.eg :["order_*","goods"]
     "tables":[],
     //  tables_ignore: table to ignore check schema,default is Null :["order_*","goods"]
     "tables_ignore":["x"],
     "email":{
          "send_mail":false,
         "smtp_host":"smtp.163.com:25",
         "from":"xxx@163.com",
         "password":"xxx",
         "to":"xxx@163.com"
     }
}
[root@10-238-160-1 bin]# ./mysql-schema-sync --help
Usage of ./mysql-schema-sync:
  -conf string
    	json config file path (default "./config.json")
  -dest string
    	mysql dsn dest,eg test@(127.0.0.1:3306)/imis
  -drop
    	drop fields,index,foreign key
  -mail_to string
    	overwrite config's email.to
  -source string
    	mysql dsn source,eg: test@(10.10.0.1:3306)/test
    		when it is not empty ignore [-conf] param
  -sync
    	sync shcema change to dest db
  -tables string
    	table names to check
    		eg : product_base,order_*
  -tables_ignore string
    	table names to ignore check
    		eg : product_base,order_*

mysql schema sync tools 0.3
https://github.com/hidu/mysql-schema-sync/

参数解释:

# mysql-schema-sync -help  
  -conf string
        配置文件名称
  -dest string
        待同步的数据库 eg: test@(10.10.0.1:3306)/test_1
        该项不为空时,忽略读入 -conf参数项
  -drop
        是否对本地多出的字段和索引进行删除 默认否
  -source string
        mysql 同步源,eg test@(127.0.0.1:3306)/test_0
  -sync
        是否将修改同步到数据库中去,默认否
  -tables string
        待检查同步的数据库表,为空则是全部
        eg : product_base,order_*

实际使用

比对表结构并生成sql文件,不执行

./mysql-schema-sync -conf config.json > alter.sql

查看alter.sql 生成了一些添加列或者索引的语句,如下

[root@10-238-160-1 mysql-schema-sync]# head -50 alter.sql 

-- Table : fund_sign_config
-- Type  : alter
-- RealtionTables : 
-- SQL   : 
ALTER TABLE `fund_sign_config`
ADD `UPDATE_TIME` datetime NOT NULL,
ADD `DEL_FLAG` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否删除 0 未删除 1删除',
ADD `ID` bigint(20) NOT NULL AUTO_INCREMENT,
ADD `CHANNEL` varchar(20) DEFAULT NULL COMMENT '签约的通道 比如 BF',
ADD `CREATE_TIME` datetime NOT NULL,
ADD `PRIORITY` int(11) NOT NULL COMMENT '优先级 越大越优先',
ADD `FUND_CODE` varchar(20) NOT NULL COMMENT '资金方编码',
ADD `SIGN_TYPE` tinyint(4) DEFAULT NULL COMMENT '签约类型 1 主订单   2  白条   3 逾期',
ADD `PARTNER_ID` varchar(10) DEFAULT NULL COMMENT '商户号',
DROP PRIMARY KEY,
ADD PRIMARY KEY (`ID`);

从源库应用差异结构到目标库

./mysql-schema-sync -conf config.json -sync

可以利用check.sh 配置定时任务,因为我的测试环境较多 有32套 我自己改写了脚本如下 

配置定时任务,每周从线上往测试同步一次

#定时从线上同步表结构到测试环境 mysql-schema-sync
00  01  * * 7  cd /root/go/src/github.com/hidu/mysql-schema-sync  && bash check.sh >/dev/null 2>&1
原文地址:https://www.cnblogs.com/DBABlog/p/12926944.html