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

被折叠的 条评论
为什么被折叠?



