MySQL-Syncer
MySQL-Syncer copied to clipboard
retry connect to master
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 不太清楚他们之间发生了什么。。
不是同一个端口,一个是连接
get dumpcmd failed 可能是配置文件错误,能否提供下配置文件,和master.info
请问哪里的master.info 文件 ,说明文档里面没有提及到阿?
同样是出现 [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 具体如何处理 望指教。
不是说不支持5.6吗?
我也越到了这个问题,这个问题貌似是文件rs_request_dump.c:140这个地方goto free。这个地方的p有可能是"\n\n,test.test,"。按照代码逻辑应该是"\n,test.test,"。这个地方的逻辑是否应该改一下?
多谢反馈
同样是出现 [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(抱拳)
同样是出现 [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时会出问题,这边是原因所在。