Need help with mysql-schema-sync?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

hidu
579 Stars 222 Forks MIT License 52 Commits 16 Opened issues

Description

mysql表结构自动同步工具(目前只支持字段、索引的同步,分区等高级功能暂不支持)

Services available

!
?

Need anything else?

Contributors list

# 132,967
Go
MySQL
redis-c...
Redis
7 commits
# 260,119
Go
Shell
MySQL
4 commits
# 1,584
image-f...
assembl...
netfram...
residua...
1 commit
# 36,443
Koa
Webpack
Express
cli-uti...
1 commit

mysql-schema-sync

mysql表结构自动同步工具

用于将

线上
数据库结构变化同步到
本地环境
!
支持功能:
1. 同步新表
2. 同步字段 变动:新增、修改
3. 同步索引 变动:新增、修改
4. 支持预览(只对比不同步变动)
5. 邮件通知变动结果
6. 支持屏蔽更新表、字段、索引、外键
7. 支持本地比线上额外多一些表、字段、索引、外键 8. 在该项目的基础上修复了比对过程中遇到分区表会终止后续操作的问题,支持分区表,对于分区表,会同步除了分区以外的变更。 9. 支持每条ddl只会执行单个的修改,目的兼容tidb ddl问题 Unsupported multi schema change,通过singleschemachange字段控制,默认关闭。

安装

go install github.com/hidu/[email protected]

配置

参考 默认配置文件 config.json 配置同步源、目的地址。
修改邮件接收人 当运行失败或者有表结构变化的时候你可以收到邮件通知。

默认情况不会对多出的表、字段、索引、外键删除。若需要删除字段、索引、外键 可以使用 -drop 参数。

配置示例(config.json):

{
      //source:同步源
      "source":"test:[email protected](127.0.0.1:3306)/test_0",
      //dest:待同步的数据库
      "dest":"test:[email protected](127.0.0.1:3306)/test_1",
      //alter_ignore: 同步时忽略的字段和索引
      "alter_ignore":{
        "tb1*":{
            "column":["aaa","a*"],
            "index":["aa"],
            "foreign":[]
        }
      },
      //  tables: table to check schema,default is all.eg :["order_*","goods"]
      "tables":[],
      //有变动或者失败时,邮件接收人
      "email":{
          "send_mail":false,
         "smtp_host":"smtp.163.com:25",
         "from":"[email protected]",
         "password":"xxx",
         "to":"[email protected]"
      }
}

json配置项说明

source: 数据库同步源
dest: 待同步的数据库
tables: 数组,配置需要同步的表,为空则是不限制,eg: ["goods","order*"]
alter
ignore: 忽略修改的配置,表名为tableName,可以配置 column 和 index,支持通配符 *
email : 同步完成后发送邮件通知信息
singleschemachange:是否每个ddl只执行单个修改

运行

直接运行

mysql-schema-sync -conf mydb_conf.json -sync

预览并生成变更sql

mysql-schema-sync -conf mydb_conf.json 2>/dev/null >db_alter.sql

使用shell调度

bash check.sh

每个json文件配置一个目的数据库,check.sh脚本会依次运行每份配置。 log存储在当前的log目录中。

自动定时运行

添加crontab 任务

30 * * * * cd /your/path/xxx/ && bash check.sh >/dev/null 2>&1

参数说明

mysql-schema-sync [-conf] [-dest] [-source] [-sync] [-drop]

说明:



mysql-schema-sync -help

-conf string 配置文件名称 -dest string 待同步的数据库 eg: [email protected](10.10.0.1:3306)/test1 该项不为空时,忽略读入 -conf参数项 -drop 是否对本地多出的字段和索引进行删除 默认否 -source string mysql 同步源,eg [email protected](127.0.0.1:3306)/test0 -sync 是否将修改同步到数据库中去,默认否 -tables string 待检查同步的数据库表,为空则是全部 eg : productbase,order* -singleschemachange 生成sql ddl语言每条命令是否只会进行单个修改操作,默认否

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.