tidb的全量逻辑导出数据工具dumpling

######################

 

功能:

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:

shell>> tiup install 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

 

 

 

 

 

#########################

posted @ 2021-10-14 15:56  igoodful  阅读(1077)  评论(0编辑  收藏  举报