zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    JavaScript中弧度和角度的转换
    HTML <meta> Attribute
    rel 属性<small>H5保留属性</small>
    React学习笔记
    React学习笔记
    jQuery插件制作
    jQuery ajax
    js数据存贮之数组与json
    列表与表格的一些学习
    18-10-16学习内容总结
  • 原文地址:https://www.cnblogs.com/DBABlog/p/12926944.html
Copyright © 2011-2022 走看看