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

retry connect to master #14

Open
miuc opened this issue Nov 24, 2014 · 9 comments
Open

retry connect to master #14

miuc opened this issue Nov 24, 2014 · 9 comments

Comments

@miuc
Copy link

miuc commented Nov 24, 2014

mast slave 启动成功后,slave 日志里一直显示:
<thread : 140337872852736> retry connect to master

有两个地方不太清楚:

  • 我看到slave和master的配置里都是监听1919端口,这是为什么?应该是不一样的吗,如果不一样的话,slave 又是从哪里知道master的端口。
  • 本地telnet 127.0.0.1 1919 端口成功,但是master log一直显示:
    [ERROR] <thread : 139641752966912> get dumpcmd failed
    不太清楚他们之间发生了什么。。
@Terry-Mao
Copy link
Owner

不是同一个端口,一个是连接

@Terry-Mao
Copy link
Owner

get dumpcmd failed 可能是配置文件错误,能否提供下配置文件,和master.info

@jucehrx
Copy link

jucehrx commented Mar 23, 2015

请问哪里的master.info 文件 ,说明文档里面没有提及到阿?

@jucehrx
Copy link

jucehrx commented Mar 23, 2015

同样是出现
[ERROR] get dumpcmd failed
将 rs_request_dump.c 中的

/* get filter tables */
if((p = rs_strchr(p, '\n')) == NULL) {
    goto free;
}

//在这里打印p
if(*(++p) != ',') {
goto free;
}

标志位置打印p值出来,发现前面带多了个换行符,改为

/* get filter tables */
if((p = rs_strchr(p, '\n')) == NULL) {
    goto free;
}
++p;   //将换行符略过
rs_log_error(RS_LOG_ERR, 0, "get slave.info before2");
if(*(++p) != ',') {
    goto free;
}

程序可以运行;之后继续测试 ,出现

2015-03-23 15:06:31 [ERROR] <thread : 139845352974080> unknown event, 30
2015-03-23 15:06:31 [INFO] <thread : 139845352974080> open a new binlog = /var/lib/mysql/binlog/mysql-bin.000003
2015-03-23 15:06:31 [DEBUG] <thread : 139845352974080>
========== event header =============
server id : 1
event type : 16
event length : 31
event next position : 1146
dump position : 1146
data length : 12

2015-03-23 15:06:31 [DEBUG] <thread : 139845352974080>
========== XID_EVENT ==============
2015-03-23 15:06:31 [DEBUG] <thread : 139845352974080>
tran : 0
tran id : 39
2015-03-23 15:06:31 [DEBUG] <thread : 139845352974080> send dump file = /var/lib/mysql/binlog/mysql-bin.000003, send dump pos = 1146, tran = 0, sent = 0, flush = 0

这样的错误,定位代码,应该是rs_read_binlog.c 里面对mysql的binlog解释出了问题:

    /* HEADER */
    if((r = rs_binlog_header_handler(rd)) != RS_OK) {
        goto free;
    }    

    idx = rd->binlog_info.t - '\0';

    if(idx == 0 || idx > RS_BINLOG_EVENT_NUM) {  // idx值为30 大于 27
        rs_log_error(RS_LOG_ERR, 0, "unknown event, %u", idx);
        goto free;
    }

我的环境是fedora20 mysql version 5.6.23
具体如何处理 望指教。

@xushan
Copy link

xushan commented Aug 21, 2015

不是说不支持5.6吗?

@chaohona
Copy link

我也越到了这个问题,这个问题貌似是文件rs_request_dump.c:140这个地方goto free。这个地方的p有可能是"\n\n,test.test,"。按照代码逻辑应该是"\n,test.test,"。这个地方的逻辑是否应该改一下?

@Terry-Mao
Copy link
Owner

多谢反馈

@GaoZiqiang
Copy link

同样是出现
[ERROR] get dumpcmd failed
将 rs_request_dump.c 中的

/* get filter tables */
if((p = rs_strchr(p, '\n')) == NULL) {
    goto free;
}

//在这里打印p
if(*(++p) != ',') {
goto free;
}

标志位置打印p值出来,发现前面带多了个换行符,改为

/* get filter tables */
if((p = rs_strchr(p, '\n')) == NULL) {
    goto free;
}
++p;   //将换行符略过
rs_log_error(RS_LOG_ERR, 0, "get slave.info before2");
if(*(++p) != ',') {
    goto free;
}

程序可以运行;之后继续测试 ,出现

2015-03-23 15:06:31 [ERROR] <thread : 139845352974080> unknown event, 30
2015-03-23 15:06:31 [INFO] <thread : 139845352974080> open a new binlog = /var/lib/mysql/binlog/mysql-bin.000003
2015-03-23 15:06:31 [DEBUG] <thread : 139845352974080>
========== event header =============
server id : 1
event type : 16
event length : 31
event next position : 1146
dump position : 1146
data length : 12

2015-03-23 15:06:31 [DEBUG] <thread : 139845352974080>
========== XID_EVENT ==============
2015-03-23 15:06:31 [DEBUG] <thread : 139845352974080>
tran : 0
tran id : 39
2015-03-23 15:06:31 [DEBUG] <thread : 139845352974080> send dump file = /var/lib/mysql/binlog/mysql-bin.000003, send dump pos = 1146, tran = 0, sent = 0, flush = 0

这样的错误,定位代码,应该是rs_read_binlog.c 里面对mysql的binlog解释出了问题:

    /* HEADER */
    if((r = rs_binlog_header_handler(rd)) != RS_OK) {
        goto free;
    }    

    idx = rd->binlog_info.t - '\0';

    if(idx == 0 || idx > RS_BINLOG_EVENT_NUM) {  // idx值为30 大于 27
        rs_log_error(RS_LOG_ERR, 0, "unknown event, %u", idx);
        goto free;
    }

我的环境是fedora20 mysql version 5.6.23
具体如何处理 望指教。

你好,想请教一个这个问题,请移步:https://github.com/Terry-Mao/MySQL-Syncer/issues/23(抱拳)

@GaoZiqiang
Copy link

同样是出现
[ERROR] get dumpcmd failed
将 rs_request_dump.c 中的

/* get filter tables */
if((p = rs_strchr(p, '\n')) == NULL) {
    goto free;
}

//在这里打印p
if(*(++p) != ',') {
goto free;
}

标志位置打印p值出来,发现前面带多了个换行符,改为

/* get filter tables */
if((p = rs_strchr(p, '\n')) == NULL) {
    goto free;
}
++p;   //将换行符略过
rs_log_error(RS_LOG_ERR, 0, "get slave.info before2");
if(*(++p) != ',') {
    goto free;
}

程序可以运行;之后继续测试 ,出现

2015-03-23 15:06:31 [ERROR] <thread : 139845352974080> unknown event, 30
2015-03-23 15:06:31 [INFO] <thread : 139845352974080> open a new binlog = /var/lib/mysql/binlog/mysql-bin.000003
2015-03-23 15:06:31 [DEBUG] <thread : 139845352974080>
========== event header =============
server id : 1
event type : 16
event length : 31
event next position : 1146
dump position : 1146
data length : 12

2015-03-23 15:06:31 [DEBUG] <thread : 139845352974080>
========== XID_EVENT ==============
2015-03-23 15:06:31 [DEBUG] <thread : 139845352974080>
tran : 0
tran id : 39
2015-03-23 15:06:31 [DEBUG] <thread : 139845352974080> send dump file = /var/lib/mysql/binlog/mysql-bin.000003, send dump pos = 1146, tran = 0, sent = 0, flush = 0

这样的错误,定位代码,应该是rs_read_binlog.c 里面对mysql的binlog解释出了问题:

    /* HEADER */
    if((r = rs_binlog_header_handler(rd)) != RS_OK) {
        goto free;
    }    

    idx = rd->binlog_info.t - '\0';

    if(idx == 0 || idx > RS_BINLOG_EVENT_NUM) {  // idx值为30 大于 27
        rs_log_error(RS_LOG_ERR, 0, "unknown event, %u", idx);
        goto free;
    }

我的环境是fedora20 mysql version 5.6.23
具体如何处理 望指教。

原因出在mysql的版本上,作者的MySQL版本是5.6以下的。5.5和5.5以上的MySQL的事件类型差别很大,以mysql5.7为例,事件id为30时,表示WRITE写事件,而作者源码中事件类型最多只有27种,所以当事件类型大于27时会出问题,这边是原因所在。

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

6 participants