Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

mysql to mysql全量+增量 #209

Closed
glkappe opened this issue Sep 20, 2019 · 35 comments
Closed

mysql to mysql全量+增量 #209

glkappe opened this issue Sep 20, 2019 · 35 comments

Comments

@glkappe
Copy link

glkappe commented Sep 20, 2019

您好,
请问,最新版本支持mysql to mysql,只同步1张表吗。
[input]
type = "mysql"
mode = "replication"

[[input.config.table-configs]]
schema = "test"
table = "tbl1"

其他表我都不要,需要写过滤吗?

@Ryan-Git
Copy link
Collaborator

写一下路由,table config 可以不重复写。比如

[[output.config.routes]]
match-schema = "test"
match-table = "tbl1"
target-schema = "test_new"
target-table = "tbl_new"

@glkappe
Copy link
Author

glkappe commented Sep 23, 2019

感谢回复,@Ryan-Git
再请教一下,
1.[input.config.source]数据源可以配置多个吗。就像mysql的多源复制一样。
2.如果不能我无法启动两个gravity,因为8080被占用(报错如下:
{"level":"fatal","msg":"http error: listen tcp :8080: bind: address already in use","time":"2019-09-20T17:02:07+08:00"}
) 我该如何修改这个端口呢。(我是在弄一台服务器上启动的gravity)

@Ryan-Git
Copy link
Collaborator

Ryan-Git commented Sep 23, 2019

1、这个目前不行,需要起多个进程
2、./gravity -http-addr :8081

@glkappe
Copy link
Author

glkappe commented Sep 23, 2019

非常感谢回复!!! @Ryan-Git
./gracity -h竟然有提示,sorry,没有认真看。
还有一个问题想请教下:
1.我如何将目前增量的gtid向前设置一些呢,(ps:将当前gtid点4e21ade9-f503-ee17-7bf0-5235f9e704c:1-100 设置为 4e21ade9-f503-ee17-7bf0-f5235f9e704c:1-10)

@Ryan-Git
Copy link
Collaborator

https://github.com/moiot/gravity/blob/master/docs/2.0/03-inputs-en.md

#
# The starting position of incremental synchronization
# Empty by default. Synchronization starts from the current the GTID position.
# Optional
#
[input.config.start-position]
binlog-gtid = "abcd:1-123,egbws:1-234"

@glkappe
Copy link
Author

glkappe commented Sep 23, 2019

灰常感谢回复~ @Ryan-Git
再请教一个问题:
1.当我[[input.config.table-configs]]为多个的时候,[[output.config.routes]]也要为多个。
input部分可以写出列表形式 但是 out部分就不能写成列表形式。求解?
ps:

[[input.config.table-configs]]
schema = "a"
table = "aa"

[[input.config.table-configs]]
schema = "a"
table = "bb"


[[output.config.routes]]
match-schema = "a"
match-table = "aa"
target-schema = "a"
target-table = "aa"

[[output.config.routes]]
match-schema = "a"
match-table = "bb"
target-schema = "a"
target-table = "bb"

  1. 并且 该配置文件一旦被gravity启动就不能修改了。所以需要很多个配置文件。
    3.gravity在output机器上如何设置线程数,在回放replace into时产生了gap lock。所以想设置下。

期待回复

@Ryan-Git
Copy link
Collaborator

Ryan-Git commented Sep 23, 2019

1、没有特殊的需要input.config.table-configs可以不设,会从 routes 里找出需要同步的表;

routes 里的 target-schema/table 如果和原表一致可以不设或设为*;

match-schema 确实只能一个,match-table 可以多个的,详见 matcher

2、为什么启动就不能修改了,需要很多个配置文件?gravity 检测到修改会自动退出,需要手动启动。如果是用 docker/systemd 启动的话会自动重启。

3、 建议隔离级别设为 RC,写入时是全字段 replace into,RR 容易有死锁而且很慢。最大并发可按如下设置

[output.config.target]
max-open = 50
max-idle = 50 ##建议与 max-open 相同,特别是并发较大的情况下

@glkappe
Copy link
Author

glkappe commented Sep 26, 2019

感谢回复~@Ryan-Git

@Ryan-Git
Copy link
Collaborator

还有问题吗?

@glkappe glkappe closed this as completed Oct 10, 2019
@glkappe glkappe reopened this Oct 10, 2019
@glkappe
Copy link
Author

glkappe commented Oct 10, 2019

@Ryan-Git 哈哈

还有一个,如何整合两个gravity进程,同库不同表的那种,是不是当他们都达到出于增量同步模式的时候直接整合两个配置文件就可以。

@Ryan-Git
Copy link
Collaborator

先关第一个,等第二个的位点超过第一个的时候关掉第二个,然后把第二个的配置整合进第一个,再开始第一个。

@glkappe
Copy link
Author

glkappe commented Oct 11, 2019

@Ryan-Git thank you

the end!

@glkappe glkappe closed this as completed Oct 11, 2019
@glkappe
Copy link
Author

glkappe commented Oct 12, 2019

1、没有特殊的需要input.config.table-configs可以不设,会从 routes 里找出需要同步的表;

routes 里的 target-schema/table 如果和原表一致可以不设或设为*;

match-schema 确实只能一个,match-table 可以多个的,详见 matcher

2、为什么启动就不能修改了,需要很多个配置文件?gravity 检测到修改会自动退出,需要手动启动。如果是用 docker/systemd 启动的话会自动重启。

3、 建议隔离级别设为 RC,写入时是全字段 replace into,RR 容易有死锁而且很慢。最大并发可按如下设置

[output.config.target]
max-open = 50
max-idle = 50 ##建议与 max-open 相同,特别是并发较大的情况下

@Ryan-Git
您好针对您回答的第一个问题,有个疑问,我一个实力上有3个数据库那我match-schema只能写一个,所以我需要些三个配置文件?

@glkappe glkappe reopened this Oct 12, 2019
@Ryan-Git
Copy link
Collaborator

路由是数组,可以写三个。

@glkappe
Copy link
Author

glkappe commented Oct 14, 2019

路由是数组,可以写三个。

thank you !
我之前试验了,报错了。但是没注意看报错(错误是我表名写错了,我就以为多个[[output.config.routes]]是不允许的)。
总之,非常感谢回复!!!

祝好~

@glkappe glkappe closed this as completed Oct 14, 2019
@glkappe
Copy link
Author

glkappe commented Oct 17, 2019

@Ryan-Git 您好,请问个问题、

/metrics 返回的信息有相关的说明吗。我在源码看翻译过来有点理解的不好。

@glkappe
Copy link
Author

glkappe commented Oct 17, 2019

开启

@glkappe glkappe reopened this Oct 17, 2019
@Ryan-Git
Copy link
Collaborator

Ryan-Git commented Oct 17, 2019

文档暂时还没有,deploy/grafana 目录有整好的 dashboard。从外部主要关心第一行的两个水位线(watermark)指标。

水位线是两个时间点的差。终点是某行消息及其所有前序消息在目标端写入成功的时间点。起点两个指标有所不同,event time watermark 的起点是这行消息在 binlog 的落盘时间,即数据产生的时间;process time watermark 是gravity收到这行消息的时间,即处理开始时间。这两个延迟一般在几十到几百毫秒是正常范围。

后面的图分别是消息在各个组件的处理延迟,各组件处理消息的吞吐量,实际批量数,内部队列长度和分类型的输入输入吞吐,主要用来在延迟较高时分析延迟原因,碰到性能问题再单独贴图吧。

@glkappe
Copy link
Author

glkappe commented Oct 17, 2019

感谢回复,我们在复制过程中有一个问题,请教下。

gravity的一个进程在同步一个数据库的N个表时,一直出现这个状态。其他进程是没有问题的。请问什么问题。

image

@Ryan-Git
Copy link
Collaborator

有个消息卡住了导致位点一直没法推进,为什么卡住要具体看一下了

@glkappe
Copy link
Author

glkappe commented Oct 17, 2019

请问查看卡主消息的方法,方向是?

@Ryan-Git
Copy link
Collaborator

看看目标端有没有长时间执行的语句,排除卡在写入的地方。再看看源端 binlog (从当前保存的位点开始)都是些什么语句

@glkappe
Copy link
Author

glkappe commented Oct 17, 2019

好的 感谢感谢!

@glkappe
Copy link
Author

glkappe commented Oct 21, 2019

请问{"level":"info","msg":"QueryEvent: database: test, sql: create table a like test.aa","time":"2019-10-21T11:00:04+08:00"} {"file":"mysql.go","level":"info","line":205,"msg":"[output-mysql] ignore no router table ddl:create table a like test.aa","pipeline":"test","time":"2019-10-21T11:00:04+08:00"}

这种create table like 如何解决!
image

@Ryan-Git
Copy link
Collaborator

这个是支持的。看下路由配置

@glkappe
Copy link
Author

glkappe commented Oct 23, 2019

文档暂时还没有,deploy/grafana 目录有整好的 dashboard。从外部主要关心第一行的两个水位线(watermark)指标。

水位线是两个时间点的差。终点是某行消息及其所有前序消息在目标端写入成功的时间点。起点两个指标有所不同,event time watermark 的起点是这行消息在 binlog 的落盘时间,即数据产生的时间;process time watermark 是gravity收到这行消息的时间,即处理开始时间。这两个延迟一般在几十到几百毫秒是正常范围。

后面的图分别是消息在各个组件的处理延迟,各组件处理消息的吞吐量,实际批量数,内部队列长度和分类型的输入输入吞吐,主要用来在延迟较高时分析延迟原因,碰到性能问题再单独贴图吧。

@Ryan-Git
求问,各组件有版本要求吗
image

image

@Ryan-Git
Copy link
Collaborator

grafana 要 6.x 版本,5 -> 6 不兼容。

@glkappe
Copy link
Author

glkappe commented Oct 28, 2019

非常感谢,根据提示已经可以正常使用监控了

@Ryan-Git 再请教个问题,我们最近又出现({"level":"warning","msg":"[sliding_window] item not ack after 33.850111 seconds. core.Msg{ mysqlstream-317 dml update map[ID:204095] }","time":"2019-10-28T11:30:00+08:00"}

根据您上次的提示 我查询了源端的binlog,发现这个事务只有一条简单的update。可否还有其他判断方向和其他解决办法~~?非常感谢!

目标端mysql版本: mysql Ver 14.14 Distrib 5.7.25-28, for Linux (x86_64) using 6.0
gravity参数:max-open = 1 max-idle = 1 源端目标端都为 1

2.因为使用的是replace into的方式。所以除了设置目标端的事务隔离级别为RC还有其他避免的办法ma,比如设置max-open max-idle 的值?

@Ryan-Git
Copy link
Collaborator

max-open 和 max-idle 都开 20 左右试试

@glkappe
Copy link
Author

glkappe commented Oct 31, 2019

非常感谢~~
我通过设置sliding-window-size = 1024解决了目前的问题、
@Ryan-Git 问哈 rename table 问题咋解决,因为在线修改表结构的工具不可避免的使用rename table操作

@Ryan-Git
Copy link
Collaborator

rename 好加我找个时间先加了。不过 gh-ost/pt-osc 还需要完整的测试,还没时间搞 #193

@glkappe
Copy link
Author

glkappe commented Oct 31, 2019

rename 好加我找个时间先加了。不过 gh-ost/pt-osc 还需要完整的测试,还没时间搞 #193

@Ryan-Git 真的很感谢,辛苦~!!!我会持续关注的。

@glkappe
Copy link
Author

glkappe commented Oct 31, 2019

非常感谢~~
我通过设置sliding-window-size = 1024解决了目前的问题、
@Ryan-Git 问哈 rename table 问题咋解决,因为在线修改表结构的工具不可避免的使用rename table操作

对上面的小问题还有个小补充。
rename table a to b;
rename table a to ab , b to a ;建议都支持下。

@Ryan-Git
Copy link
Collaborator

@glkappe rename (#224) 合了

@glkappe
Copy link
Author

glkappe commented Nov 13, 2019

@Ryan-Git 您好,我升级了最新版本,
执行(git clone https://github.com/moiot/gravity.git cd gravity && make go mod tidy)
重新启动了gravity,除了这些还需要做什么吗

[root@ser4-45 bin]# ./gravity -V
Release Version (gravity): 0.0.1+git.341e94a
Git Commit Hash: 341e94a
Git Branch: master
UTC Build Time: 2019-11-13 07:40:44
[root@ser4-45 bin]#

我的配置文件:
[[output.config.routes]]
match-schema = "coon_a"
match-table = ["a*"]

下图是我测试rename table的截图:
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants