非主从同步情况下,很多方式只能同步数据,而源库表结构一旦被修改,被同步端将无法同步数据
mysql-schema-sync 用于实现表结构同步
github地址:GitHub - hidu/mysql-schema-sync: mysql表结构自动同步工具(目前只支持字段、索引的同步,分区等高级功能暂不支持)
centos7 安装 mysql-schema-sync
需要 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
下载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
创建存放配置文件目录
# 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
默认会跳过所有表的检测,所以可以填写一个不存在的表,就会检查所有表了
对比表结构,并生成表结构同步脚本,但不会在目标库中执行该同步,做测试或者需要生成脚本可以用此命令
/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
# 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