gravity 数据同步 MySQL-MySQL MySQL-TiDB

本文详细介绍如何使用Gravity工具进行MySQL到MySQL及TiDB的数据同步过程,包括环境准备、配置文件设置及启动步骤。涵盖GTID模式启用、账户权限设定、表结构创建及数据插入等关键环节。

gravity 安装部署:参考:https://blog.youkuaiyun.com/LiuHuan_study/article/details/97376015

一、MySQL 环境的准备

mysql 对源端 MySQL 的要求如下:

* 开启 gtid 模式的 binlog

* 创建 gravity 账户,并赋予 replication 相关权限,以及 _gravity 数据库的所有权限

* MySQL 源端、目标端相应的表需要创建好

 

MySQL 配置项如下所示

[mysqld]

server_id=4

log_bin=mysql-bin

enforce-gtid-consistency=ON

gtid-mode=ON

binlog_format=ROW

 

gravity 账户权限如下所示

CREATE USER _gravity IDENTIFIED BY 'xxx';

GRANT SELECT, RELOAD, LOCK TABLES, REPLICATION SLAVE, REPLICATION CLIENT, CREATE, INSERT, UPDATE, DELETE ON *.* TO '_gravity'@'%';

GRANT ALL PRIVILEGES ON _gravity.* TO '_gravity'@'%';

FLUSH PRIVILEGES;

也可以直接使用root用户

 

创建实验的数据库和表

#两台MySQL服务器上都要创建  ##或者MySQL和TiDB服务器上创建数据库和表

CREATE DATABASE test_gravity;

 

CREATE TABLE `test` (

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,

  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,

  `created_at` timestamp NULL DEFAULT NULL,

  PRIMARY KEY (`id`) USING BTREE

) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

 

##仅在MySQL主库上插入数据

INSERT INTO test VALUES(1,"111", "2019-07-26 12:00:00");

INSERT INTO test VALUES(2,"222", "2019-07-26 12:00:00");

 

二、 MySQL 到 MySQL 同步

创建如下配置文件 config.toml

name = "mysql2mysqlDemo"

# 内部用于保存位点、心跳等事项的库名,默认为 _gravity

internal-db-name = "_gravity"

 

#

# Input 插件的定义,此处定义使用 mysql

#

[input]

type = "mysql"

mode = "replication"#先全量同步,再增量同步

[input.config.source]

host = "mysql master IP"

username = "root"

password = "password"

port = 3306

 

#

# Output 插件的定义,此处使用 mysql

#

[output]

type = "mysql"

[output.config.target]

host = "mysql slave IP"

username = "root"

password = "password"

port = 3306

 

# 路由规则的定义

[[output.config.routes]]

match-schema = "test_gravity"

match-table = "test"

target-schema = "test_gravity"

target-table = "test"

#目标数据库和源数据库名可以不相同

#表明也可不同

 

三、启动 gravity

./bin/gravity  --config modfile/mysql2mysql.toml >> result.log &

##gravity的进程会一直跑

##gravity启动后会先同步主库中的数据,同步完成后等待主库跟新,此时在主库中插入数据,从库中也会出现数据

 gravity启动成功后,会在MySQL主库创建_gravity数据库,和表gravity_positions来记录同步的位置,所以当你关闭gravity进程后,做同步到TiDB的实验室时,要先把_gravity数据库删除,否则会从数据库_gravity中记录的启动开始同步数据。

 

四、MySQL 到 TiDB同步

只需把config.toml修改为:

# name 必填

name = "mysql2tidbDemo"

 

# 内部用于保存位点、心跳等事项的库名,默认为 _gravity

internal-db-name = "_gravity"

 

#

# Input 插件的定义,此处定义使用 mysql

#

[input]

type = "mysql"

mode = "replication"

[input.config.source]

host = "mysql server IP"

username = "root"

password = "password"

port = 3306

 

#

# Output 插件的定义,此处使用 mysql

#

[output]

type = "mysql"

[output.config.target]

host = "127.0.0.1"

username = "root"

password = "password"

port = 4000

 

# 路由规则的定义

[[output.config.routes]]

match-schema = "test_gravity"#源目标数据库

match-table = "test"         #源目标表

target-schema = "test_gravity"  #目标数据库

target-table = "test"           #目标表

启动命令相同

官方文档介绍:https://github.com/moiot/gravity

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值