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