https://docs.pingcap.com/zh/tidb/stable/dumpling-overview
一、安装 你可以通过下列任意方式获取 Dumpling:
TiUP 执行 tiup install dumpling 命令。获取后,使用 tiup dumpling ... 命令运行 Dumpling。
下载包含 Dumpling 的 tidb-toolkit 安装包 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 [tidb@monitor ~]$ tiup install dumpling download https://tiup-mirrors.pingcap.com/dumpling-v8.5.0-linux-amd64.tar.gz 37.21 MiB / 37.21 MiB 100.00% 9.03 MiB/s ---指定版本安装 [tidb@monitor ~]$ tiup install dumpling:v8.3.0 download https://tiup-mirrors.pingcap.com/dumpling-v8.3.0-linux-amd64.tar.gz 36.70 MiB / 36.70 MiB 100.00% 1.17 MiB/s [tidb@monitor ~]$ tiup dumpling --version A new version of dumpling is available: v8.3.0 -> v8.5.0 To update this component: tiup update dumpling To update all components: tiup update --all Starting component dumpling: /home/tidb/.tiup/components/dumpling/v8.3.0/dumpling --version Release version: v8.3.0 Git commit hash: 1a0c3ac3292fff7742faa0c00a662ccb66ba40db Git branch: HEAD Build timestamp: 2024-08-20 10:13:00Z Go version: go version go1.21.10 linux/amd64 ---卸载组件 [tidb@monitor ~]$ tiup uninstall dumpling --all /home/tidb/.tiup/components/dumpling Uninstalled component `dumpling` successfully!
二、备份
dumping可以导出sql或csv格式
1.全备 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [tidb@monitor ~]$ tiup dumpling -uroot -h 192.168.1.181 -P 4000 --filetype sql -o /backup/tidb/dumpling -p 123456 tiup dumpling -h 192.168.1.181 -P 4000 -u root -t 16 -r 200000 -F 256MiB -B my_db1 -f 'my_db1.table[12]' -o 's3://my-bucket/sql-backup' tiup dumpling -u root -P 4000 -h 127.0.0.1 --filetype sql -t 8 -o /tmp/test -r 200000 -F 256MiB tiup dumping --login-path=tidb --filetype sql -t 8 -t: --threads
2.备份单库 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 [tidb@monitor ~]$ tiup dumpling -uroot -h 192.168.1.181 -P 4000 --filetype sql -o /backup/tidb/dumpling -B mydb -p 123456 [tidb@monitor ~]$ ll /backup/tidb/dumpling/ total 16 -rw-r--r-- 1 tidb admin 146 Dec 30 06:10 metadata -rw-r--r-- 1 tidb admin 132 Dec 30 06:10 mydb-schema-create.sql -rw-r--r-- 1 tidb admin 94 Dec 30 06:10 mydb.t.000000000.sql -rw-r--r-- 1 tidb admin 174 Dec 30 06:10 mydb.t-schema.sql ---备份多个库 [tidb@monitor ~]$ tiup dumpling -uroot -h 192.168.1.181 -P 4000 --filetype sql -o /backup/tidb/dumpling -B mydb,orcl -p 123456 [tidb@monitor ~]$ ll /backup/tidb/dumpling/ total 28 -rw-r--r-- 1 tidb admin 146 Dec 30 06:23 metadata -rw-r--r-- 1 tidb admin 132 Dec 30 06:23 mydb-schema-create.sql -rw-r--r-- 1 tidb admin 94 Dec 30 06:23 mydb.t.000000000.sql -rw-r--r-- 1 tidb admin 174 Dec 30 06:23 mydb.t-schema.sql -rw-r--r-- 1 tidb admin 132 Dec 30 06:23 orcl-schema-create.sql -rw-r--r-- 1 tidb admin 105 Dec 30 06:23 orcl.t3.000000000.sql -rw-r--r-- 1 tidb admin 175 Dec 30 06:23 orcl.t3-schema.sql
3.备份单表
-T 选项只能接受完整的 库名.表名 形式,不支持只指定表名。例:Dumpling 无法识别 -T WorkOrder 表名必须存在,即使只有一个表名不存在,也不会导出数据-T 选项不可同时与--filter 选项使用
1 2 3 4 5 6 7 8 9 10 11 [tidb@monitor ~]$ tiup dumpling -uroot -h 192.168.1.181 -P 4000 --filetype sql -o /backup/tidb/dumpling -T mydb.t,orcl.t3 -p 123456 [tidb@monitor ~]$ ll /backup/tidb/dumpling total 28 -rw-r--r-- 1 tidb admin 146 Dec 30 06:34 metadata -rw-r--r-- 1 tidb admin 132 Dec 30 06:34 mydb-schema-create.sql -rw-r--r-- 1 tidb admin 94 Dec 30 06:34 mydb.t.000000000.sql -rw-r--r-- 1 tidb admin 174 Dec 30 06:34 mydb.t-schema.sql -rw-r--r-- 1 tidb admin 132 Dec 30 06:34 orcl-schema-create.sql -rw-r--r-- 1 tidb admin 105 Dec 30 06:34 orcl.t3.000000000.sql -rw-r--r-- 1 tidb admin 175 Dec 30 06:34 orcl.t3-schema.sql
4.导出某个schema下面的数据
Dumpling 可以通过 -f, --filter 指定 table-filter 来筛选特定的库表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 tiup dumpling -uroot -h 192.168.1.181 -P 4000 --filetype sql -o /backup/tidb/dumpling --filter "mydb.*" -p 123456 [tidb@monitor ~]$ ll /backup/tidb/dumpling/ total 24 -rw-r--r-- 1 tidb admin 146 Dec 30 06:41 metadata -rw-r--r-- 1 tidb admin 132 Dec 30 06:41 mydb-schema-create.sql -rw-r--r-- 1 tidb admin 94 Dec 30 06:41 mydb.t.000000000.sql -rw-r--r-- 1 tidb admin 105 Dec 30 06:41 mydb.t1.000000000.sql -rw-r--r-- 1 tidb admin 175 Dec 30 06:41 mydb.t1-schema.sql -rw-r--r-- 1 tidb admin 174 Dec 30 06:41 mydb.t-schema.sql tiup dumpling -uroot -h 192.168.1.181 -P 4000 --filetype sql -o /backup/tidb/dumpling -f "*.t1" -p 123456 [tidb@monitor ~]$ ll /backup/tidb/dumpling/ total 52 -rw-r--r-- 1 tidb admin 146 Dec 30 06:42 INFORMATION_SCHEMA-schema-create.sql -rw-r--r-- 1 tidb admin 146 Dec 30 06:42 metadata -rw-r--r-- 1 tidb admin 142 Dec 30 06:42 METRICS_SCHEMA-schema-create.sql -rw-r--r-- 1 tidb admin 132 Dec 30 06:42 mydb-schema-create.sql -rw-r--r-- 1 tidb admin 105 Dec 30 06:42 mydb.t1.000000000.sql -rw-r--r-- 1 tidb admin 175 Dec 30 06:42 mydb.t1-schema.sql -rw-r--r-- 1 tidb admin 133 Dec 30 06:42 mysql-schema-create.sql -rw-r--r-- 1 tidb admin 132 Dec 30 06:42 orcl-schema-create.sql -rw-r--r-- 1 tidb admin 120 Dec 30 06:42 orcl.t1.000000000.sql -rw-r--r-- 1 tidb admin 175 Dec 30 06:42 orcl.t1-schema.sql -rw-r--r-- 1 tidb admin 146 Dec 30 06:42 PERFORMANCE_SCHEMA-schema-create.sql -rw-r--r-- 1 tidb admin 131 Dec 30 06:42 sys-schema-create.sql -rw-r--r-- 1 tidb admin 132 Dec 30 06:42 test-schema-create.sql tiup dumpling -uroot -h 192.168.1.181 -P 4000 --filetype sql -o /backup/tidb/dumpling --filter "mydb.*" --filter "*.t3" -p 123456 [tidb@monitor ~]$ ll /backup/tidb/dumpling/ total 60 -rw-r--r-- 1 tidb admin 146 Dec 30 06:45 INFORMATION_SCHEMA-schema-create.sql -rw-r--r-- 1 tidb admin 146 Dec 30 06:45 metadata -rw-r--r-- 1 tidb admin 142 Dec 30 06:45 METRICS_SCHEMA-schema-create.sql -rw-r--r-- 1 tidb admin 132 Dec 30 06:45 mydb-schema-create.sql -rw-r--r-- 1 tidb admin 94 Dec 30 06:45 mydb.t.000000000.sql -rw-r--r-- 1 tidb admin 105 Dec 30 06:45 mydb.t1.000000000.sql -rw-r--r-- 1 tidb admin 175 Dec 30 06:45 mydb.t1-schema.sql -rw-r--r-- 1 tidb admin 174 Dec 30 06:45 mydb.t-schema.sql -rw-r--r-- 1 tidb admin 133 Dec 30 06:45 mysql-schema-create.sql -rw-r--r-- 1 tidb admin 132 Dec 30 06:45 orcl-schema-create.sql -rw-r--r-- 1 tidb admin 105 Dec 30 06:45 orcl.t3.000000000.sql -rw-r--r-- 1 tidb admin 175 Dec 30 06:45 orcl.t3-schema.sql -rw-r--r-- 1 tidb admin 146 Dec 30 06:45 PERFORMANCE_SCHEMA-schema-create.sql -rw-r--r-- 1 tidb admin 131 Dec 30 06:45 sys-schema-create.sql -rw-r--r-- 1 tidb admin 132 Dec 30 06:45 test-schema-create.sql
5.dumpling并行导出数据
-t, –threads参数指定线程数,默认是4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [tidb@monitor ~]$ tiup dumpling -uroot -h 192.168.1.181 -P 4000 --filetype csv -o /backup/tidb/dumpling -t 8 -p 123456 [tidb@monitor ~]$ ll /backup/tidb/dumpling/ total 48 -rw-r--r-- 1 tidb admin 146 Dec 30 06:52 metadata -rw-r--r-- 1 tidb admin 132 Dec 30 06:52 mydb-schema-create.sql -rw-r--r-- 1 tidb admin 9 Dec 30 06:52 mydb.t.000000000.csv -rw-r--r-- 1 tidb admin 15 Dec 30 06:52 mydb.t1.000000000.csv -rw-r--r-- 1 tidb admin 175 Dec 30 06:52 mydb.t1-schema.sql -rw-r--r-- 1 tidb admin 174 Dec 30 06:52 mydb.t-schema.sql -rw-r--r-- 1 tidb admin 132 Dec 30 06:52 orcl-schema-create.sql -rw-r--r-- 1 tidb admin 24 Dec 30 06:52 orcl.t1.000000000.csv -rw-r--r-- 1 tidb admin 175 Dec 30 06:52 orcl.t1-schema.sql -rw-r--r-- 1 tidb admin 15 Dec 30 06:52 orcl.t3.000000000.csv -rw-r--r-- 1 tidb admin 175 Dec 30 06:52 orcl.t3-schema.sql -rw-r--r-- 1 tidb admin 132 Dec 30 06:52 test-schema-create.sql
6.指定单个文件最大记录数
-r 选项用于指定单个文件的最大记录数,或者说,数据库中的行数。开启后 Dumpling 会开启表内并发,提高导出大表的速度。当上游为 TiDB 且版本为 v3.0 或更新版本时,设置 -r 参数大于 0 表示使用 TiDB region 信息划分表内并发,具体取值不影响划分算法。对上游为 MySQL 且表的主键是 int 的场景,该参数也有表内并发效果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [tidb@monitor ~]$ tiup dumpling -uroot -h 192.168.1.181 -P 4000 --filetype csv -o /backup/tidb/dumpling -r 20000 -p 123456 [tidb@monitor ~]$ ll /backup/tidb/dumpling/ total 48 -rw-r--r-- 1 tidb admin 146 Dec 30 06:57 metadata -rw-r--r-- 1 tidb admin 132 Dec 30 06:57 mydb-schema-create.sql -rw-r--r-- 1 tidb admin 9 Dec 30 06:57 mydb.t.000000001.csv -rw-r--r-- 1 tidb admin 15 Dec 30 06:57 mydb.t1.000000001.csv -rw-r--r-- 1 tidb admin 175 Dec 30 06:57 mydb.t1-schema.sql -rw-r--r-- 1 tidb admin 174 Dec 30 06:57 mydb.t-schema.sql -rw-r--r-- 1 tidb admin 132 Dec 30 06:57 orcl-schema-create.sql -rw-r--r-- 1 tidb admin 24 Dec 30 06:57 orcl.t1.000000001.csv -rw-r--r-- 1 tidb admin 175 Dec 30 06:57 orcl.t1-schema.sql -rw-r--r-- 1 tidb admin 15 Dec 30 06:57 orcl.t3.000000001.csv -rw-r--r-- 1 tidb admin 175 Dec 30 06:57 orcl.t3-schema.sql -rw-r--r-- 1 tidb admin 132 Dec 30 06:57 test-schema-create.sql
7.指定单个文件大小
-F 选项用于指定单个文件的最大大小,单位为 MiB,可接受类似 5GiB 或 8KB 的输入。如果你想使用 TiDB Lightning 将该文件加载到 TiDB 实例中,建议将 -F 选项的值保持在 256 MiB 或以下。
如果导出的单表大小超过 10 GB,强烈建议 使用 -r 和 -F 参数
1 2 3 4 5 [tidb@monitor ~]$ tiup dumpling -uroot -h 192.168.1.181 -P 4000 --filetype sql -o /backup/tidb/dumpling -r 20000 -F 256MiB -p 123456 [tidb@monitor ~]$ tiup dumpling -uroot -h 192.168.1.181 -P 4000 --filetype sql -o /backup/tidb/dumpling -r 20000 -F 1GiB -p 123456
8.压缩
你可以使用 --compress <format> 压缩导出的 CSV、SQL 数据与表结构文件。该参数支持 gzip、snappy、zstd 压缩算法。默认不压缩。
该选项只能压缩单个数据与表结构文件,无法直接压缩整个文件夹生成单个压缩集合包。 该选项可以节省磁盘空间,但也会导致导出速度变慢,并增加 CPU 消耗。对导出速度要求较高的场景需慎用。 TiDB Lightning v6.5.0 及以上版本支持直接使用 Dumpling 压缩文件作为数据源导入,无需额外配置。 Snappy 压缩文件必须遵循官方 Snappy 格式 。不支持其他非官方压缩格式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [tidb@monitor ~]$ tiup dumpling -uroot -h 192.168.1.181 -P 4000 --filetype sql -o /backup/tidb/dumpling -r 20000 -F 256MiB --compress gzip -p 123456 [tidb@monitor ~]$ ll /backup/tidb/dumpling/ total 48 -rw-r--r-- 1 tidb admin 146 Dec 30 07:19 metadata -rw-r--r-- 1 tidb admin 137 Dec 30 07:19 mydb-schema-create.sql.gz -rw-r--r-- 1 tidb admin 119 Dec 30 07:19 mydb.t.0000000010000.sql.gz -rw-r--r-- 1 tidb admin 130 Dec 30 07:19 mydb.t1.0000000010000.sql.gz -rw-r--r-- 1 tidb admin 167 Dec 30 07:19 mydb.t1-schema.sql.gz -rw-r--r-- 1 tidb admin 167 Dec 30 07:19 mydb.t-schema.sql.gz -rw-r--r-- 1 tidb admin 137 Dec 30 07:19 orcl-schema-create.sql.gz -rw-r--r-- 1 tidb admin 145 Dec 30 07:19 orcl.t1.0000000010000.sql.gz -rw-r--r-- 1 tidb admin 167 Dec 30 07:19 orcl.t1-schema.sql.gz -rw-r--r-- 1 tidb admin 130 Dec 30 07:19 orcl.t3.0000000010000.sql.gz -rw-r--r-- 1 tidb admin 168 Dec 30 07:19 orcl.t3-schema.sql.gz -rw-r--r-- 1 tidb admin 137 Dec 30 07:19 test-schema-create.sql.gz
9.一致性导出
Dumpling 通过 --consistency <consistency level> 标志控制导出数据“一致性保证”的方式。在使用 snapshot 来保证一致性的时候,可以使用 --snapshot 选项指定要备份的时间戳。还可以使用以下的一致性级别:
flush:使用 FLUSH TABLES WITH READ LOCK 短暂地中断备份库的 DML 和 DDL 操作、保证备份连接的全局一致性和记录 POS 信息。所有的备份连接启动事务后释放该锁。推荐在业务低峰或者 MySQL 备份库上进行全量备份。 -snapshot:获取指定时间戳的一致性快照并导出。 -lock:为待导出的所有表上读锁。 -none:不做任何一致性保证。 -auto:对 MySQL 使用 flush,对 TiDB 使用 snapshot。--snapshot 选项可设为 TSO(SHOW MASTER STATUS 输出的 Position 字段)或有效的 datetime 时间(YYYY-MM-DD hh:mm:ss 形式) mysql> show master status; +————-+——————–+————–+——————+——————-+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +————-+——————–+————–+——————+——————-+ | tidb-binlog | 454954972032008193 | | | | +————-+——————–+————–+——————+——————-+ 1 row in set (0.00 sec)
1 2 3 4 5 6 tiup dumpling -uroot -h 192.168.1.181 -P 4000 --filetype sql -o /backup/tidb/dumpling --consistency snapshot -p 123456 [tidb@monitor ~]$ tiup dumpling -uroot -h 192.168.1.181 -P 4000 -o /backup/tidb/dumpling --snapshot 454954972032008193 -p 123456 [tidb@monitor ~]$ tiup dumpling -uroot -h 192.168.1.181 -P 4000 --filetype sql -o /backup/tidb/dumpling --snapshot 454954972032008193 -p 123456
三、创建备份帐号
为了安全起见,建议创建普通帐号用于tidb备份
1.创建帐号 1 2 mysql> alter user backup@'192.168.1.%' identified by "mT9l!EQU4mt1"; Query OK, 0 rows affected (0.04 sec)
2.授权 1 2 3 4 mysql> grant select,reload,lock tables,replication client on *.* to backup@'192.168.1.%'; Query OK, 0 rows affected (0.00 sec) grant select,reload,lock tables,replication client,show view,event,trigger on *.* to backup@'192.168.1.%';
3.备份 1 [tidb@monitor ~]$ tiup dumpling -ubackup -h 192.168.1.181 -P 4000 --filetype sql -o /backup/tidb/dumpling --consistency snapshot -p 123456
4.备份脚本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 (1) 全库备份脚本 #!/bin/bash #set env PATH=/home/tidb/.tiup/bin:$PATH DATE=`date +%Y%m%d` keep_days=15 mount_point=/backup backup_path=$mount_point/tidb/dumpling logfile=$backup_path/logfile host='192.168.1.181' if mount | grep -q " on ${mount_point} type "; then mkdir -p $backup_path/{$DATE,logfile} else echo "`date +%Y%m%d` Please check if the directory $backup_path exists!" >> /tmp/tidb_backup.log exit 1 fi echo "----------------------------- Backup Start: `date "+%Y-%m-%d %H:%M:%S"` -----------------------------"; tiup dumpling \ -u backup \ -h $host \ -P 4000 \ --filetype sql \ -o $backup_path/$DATE \ -t 10 \ -r 20000 \ -F 256MiB \ -p mT9l!EQU4mt1 > $logfile/dumpling_full_${DATE}.log echo "----------------------------- Backup End: `date "+%Y-%m-%d %H:%M:%S"` -----------------------------"; find $backup_path/* -maxdepth 0 -type d -mtime +$keep_days |xargs rm -rf find $logfile -name '*.log' -mtime +$keep_days |xargs rm -rf (2) 单表压缩备份脚本 #!/bin/bash #set env PATH=/home/tidb/.tiup/bin:$PATH DATE=`date +%Y%m%d` keep_days=90 mount_point=/backup2 backup_path=$mount_point/tidb/dumpling_table table_name=mydb.ky_doc_xml logfile=$backup_path/logfile host='192.168.1.181' if mount | grep -q " on ${mount_point} type "; then mkdir -p $backup_path/{$DATE,logfile} else echo "`date +%Y%m%d` Please check if the directory $backup_path exists!" >> /tmp/tidb_backup.log exit 1 fi echo "----------------------------- Backup Start: `date "+%Y-%m-%d %H:%M:%S"` -----------------------------"; tiup dumpling \ -u backup \ -h $host \ -P 4000 \ --filetype sql \ -o $backup_path/$DATE \ -t 6 \ -T $table_name \ -c gzip \ -r 20000 \ -F 256MiB \ -p mT9l!EQU4mT1 > $logfile/dumpling_full_${DATE}.log echo "----------------------------- Backup End: `date "+%Y-%m-%d %H:%M:%S"` -----------------------------"; find $backup_path/* -maxdepth 0 -type d -mtime +$keep_days |xargs rm -rf find $logfile -name '*.log' -mtime +$keep_days |xargs rm -rf