18
18
2 . ** 实用** : 可替换库(--schema)/表(--table)名, 可在sql语句中输出完整的字段(--complete)
19
19
3 . ** 简单** : 纯python3代码编写, ** 无依赖包** . 还可以使用** --debug** 查看解析过程
20
20
4 . ** 选择性强** : 可以根据条件过滤符合要求的数据 --where , --limit
21
- 5 . ** 支持众多数据类型** : 支持** 所有mysql数据类型** (比如 int, decimal, date, varchar, char, ** json** , binary, enum, set, blob/text, longblob等 ).
21
+ 5 . ** 支持众多数据类型** : 支持** 所有mysql数据类型** (比如 int, decimal, date, varchar, char, ** json** , binary, enum, set, blob/text, longblob,空间坐标等 ).
22
22
6 . ** 支持复杂的表结构** : 分区表, 注释, 主键, 外键, 约束, 自增, 普通索引, 前缀索引, 主键前缀索引, 唯一索引, 复合索引, 默认值, 符号, 虚拟字段, INSTANT, 无主键等情况的表
23
23
7 . ** 数据误删恢复** : 可以输出被标记为deleted的数据
24
24
8 . ** 安全** : 离线解析ibd文件, 仅可读权限即可
25
25
26
26
27
-
28
27
# 安装下载
29
28
30
- ## Linux 环境下载
31
-
32
- ```
33
- wget https://codeload.github.com/ddcw/ibd2sql/zip/refs/heads/main
34
- ```
35
-
36
- 或者
37
-
38
- ```
39
- wget https://github.com/ddcw/ibd2sql/releases/download/v1.0/ibd2sql_v1.0_linux_x86_64.tar.gz
40
- ```
41
-
42
-
29
+ 最新版: [ https://github.com/ddcw/ibd2sql/archive/refs/heads/main.zip ] ( https://github.com/ddcw/ibd2sql/archive/refs/heads/main.zip )
43
30
44
- ## windows 环境下载
45
-
46
- https://codeload.github.com/ddcw/ibd2sql/zip/refs/heads/main
47
-
48
- 或者
49
-
50
- https://github.com/ddcw/ibd2sql/releases/download/v1.0/ibd2sql_v1.0_win_x86_64.zip
51
-
52
- 或者
53
-
54
- 某盘:[ https://pan.baidu.com/s/1IP5ZDXIOMwlzW6QTp0b_UA ] ( https://cloud.tencent.com/developer/tools/blog-entry?target=https%3A%2F%2Fpan.baidu.com%2Fs%2F1IP5ZDXIOMwlzW6QTp0b_UA&source=article&objectId=2377921 ) 提取码: ddcw
31
+ 次新版: [ https://github.com/ddcw/ibd2sql/archive/refs/tags/v1.2.tar.gz ] ( https://github.com/ddcw/ibd2sql/archive/refs/tags/v1.2.tar.gz )
55
32
56
33
57
34
@@ -60,12 +37,11 @@ https://github.com/ddcw/ibd2sql/releases/download/v1.0/ibd2sql_v1.0_win_x86_64.z
60
37
可使用 ` python3 main.py -h ` 查看帮助信息
61
38
62
39
``` shell
63
- SHELL> python3 main.py -h
64
- usage: main.py [-h] [--version] [--ddl] [--sql] [--delete] [--complete-insert] [--force] [--set] [--multi-value] [--replace]
65
- [--table TABLE_NAME] [--schema SCHEMA_NAME] [--sdi-table SDI_TABLE] [--where-trx WHERE_TRX]
66
- [--where-rollptr WHERE_ROLLPTR] [--where WHERE] [--limit LIMIT] [--debug] [--debug-file DEBUG_FILE]
67
- [--page-min PAGE_MIN] [--page-max PAGE_MAX] [--page-start PAGE_START] [--page-count PAGE_COUNT]
68
- [--page-skip PAGE_SKIP] [--parallel PARALLEL]
40
+ SHELL> python3 main.py -h
41
+ usage: main.py [--help] [--version] [--ddl] [--sql] [--delete] [--complete-insert] [--force] [--set] [--multi-value]
42
+ [--replace] [--table TABLE_NAME] [--schema SCHEMA_NAME] [--sdi-table SDI_TABLE] [--where-trx WHERE_TRX]
43
+ [--where-rollptr WHERE_ROLLPTR] [--limit LIMIT] [--debug] [--debug-file DEBUG_FILE] [--page-min PAGE_MIN]
44
+ [--page-max PAGE_MAX] [--page-start PAGE_START] [--page-count PAGE_COUNT] [--page-skip PAGE_SKIP]
69
45
[FILENAME]
70
46
71
47
解析mysql8.0的ibd文件 https://github.com/ddcw/ibd2sql
@@ -74,7 +50,7 @@ positional arguments:
74
50
FILENAME ibd filename
75
51
76
52
options:
77
- -h , --help show this help message and exit
53
+ --help , -h show help
78
54
--version, -v, -V show version
79
55
--ddl, -d print ddl
80
56
--sql print data by sql
@@ -92,7 +68,6 @@ options:
92
68
default (0,281474976710656)
93
69
--where-rollptr WHERE_ROLLPTR
94
70
default (0,72057594037927936)
95
- --where WHERE filter data(TODO)
96
71
--limit LIMIT limit rows
97
72
--debug, -D will DEBUG (it' s too big)
98
73
--debug-file DEBUG_FILE
@@ -105,73 +80,30 @@ options:
105
80
page count NO
106
81
--page-skip PAGE_SKIP
107
82
skip some pages when start parse index page
108
- --parallel PARALLEL, -p PARALLEL
109
- parse to data/sql with N threads.(default 4) TODO
83
+ Example:
84
+ ibd2sql /data/db1/xxx.ibd --ddl --sql
85
+ ibd2sql /data/db1/xxx.ibd --delete --sql
86
+ ibd2sql /data/db1/xxx#p#p1.ibd --sdi-table /data/db1/xxx#p#p0.ibd --delete --sql
110
87
```
111
88
112
89
113
90
114
- ## 提取DDL
91
+ ## 提取建表语句 DDL
115
92
116
- --ddl 提取ddl
93
+ ** --ddl**
117
94
118
95
```shell
119
- SHELL> python3 main.py /data/mysql_3314/mysqldata/ibd2sql/ddcw_alltype_table.ibd --ddl
120
- CREATE TABLE IF NOT EXISTS `ibd2sql`.`ddcw_alltype_table`(
121
- `id` int NOT NULL AUTO_INCREMENT,
122
- `int_col` int NULL,
123
- `tinyint_col` tinyint NULL DEFAULT ' 1' ,
124
- `smallint_col` smallint NULL,
125
- `mediumint_col` mediumint NULL,
126
- `bigint_col` bigint NULL,
127
- `float_col` float NULL,
128
- `double_col` double NULL,
129
- `decimal_col` decimal(10,2) NULL,
130
- `date_col` date NULL,
131
- `datetime_col` datetime NULL,
132
- `timestamp_col` timestamp NULL,
133
- `time_col` time NULL,
134
- `year_col` year NULL,
135
- `char_col` char(100) NULL,
136
- `varchar_col` varchar(100) NULL,
137
- `binary_col` binary(10) NULL,
138
- `varbinary_col` varbinary(20) NULL,
139
- `bit_col` bit(4) NULL,
140
- `enum_col` enum(' A' ,' B' ,' C' ) NULL,
141
- `set_col` set(' X' ,' Y' ,' Z' ) NULL,
142
- `josn_type` json NULL,
143
- PRIMARY KEY (`id`)
144
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ;
96
+ python3 main.py /data/mysql_3314/mysqldata/ibd2sql/ddcw_alltype_table.ibd --ddl
145
97
```
146
98
147
- ```shell
148
- SHELL> python3 main.py /data/mysql_3314/mysqldata/ibd2sql/ddcw_blob7.ibd
149
- CREATE TABLE IF NOT EXISTS `ibd2sql`.`ddcw_blob7`(
150
- `id` int NULL,
151
- `c_lb` longblob NULL,
152
- `c_lt` longtext NULL,
153
- `c_ml` mediumblob NULL,
154
- `c_mb` mediumtext NULL,
155
- `c_t` text NULL,
156
- `c_b` blob NULL,
157
- `c_tb` tinyblob NULL,
158
- `c_tt` tinytext NULL
159
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ;
160
- ```
161
-
162
-
163
-
164
99
165
100
166
- ## 提取为SQL
101
+ ## 提取数据 DML/INSERT
167
102
168
- --sql
103
+ ** --sql**
169
104
170
105
```shell
171
- SHELL> python3 main.py /data/mysql_3314/mysqldata/ibd2sql/ddcw_alltype_table.ibd --sql --limit 1
172
-
173
- INSERT INTO `ibd2sql`.`ddcw_alltype_table` VALUES (2, 5267711, 89, -3652, 5951, 7237, 703.0, 7002.0, 3127.0, ' 2009-3-23' , ' 2013-7-15 2:17:10' , ' 1997-4-4 21:22:22.' , ' 22:57:11' , 2004, ' HucLseQCOUgEvXuBrDoOGcKvWaNRYSbDmQRQJVlYqZeEoPIcLlxUqwFHcgPMMqBBPLteFZluWLQGpKCcUjnzFubtVjI' , ' lpRwpchqJAlQtiVfWFvtNyRVijXcEkYwGXkQRcBlIGlohXSiFFMyhdVFwmLgMQIYYhRvbBkdgWwSBtbo' , 0x36390000000000000000, ' 30' , 1, ' B' , ' Y' , ' {" aa" : " c" , " bb" : {" dd" : 1}}' );
174
-
106
+ python3 main.py /data/mysql_3314/mysqldata/ibd2sql/ddcw_alltype_table.ibd --sql
175
107
```
176
108
177
109
binary数据会被转为 base64
@@ -180,56 +112,38 @@ set/enum会被替换为实际值(v0.3版本是使用数字表示)
180
112
181
113
182
114
115
+ ## 提取误删数据 (被标记为delete的数据)
183
116
184
-
185
- ## 提取被标记为deleted的数据行
186
-
187
- --delete
117
+ **--sql --delete**
188
118
189
119
```shell
190
120
SHELL> python3 main.py /data/mysql_3314/mysqldata/ibd2sql/ddcw_alltype_table.ibd --sql --delete
191
-
192
- INSERT INTO `ibd2sql`.`ddcw_alltype_table` VALUES (1, 2501406, 42, -167, -166, 4487, 5219.0, 1929.0, -6618.0, ' 2008-9-14' , ' 2013-5-24 10:53:43' , ' 2006-2-15 16:6:35.' , ' 19:8:27' , 2003, ' bczTYGympcbqhuMPLpxNtkyMawChejIBhatxsGmdqLUOPnuYhjvMSowMoXGnJ' , ' vNBkvaPWq' , 0x36380000000000000000, ' 60' , 1, ' B' , ' X' , ' {" aa" : " c" , " bb" : {" dd" : 1}}' );
193
121
```
194
122
195
123
196
124
125
+ ## 提取分区表数据
197
126
198
-
199
-
200
-
201
- ## 提取分区表的数据
202
-
203
- --sdi-table xxx#p0.ibd
127
+ **--sdi-table xxx#p0.ibd**
204
128
205
129
```shell
206
- SHELL> python3 main.py /data/mysql_3314/mysqldata/ibd2sql/ddcw_partition_hash#p#p3.ibd --sdi-table /data/mysql_3314/mysqldata/ibd2sql/ddcw_partition_hash#p#p0.ibd --sql --limit 1
207
-
208
- INSERT INTO `ibd2sql`.`ddcw_partition_hash` VALUES (3, ' gDVcQkNrvazHbXwZuSPIcPbgZhdUoqxXgCEyoaadhhZOnwYm' , ' 2007-4-24 8:23:16' );
130
+ SHELL> python3 main.py /data/mysql_3314/mysqldata/ibd2sql/ddcw_partition_hash#p#p3.ibd --sdi-table /data/mysql_3314/mysqldata/ibd2sql/ddcw_partition_hash#p#p0.ibd --sql
209
131
```
210
132
211
133
212
134
213
135
## 完整字段信息
214
136
215
- --complete
137
+ ** --complete**
216
138
217
139
```shell
218
- SHELL> python3 main.py /data/mysql_3314/mysqldata/ibd2sql/ddcw_alltype_table.ibd --sql --limit 1 --complete --limit 2
219
-
220
- INSERT INTO `ibd2sql`.`ddcw_alltype_table`(`id`,`int_col`,`tinyint_col`,`smallint_col`,`mediumint_col`,`bigint_col`,`float_col`,`double_col`,`decimal_col`,`date_col`,`datetime_col`,`timestamp_col`,`time_col`,`year_col`,`char_col`,`varchar_col`,`binary_col`,`varbinary_col`,`bit_col`,`enum_col`,`set_col`,`josn_type`) VALUES (2, 5267711, 89, -3652, 5951, 7237, 703.0, 7002.0, 3127.0, ' 2009-3-23' , ' 2013-7-15 2:17:10' , ' 1997-4-4 21:22:22.' , ' 22:57:11' , 2004, ' HucLseQCOUgEvXuBrDoOGcKvWaNRYSbDmQRQJVlYqZeEoPIcLlxUqwFHcgPMMqBBPLteFZluWLQGpKCcUjnzFubtVjI' , ' lpRwpchqJAlQtiVfWFvtNyRVijXcEkYwGXkQRcBlIGlohXSiFFMyhdVFwmLgMQIYYhRvbBkdgWwSBtbo' , 0x36390000000000000000, ' 30' , 1, ' B' , ' Y' , ' {" aa" : " c" , " bb" : {" dd" : 1}}' );
221
- INSERT INTO `ibd2sql`.`ddcw_alltype_table`(`id`,`int_col`,`tinyint_col`,`smallint_col`,`mediumint_col`,`bigint_col`,`float_col`,`double_col`,`decimal_col`,`date_col`,`datetime_col`,`timestamp_col`,`time_col`,`year_col`,`char_col`,`varchar_col`,`binary_col`,`varbinary_col`,`bit_col`,`enum_col`,`set_col`,`josn_type`) VALUES (3, 5232618, 125, -1229, 1006, -5722, 1136.0, -1642.0, -772.0, ' 1996-7-8' , ' 2015-11-9 12:9:10' , ' 2012-4-7 10:51:38.' , ' 15:32:17' , 2000, ' BMbYVTsNflhwviayJbWqMaTg' , ' KOawMw' , 0x36370000000000000000, ' 85' , 1, ' A' , ' Y' , ' {" aa" : " c" , " bb" : {" dd" : 1}}' );
222
-
140
+ SHELL> python3 main.py /data/mysql_3314/mysqldata/ibd2sql/ddcw_alltype_table.ibd --sql --complete
223
141
```
224
142
225
143
226
144
227
145
228
146
229
-
230
-
231
-
232
-
233
147
# CHANGE LOG
234
148
235
149
| 版本 | 变更时间 | 说明 | 备注 |
@@ -238,8 +152,8 @@ INSERT INTO `ibd2sql`.`ddcw_alltype_table`(`id`,`int_col`,`tinyint_col`,`smallin
238
152
| v0.2 | 2023.08.30 | 支持更多数据类型 | 1. 修复year/tinyint的支持<br />2. 符号支持(对于数字类型)<br />3. 更多的数据类型支持<br />4. 更多的表属性支持<br />5. 美化输出<br />6. 支持表名替换<br />7. 支持--complete-insert |
239
153
| v0.3 | 2023.10.13 | 支持5.7升级到8.0的ibd文件 | 修复一些BUG |
240
154
| v1.0 | 2024.01.05 | 支持debug<br />支持更多类型和功能 | 1. 支持DEBUG<br />2. 支持分区表<br />3. 支持唯一索引<br />4.支持虚拟列<br />5. 支持instant<br />6.支持约束和外键<br />7. 支持限制输出<br />8.支持前缀索引 |
241
- | v1.1 | 2024.04.12 | 修复一些bug | 1. 8.0.13 默认值时间戳<br />2. 8.0.12 无hidden<br />3. online ddl instant |
242
- | v1.2 | 2024.04.25 | 新增空间坐标的支持 | 支持geometry\[collection\],\[multi\]point,\[multi\]linestring,\[multi\]polygon |
155
+ | v1.1 | 2024.04.12 | 修复一些bug | 1. 8.0.13 默认值时间戳<br />2. 8.0.12 无hidden<br />3. online ddl instant |
156
+ | v1.2 | 2024.04.25 | 新增空间坐标的支持 | 支持geometry\[collection\],\[multi\]point,\[multi\]linestring,\[multi\]polygon |
243
157
244
158
245
159
@@ -254,17 +168,19 @@ INSERT INTO `ibd2sql`.`ddcw_alltype_table`(`id`,`int_col`,`tinyint_col`,`smallin
254
168
7. [8.0.12 无hidden](https://github.com/ddcw/ibd2sql/issues/10) : 取消hidden检查
255
169
8. [ONLINE DDL instant](https://github.com/ddcw/ibd2sql/issues/12) : record 1-2 bit is instant flag
256
170
257
-
171
+
172
+
173
+
258
174
259
175
# 支持范围
260
176
261
- 环境要求: python3 或者 使用已编译好的[二进制程序](https://github.com/ddcw/ibd2sql/releases/download/v1.0/ibd2sql_v1.0_linux_x86_64.tar.gz)
177
+ 环境要求: python3
262
178
263
- 对象支持: mysql 8.x 下几乎所有数据类型,表属性
179
+ 对象支持: mysql 8.x 所有数据类型
264
180
265
181
如下情况不支持:
266
182
267
- 1. 二级分区 (不支持)
183
+ 1. DDL二级分区 (不支持)
268
184
2. 溢出页 (默认置为null)
269
185
3. 不支持一张表存在多个字符集, 其实只支持utf8
270
186
0 commit comments