pingcap / tidb-binlog

A tool used to collect and merge tidb's binlog for real-time data backup and synchronization.
Apache License 2.0
292 stars 131 forks source link

binlog ddl parse error #955

Closed elvizlai closed 4 years ago

elvizlai commented 4 years ago

Bug Report

  1. What did you do? Run sql script using DataGrip

  2. What did you expect to see? reparo resolve log success.

  3. What did you see instead? reparo resolve log failed, because of parse ddl failed.

"filter binlog failed: parse ddl: use xyz-abc; /* ApplicationName=DataGrip 2020.1 */ CREATE TABLE `medicine`  (\r\n  `id` int(11) NOT NULL AUTO_INCREMENT,\r\n  `product_pzwh` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '批准文号',\r\n  `product_format` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '规格',\r\n  `product_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '名称',\r\n  `product_manufacturer` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '生产企业',\r\n  `product_barcode` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '条形码',\r\n  `product_form` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '剂型',\r\n  `product_wholesale_price` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '批发价格',\r\n  `product_retail_price` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '零售价格',\r\n  `create_time` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '创建时间',\r\n  PRIMARY KEY (`id`) USING BTREE,\r\n  INDEX `idx_barCode`(`product_barcode`) USING BTREE\r\n) ENGINE = InnoDB AUTO_INCREMENT = 1030333 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; failed: line 1 column 12 near \"-prod; /* ApplicationName=DataGrip 2020.1 */ CREATE TABLE `medicine`  (\r\n  `id` int(11) NOT NULL AUTO_INCREMENT,\r\n  `product_pzwh` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '批准文号',\r\n  `product_format` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '规格',\r\n  `product_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '名称',\r\n  `product_manufacturer` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '生产企业',\r\n  `product_barcode` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '条形码',\r\n  `product_form` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '剂型',\r\n  `product_wholesale_price` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '批发价格',\r\n  `product_retail_price` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '零售价格',\r\n  `create_time` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '创建时间',\r\n  PRIMARY KEY (`id`) USING BTREE,\r\n  INDEX `idx_barCode`(`product_barcode`) USING BTREE\r\n) ENGINE = InnoDB AUTO_INCREMENT = 1030333 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;\" "

CAUTION: for historical reason, the name of database is xyz-abc not xyz_abc.

Trying download medicine_import.txt and rename medicine_import.sql and exec.

  1. Please provide the relate downstream type and version of drainer. (run drainer -V in terminal to get drainer's version)
    Release Version: v3.0.12
    Git Commit Hash: e4f2ba252977385faa32a0553808cc564d22929a
    Build TS: 2020-03-16 12:36:21
    Go Version: go1.13
    Go OS/Arch: linux/amd64

medicine_import.txt

july2993 commented 4 years ago

@elvizlai Thanks for your report, this is caused by the database name is not quote, so when it contains the reserved characters, reparo will fail to parse the DDL. We will fix it.