Skip to content

Commit e1814c0

Browse files
author
ddcw
committed
v1.2
1 parent fbafa1b commit e1814c0

File tree

1 file changed

+34
-118
lines changed

1 file changed

+34
-118
lines changed

README.md

Lines changed: 34 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -18,40 +18,17 @@
1818
2. **实用**: 可替换库(--schema)/表(--table)名, 可在sql语句中输出完整的字段(--complete)
1919
3. **简单**: 纯python3代码编写, **无依赖包**. 还可以使用**--debug**查看解析过程
2020
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,空间坐标等).
2222
6. **支持复杂的表结构**: 分区表, 注释, 主键, 外键, 约束, 自增, 普通索引, 前缀索引, 主键前缀索引, 唯一索引, 复合索引, 默认值, 符号, 虚拟字段, INSTANT, 无主键等情况的表
2323
7. **数据误删恢复**: 可以输出被标记为deleted的数据
2424
8. **安全**: 离线解析ibd文件, 仅可读权限即可
2525

2626

27-
2827
# 安装下载
2928

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)
4330

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)
5532

5633

5734

@@ -60,12 +37,11 @@ https://github.com/ddcw/ibd2sql/releases/download/v1.0/ibd2sql_v1.0_win_x86_64.z
6037
可使用 `python3 main.py -h` 查看帮助信息
6138

6239
```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]
6945
[FILENAME]
7046

7147
解析mysql8.0的ibd文件 https://github.com/ddcw/ibd2sql
@@ -74,7 +50,7 @@ positional arguments:
7450
FILENAME ibd filename
7551

7652
options:
77-
-h, --help show this help message and exit
53+
--help, -h show help
7854
--version, -v, -V show version
7955
--ddl, -d print ddl
8056
--sql print data by sql
@@ -92,7 +68,6 @@ options:
9268
default (0,281474976710656)
9369
--where-rollptr WHERE_ROLLPTR
9470
default (0,72057594037927936)
95-
--where WHERE filter data(TODO)
9671
--limit LIMIT limit rows
9772
--debug, -D will DEBUG (it's too big)
9873
--debug-file DEBUG_FILE
@@ -105,73 +80,30 @@ options:
10580
page count NO
10681
--page-skip PAGE_SKIP
10782
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
11087
```
11188
11289
11390
114-
## 提取DDL
91+
## 提取建表语句 DDL
11592
116-
--ddl 提取ddl
93+
**--ddl**
11794
11895
```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
14597
```
14698
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-
16499
165100
166-
## 提取为SQL
101+
## 提取数据 DML/INSERT
167102
168-
--sql
103+
**--sql**
169104
170105
```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
175107
```
176108
177109
binary数据会被转为 base64
@@ -180,56 +112,38 @@ set/enum会被替换为实际值(v0.3版本是使用数字表示)
180112
181113
182114
115+
## 提取误删数据 (被标记为delete的数据)
183116
184-
185-
## 提取被标记为deleted的数据行
186-
187-
--delete
117+
**--sql --delete**
188118
189119
```shell
190120
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}}');
193121
```
194122
195123
196124
125+
## 提取分区表数据
197126
198-
199-
200-
201-
## 提取分区表的数据
202-
203-
--sdi-table xxx#p0.ibd
127+
**--sdi-table xxx#p0.ibd**
204128
205129
```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
209131
```
210132
211133
212134
213135
## 完整字段信息
214136
215-
--complete
137+
**--complete**
216138
217139
```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
223141
```
224142
225143
226144
227145
228146
229-
230-
231-
232-
233147
# CHANGE LOG
234148
235149
| 版本 | 变更时间 | 说明 | 备注 |
@@ -238,8 +152,8 @@ INSERT INTO `ibd2sql`.`ddcw_alltype_table`(`id`,`int_col`,`tinyint_col`,`smallin
238152
| v0.2 | 2023.08.30 | 支持更多数据类型 | 1. 修复year/tinyint的支持<br />2. 符号支持(对于数字类型)<br />3. 更多的数据类型支持<br />4. 更多的表属性支持<br />5. 美化输出<br />6. 支持表名替换<br />7. 支持--complete-insert |
239153
| v0.3 | 2023.10.13 | 支持5.7升级到8.0的ibd文件 | 修复一些BUG |
240154
| 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 |
243157
244158
245159
@@ -254,17 +168,19 @@ INSERT INTO `ibd2sql`.`ddcw_alltype_table`(`id`,`int_col`,`tinyint_col`,`smallin
254168
7. [8.0.12 无hidden](https://github.com/ddcw/ibd2sql/issues/10) : 取消hidden检查
255169
8. [ONLINE DDL instant](https://github.com/ddcw/ibd2sql/issues/12) : record 1-2 bit is instant flag
256170
257-
171+
172+
173+
258174
259175
# 支持范围
260176
261-
环境要求: python3 或者 使用已编译好的[二进制程序](https://github.com/ddcw/ibd2sql/releases/download/v1.0/ibd2sql_v1.0_linux_x86_64.tar.gz)
177+
环境要求: python3
262178
263-
对象支持: mysql 8.x 下几乎所有数据类型,表属性
179+
对象支持: mysql 8.x 所有数据类型
264180
265181
如下情况不支持:
266182
267-
1. 二级分区 (不支持)
183+
1. DDL二级分区 (不支持)
268184
2. 溢出页 (默认置为null)
269185
3. 不支持一张表存在多个字符集, 其实只支持utf8
270186

0 commit comments

Comments
 (0)