mysql-schema-sync表结构同步

阎建中
2023-12-01

非主从同步情况下,很多方式只能同步数据,而源库表结构一旦被修改,被同步端将无法同步数据

mysql-schema-sync 用于实现表结构同步

github地址:GitHub - hidu/mysql-schema-sync: mysql表结构自动同步工具(目前只支持字段、索引的同步,分区等高级功能暂不支持)

centos7 安装 mysql-schema-sync

需要 go 环境支持

1、安装go

下载解压
wget -c https://studygolang.com/dl/golang/go1.13.3.linux-amd64.tar.gz
tar -zxvf go1.13.3.linux-amd64.tar.gz  -C /usr/local

添加环境变量
# vim /etc/profile
#golang config
#export GO111MODULE=on
export GOROOT=/usr/local/go 
export GOPATH=/home/hyh/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

加载环境
# source /etc/profile

验证
# go version
go version go1.13.3 linux/amd64

2、安装mysql-schema-sync

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

下载会会在当前目录下出现一个 go 目录

将该目录移动到/usr/local/mysql-schema-sync目录下
# mv go /usr/local/mysql-schema-sync

# ll /usr/local/mysql-schema-sync
total 4
drwxr-xr-x 5 root root 4096 Jul 11 11:51 go

执行文件

/usr/local/mysql-schema-sync/go/bin/mysql-schema-sync

3、配置介绍

创建存放配置文件目录
# mkdir /usr/local/mysql-schema-sync/go/conf

复制模板到conf下,找不到的话就自己创建(下面这个地址可能会变化,自己找找吧)
# cp /root/go/pkg/mod/github.com/hidu/mysql-schema-sync@v0.0.0-20220317051126-20f526d87e88/config.json /usr/local/mysql-schema-sync/go/conf
自己创建
[root@VM-0-30-centos conf]# cat config.json 
{
     "source":"root:xxxxxx@(192.168.0.15:3306)/lxq_test",
     "dest":"root:xxxxxx@(172.30.0.30:16673)/lxq_test",
     "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"
     }
}

 

貌似一个配置文件只能配置一个库,不过你可以通过创建多个配置文件来实现多个库的同步

配置解释

source

        源库的用户名、密码、ip、端口、库名

dest

        目标库的用户名、密码、ip、端口、库名

alert_ignore

        同步时忽略的字段和索引,没有的话就瞎填,反正找不到也没事

tables

        空表示默认同步所有表,也可以指定表

tables_ignore

        默认会跳过所有表的检测,所以可以填写一个不存在的表,就会检查所有表了

4、基本操作

对比表结构,并生成表结构同步脚本,但不会在目标库中执行该同步,做测试或者需要生成脚本可以用此命令

/usr/local/mysql-schema-sync/go/bin/mysql-schema-sync -conf config.json > alter.sql

对比表结构,并在目标库中执行同步脚本

/usr/local/mysql-schema-sync/go/bin/mysql-schema-sync -conf config.json -sync 

5、计划任务

# vim check.sh

#!/bin/bash
/usr/local/mysql-schema-sync/go/bin/mysql-schema-sync -conf /usr/local/mysql-schema-sync/go/conf/config.json -sync
30 * * * *  cd /your/path/xxx/ && bash check.sh >/dev/null 2>&1

 

 

 类似资料: