tidb-dumpling备份数据库并上传到oss上

dumpling备份数据库并上传到oss上

参考文档:

https://docs.pingcap.com/zh/tidb/stable/dumpling-overview

一、介绍

通过数据导出工具 Dumpling,你可以把存储在 TiDB 或 MySQL 中的数据导出为 SQL 或 CSV 格式,用于逻辑全量备份。Dumpling 也支持将数据导出到 Amazon S3 中。

二、安装

你可以通过下列任意方式获取 Dumpling:

  • TiUP 执行 tiup install dumpling 命令。获取后,使用 tiup dumpling ... 命令运行 Dumpling。
  • 下载包含 Dumpling 的 tidb-toolkit 安装包
    • https://docs.pingcap.com/zh/tidb/stable/download-ecosystem-tools
三、从 TiDB/MySQL 导出数据
1、备份用户需要的最小权限
  • SELECT
  • RELOAD
  • LOCK TABLES
  • REPLICATION CLIENT
  • PROCESS
2、通过并发提高 Dumpling 的导出效率

默认情况下,导出的文件会存储到 ./export-<current local time> 目录下。常用选项如下:

  • -t 用于指定导出的线程数。增加线程数会增加 Dumpling 并发度提高导出速度,但也会加大数据库内存消耗,因此不宜设置过大。
  • -r 选项用于指定单个文件的最大记录数,或者说,数据库中的行数。开启后 Dumpling 会开启表内并发,提高导出大表的速度。当上游为 TiDB 且版本为 v3.0 或更新版本时,设置 -r 参数大于 0 表示使用 TiDB region 信息划分表内并发,具体取值不影响划分算法。对上游为 MySQL 且表的主键是 int 的场景,该参数也有表内并发效果。
  • --compress gzip 选项可以用于压缩导出的数据。压缩可以显著降低导出数据的大小,同时如果存储的写入 I/O 带宽不足,可以使用该选项来加速导出。但该选项也有副作用,由于该选项会对每个文件单独压缩,因此会增加 CPU 消耗。

利用以上选项可以提高 Dumpling 的导出速度。

3、 Linux系统安装ossutil。
  • 参考文档:https://help.aliyun.com/document_detail/120075.htm?spm=a2c4g.11186623.0.0.3bc021a1JRIE8S#concept-303829
  1. 运行以下命令下载ossutil。

    wget https://gosspublic.alicdn.com/ossutil/1.7.14/ossutil64                           
    

    注意 复制下载地址时会自动加上spm编码内容,使用wget命令下载时注意删除链接中?spm=xxxx的内容。

  2. 运行以下命令修改文件执行权限。

    chmod 755 ossutil64
    
  3. 使用交互式配置生成配置文件。

    1. 输入配置命令。

      ./ossutil64 config
      
    2. 根据提示设置配置文件路径。

      建议直接按回车使用默认配置文件的路径。

      请输入配置文件名,文件名可以带路径(默认为:/home/user/.ossutilconfig,回车将使用默认路径。
      如果用户设置为其它路径,在使用命令时需要将--config-file选项设置为该路径): 
      

      ossutil默认使用/home/user/.ossutilconfig作为配置文件,若您设置了配置文件的路径,则每次使用命令时需增加**-c选项指定配置文件。例如配置文件保存为/home/config,使用ls**时,命令格式如下:

      ./ossutil64 ls oss://examplebucket -c /home/config
      
    3. 根据提示设置工具的语言。

      请输入语言CH或EN。工具使用的语言默认与操作系统保持一致。该配置项将在此次config命令设置成功后生效。

    4. 根据提示分别设置Endpoint、AccessKey ID、AccessKey Secret和STSToken参数。

      参数说明如下:

      参数说明
      endpoint填写Bucket所在地域的Endpoint。关于各地域Endpoint的更多信息,请参见访问域名和数据中心。您也可以增加http://https://指定ossutil访问OSS使用的协议,默认使用HTTP协议。例如,使用HTTPS协议访问华东1(杭州)的Bucket,设置为https://oss-cn-hangzhou.aliyuncs.com
      accessKeyID填写账号的AccessKey。使用阿里云账号或RAM用户访问时,AccessKey的获取方式,请参见创建AccessKey。使用STS临时授权账号访问时,AccessKey的获取方式,请参见使用STS临时访问凭证访问OSS
      accessKeySecret
      stsToken使用STS临时授权账号访问OSS时需要配置该项,否则置空即可。关于stsToken的生成方式,请参见临时访问凭证

      说明 关于配置文件的更多信息,请参见config

    5. 运行以下命令,验证是否已成功安装ossutil。

      ./ossutil64
      

      如果屏幕中输出ossutil所有支持的命令,表明已成功安装ossutil。

4、导出脚本

backup-mysql-to-oss.sh

#!/bin/bash

db_host=IP
db_port=3306
db_user=root
db_password='Pass@w0rd'
BACKUPFILE_PATH=/data/selfbuit-tools-mysql-db-yearning-jumpserver-backup
Ding_Webhook_Token='**dingding_webhook**'
# 要导出的库名以逗号分割
databases=dbname1,dbname2

DATE=$(date +"%F-%H%M")

mkdir -p $BACKUPFILE_PATH/$DATE/databases-sql
echo "$(date +"%F %H:%M:%S") 1. 开始进行备份: $databases"
dumpling \
    -c gzip \
    -h $source_db_host \
    -P $source_db_port \
    -u $source_db_user \
    -p $source_db_password \
    -B $databases \
    --filter "*.*" \
    --filetype sql \
    --threads 4 \
    -o $BACKUPFILE_PATH/$DATE/databases-sql \
    -F 256MiB \
    --logfile $BACKUPFILE_PATH/$DATE/export-task.log >$BACKUPFILE_PATH/$DATE/dumpling-nohupout.log 2>&1

if [ $? -eq 0 ];then
    echo "$(date +"%F %H:%M:%S") 2. 备份完成"
    echo "$(date +"%F %H:%M:%S") 已备份Databases: $databases" > $BACKUPFILE_PATH/$DATE/backup-meta
    rm -f $BACKUPFILE_PATH/$DATE/dumpling-nohupout.log $BACKUPFILE_PATH/$DATE/export-task.log
    cd $BACKUPFILE_PATH/
    tar -zcf backup-$DATE.tar.gz $DATE
    echo "$(date +"%F %H:%M:%S") 3. 备份压缩已完成"
    echo "$(date +"%F %H:%M:%S") 4. 正在上传备份压缩文件至OSS"
    ossutil64 cp $BACKUPFILE_PATH/backup-$DATE.tar.gz oss://BucketName/db-backup/backup-$DATE.tar.gz  2>&1 > /dev/null
    echo "$(date +"%F %H:%M:%S") 5. 已完成上传备份压缩文件至OSS"
    curl -s https://oapi.dingtalk.com/robot/send?access_token="$Ding_Webhook_Token" \
    -H 'Content-Type: application/json' \
    -d '{
        "msgtype": "markdown",
        "markdown": {
            "title": "数据库备份",
            "text": "'$DATE'\n MySQL已备份以下库并上传至OSS:\n> '$databases'"
        },
        "at": {
            "isAtAll": true
        }
    }' 2>&1 > /dev/null
    echo "$(date +"%F %H:%M:%S") 6. 已发送钉钉通知"
    #rm -rf $BACKUPFILE_PATH/$DATE $BACKUPFILE_PATH/selfbuit-mysql-backup-$DATE.tar.gz
    echo "$(date +"%F %H:%M:%S") 7. 已删除临时存储备份"
fi
5、参数介绍
  • -h-P-u 分别代表地址、端口、用户。如果需要密码验证,可以使用 -p $YOUR_SECRET_PASSWORD 将密码传给 Dumpling。
  • -o 用于选择存储导出文件的目录,支持本地文件路径或外部存储 URL 格式。
  • -t 用于指定导出的线程数。增加线程数会增加 Dumpling 并发度提高导出速度,但也会加大数据库内存消耗,因此不宜设置过大。一般不超过 64。
  • -r 用于指定单个文件的最大行数,指定该参数后 Dumpling 会开启表内并发加速导出,同时减少内存使用。当上游为 TiDB 且版本为 v3.0 或更新版本时,设置 -r 参数大于 0 表示使用 TiDB region 信息划分表内并发,具体取值不影响划分算法。对上游为 MySQL 且表的主键是 int 的场景,该参数也有表内并发效果。
  • -F 选项用于指定单个文件的最大大小,单位为 MiB,可接受类似 5GiB8KB 的输入。如果你想使用 TiDB Lightning 将该文件加载到 TiDB 实例中,建议将 -F 选项的值保持在 256 MiB 或以下。

如果导出的单表大小超过 10 GB,强烈建议使用 -r-F 参数。

5、主要选项表
主要选项用途默认值
-V 或 --version输出 Dumpling 版本并直接退出
-B 或 --database导出指定数据库
-T 或 --tables-list导出指定数据表
-f 或 --filter导出能匹配模式的表,语法可参考 table-filter*.*(导出所有库表)
–case-sensitivetable-filter 是否大小写敏感false,大小写不敏感
-h 或 --host连接的数据库主机的地址“127.0.0.1”
-t 或 --threads备份并发线程数4
-r 或 --rows将 table 划分成 row 行数据,一般针对大表操作并发生成多个文件。
-L 或 --logfile日志输出地址,为空时会输出到控制台“”
–loglevel日志级别 {debug,info,warn,error,dpanic,panic,fatal}“info”
–logfmt日志输出格式 {text,json}“text”
-d 或 --no-data不导出数据,适用于只导出 schema 场景
–no-header导出 csv 格式的 table 数据,不生成 header
-W 或 --no-views不导出 viewtrue
-m 或 --no-schemas不导出 schema,只导出数据
-s 或–statement-size控制 INSERT SQL 语句的大小,单位 bytes
-F 或 --filesize将 table 数据划分出来的文件大小,需指明单位(如 128B, 64KiB, 32MiB, 1.5GiB
–filetype导出文件类型(csv/sql)“sql”
-o 或 --output导出文件路径“./export-${time}”
-S 或 --sql根据指定的 sql 导出数据,该选项不支持并发导出
–consistencyflush: dump 前用 FTWRL snapshot: 通过 TSO 来指定 dump 某个快照时间点的 TiDB 数据 lock: 对需要 dump 的所有表执行 lock tables read 命令 none: 不加锁 dump,无法保证一致性 auto: MySQL 默认用 flush, TiDB 默认用 snapshot“auto”
–snapshotsnapshot tso,只在 consistency=snapshot 下生效
–where对备份的数据表通过 where 条件指定范围
-p 或 --password连接的数据库主机的密码
-P 或 --port连接的数据库主机的端口4000
-u 或 --user连接的数据库主机的用户名“root”
–dump-empty-database导出空数据库的建库语句true
–ca用于 TLS 连接的 certificate authority 文件的地址
–cert用于 TLS 连接的 client certificate 文件的地址
–key用于 TLS 连接的 client private key 文件的地址
–csv-delimitercsv 文件中字符类型变量的定界符‘"’
–csv-separatorcsv 文件中各值的分隔符‘,’
–csv-null-valuecsv 文件空值的表示“\N”
–escape-backslash使用反斜杠 (\) 来转义导出文件中的特殊字符true
–output-filename-templategolang template 格式表示的数据文件名格式 支持 DB Table、Index 三个参数 分别表示数据文件的库名、表名、分块 ID{{.DB}}.{{.Table}}.{{.Index}}
–status-addrDumpling 的服务地址,包含了 Prometheus 拉取 metrics 信息及 pprof 调试的地址“:8281”
–tidb-mem-quota-query单条 dumpling 命令导出 SQL 语句的内存限制,单位为 byte,默认为 32 GB34359738368
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TiDB(“ Ti”代表Titanium)是一个开源的NewSQL数据库,它支持混合事务处理和分析处理(HTAP)工作负载。它与MySQL兼容,具有水平可伸缩性,强一致性和高可用性。 TiDB特点: 水平可伸缩性 TiDB只需添加新节点即可扩展SQL处理和存储。与仅纵向扩展的传统关系数据库相比,这使基础架构容量规划既简单又更具成本效益。 MySQL兼容语法 TiDB就像它是应用程序的MySQL 5.7服务器一样。您可以继续使用所有现有的MySQL客户端库,并且在许多情况下,您无需在应用程序中更改任何代码行。因为TiDB是从头开始构建的,而不是MySQL分支,所以请查看已知兼容性差异列表。 具有高度一致性的分布式事务 TiDB在内部将表分片为基于范围的小块,我们将其称为“区域”。每个区域的默认大小约为100MiB,并且TiDB在内部使用两阶段提交以确保以事务一致的方式维护区域。 云原生 TiDB旨在在公共,私有或混合云中工作,从而简化了部署,供应,操作和维护。 TiDB的存储层,称为TiKV,成为一个云计算原住民基金会在2018年会员项目TiDB平台的架构还允许SQL处理和存储在一个非常云友好的方式相互独立的缩放。 最小化ETL TiDB旨在支持事务处理(OLTP)和分析处理(OLAP)工作负载。这意味着,尽管您可能传统上已经在MySQL上进行了事务处理,然后将提取,转换和加载(ETL)数据提取到列存储中进行分析处理,但不再需要此步骤。 高可用性 TiDB使用Raft共识算法来确保数据高度可用,并在Raft组中的整个存储中安全地进行复制。如果发生故障,Raft组将自动为故障成员选出新的领导者,并自动修复TiDB集群,而无需任何手动干预。失败和自我修复操作对应用程序也是透明的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值