tidb的全量逻辑导出数据工具dumpling
原创
©著作权归作者所有:来自51CTO博客作者igoodful的原创作品,请联系作者获取转载授权,否则将追究法律责任
######################
功能:
Dumpling 是一个用于从 MySQL/TiDB 进行全量逻辑导出的工具。你可以把存储在 TiDB 或 MySQL 中的数据导出为 SQL 或 CSV 格式,用于逻辑全量备份。
- 数据源:不仅能够导出mysql的数据,而且还可以导出tidb的数据;
- 格式:数据导出格式可以为sql文件格式,也可以导出为csv格式。这种格式方便迁移到其他数据库;
- 用途:逻辑备份数据
基本信息:
- Dumpling 的输入:MySQL/TiDB 集群
- Dumpling 的输出:SQL/CSV 文件
- 适用 TiDB 版本:所有版本
- Kubernetes 支持:尚未支持
权限要求:
- select
- reload
- lock tables
- replication client
- process
原理:
适用场景:
- 数据量较小,不适合大数据量导出;
- 需要导出数据为sql或csv格式的需求
- 只能全量导出数据,不能增量导出数据
导出数据后的元数据信息metadata:此文件包含导出的起始时间,以及 master binary log 的位置。
[work@xxx]$ cat metadata
Started dump at: 2021-10-14 15:46:56
SHOW MASTER STATUS:
Log: mysql-bin.000224
Pos: 1990
GTID:ef863667-298a-11eb-8d0b-0c42a15d0b4c:1-175408
Finished dump at: 2021-10-14 16:01:41
安装dumpling:
查看dumpling命令参数:
shell>> tiup dumpling --help
metadata:此文件包含导出的起始时间,以及 master binary log 的位置。
Copy
cat metadata
Started dump at: 2020-11-10 10:40:19
SHOW MASTER STATUS:
Log: tidb-binlog
Pos: 420747102018863124
Finished dump at: 2020-11-10 10:40:20
{schema}-schema-create.sql:创建 schema 的 SQL 文件。
Copy
cat test-schema-create.sql
CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
{schema}.{table}-schema.sql:创建 table 的 SQL 文件
Copy
cat test.t1-schema.sql
CREATE TABLE `t1` (
`id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
{schema}.{table}.{0001}.{sql|csv}:数据源文件
Copy
cat test.t1.0.sql
/*!40101 SET NAMES binary*/;
INSERT INTO `t1` VALUES
(1);
*-schema-view.sql、*-schema-trigger.sql、*-schema-post.sql:其他导出文件
备份命令:
shell>> tiup dumpling --user root -p 123456 --host 10.10.10.10 --port 3306 --filetype sql -t 8 -F 102400MiB -o /home/work/scripts/tmp/10.10.10.10 --database apple,google,airbnb
当你只需要备份mysql或tidb的部分数据库时,用--database指定数据库时,各个数据库名称之间用逗号分割,而不是空格
选项:--sql
说明:选项仅仅可用于导出 CSV 的场景。
举例:--sql 'select * from `test`.`sbtest1` where id < 100'
选项:--where
说明:条件用于除系统数据库(包括 mysql 、sys 、INFORMATION_SCHEMA 、PERFORMANCE_SCHEMA、METRICS_SCHEMA 和 INSPECTION_SCHEMA)外所有其他数据库
举例:--where "id < 100"
选项: --filter
说明:帅选库表,多个匹配规则就用多个--filter规则
举例: --filter "employees.*" --filter "*.WorkOrder" 只备份employees库中所有表,和所有库中的WorkOrder表
选项:--threads ,可简写为-t
说明:指定备份并发线程数,默认为4
举例:--threads 8
选项:--tables-list,可简写为-T
说明:指定备份表,需要库名称前缀
举例:--tables-list my_db.my_table
选项:--consistency,可简写为-T
说明:指定备份表,需要库名称前缀
举例:--consistency auto
Dumpling 通过 --consistency <consistency level> 标志控制导出数据“一致性保证”的方式。在使用 snapshot 来保证一致性的时候,可以使用 --snapshot 选项指定要备份的时间戳。还可以使用以下的一致性级别:
flush:使用 FLUSH TABLES WITH READ LOCK 短暂地中断备份库的 DML 和 DDL 操作、保证备份连接的全局一致性和记录 POS 信息。所有的备份连接启动事务后释放该锁。推荐在业务低峰或者 MySQL 备份库上进行全量备份。
snapshot:获取指定时间戳的一致性快照并导出。
lock:为待导出的所有表上读锁。
none:不做任何一致性保证。
auto:对 MySQL 使用 flush,对 TiDB 使用 snapshot。
选项:--rows,可简写为-r
说明:单个文件的最大行数
举例:--rows 2000000
#########################