TiDB备份恢复工具

一、物理备份

  • B/R工具:

    • Backup:备份工具

    • Restore:恢复工具

  • 工作原理

    • BR 将备份或恢复操作命令下发到各个 TiKV 节点。TiKV 收到命令后执行相应的备份或恢复操作
    • 需要一个网络共享存储作为备份目录,不同的TiKV节点的数据可以备份到一个目录中

1.1 配置NFS共享存储备份目录

服务端:

mkdir -p /data/dbbackup
chown nfsnobody:nfsnobody -R /data/dbbackup
cat << EOF >> /etc/exports
/data/dbbackup *(insecure,rw,sync,no_root_squash)
EOF
chmod 777 -R /data/dbbackup
systemctl start nfs-utils

客户端:

yum install nfs-utils -y
mkdir -p /data/dbbackup
mount -t nfs 192.168.1.205:/data/dbbackup /data/dbbackup

1.2 准备测试数据

mysql -uroot -h192.168.1.204 -P4000 -pAdmin#123 -e "create database test1;"

mysql -uroot -h192.168.1.204 -P4000 -pAdmin#123 -e "create table testtab1(id INT NOT NULL PRIMARY KEY,name VARCHAR(255));"

for i in `seq 1 10`
do 
    mysql -uroot -h192.168.1.204 -P4000 -pAdmin#123 -e "insert into test1.testtab1 value($i,'zhangsan$i')"
done

mysql -uroot -h192.168.1.204 -P4000 -pAdmin#123 -e "select * from test1.testtab1;"

image-20221012145218683

1.3 全量备份与恢复

1.3.1 全量备份

#安装br
cd TIDB安装目录
cp br-{version}-linux-amd64.tar.gz ../
cd ..
tar br-{version}-linux-amd64.tar.gz
mv br /bin/

# 获取当前日期
dataDir=`date +%Y%m%d`

# 创建全备目录并赋权
mkdir -p /data/dbbackup/all$dataDir
chmod 777 /data/dbbackup/all$dataDir
# 开始全备
#br backup full代表全库 --pd "{ip地址与端口}" -s "local://{备份目录}" --log-file {备份日志输入目录}
br backup full --pd "192.168.1.205:2379" -s "local:///data/dbbackup/all$dataDir" --log-file backupfull.log

image-20221012154619584

image-20221012154601459

1.3.2 删除数据库

image-20221012154329250

1.3.3 全量恢复

#br restore full代表全库 --pd "{ip地址与端口}" --ratelimit {任务的速率限制,每节点MB/s} --storage "local://{备份目录}" --log-file {备份日志输入目录}
br restore full --pd "192.168.1.205:2379" --ratelimit 5 --storage "local:///data/dbbackup/all20221012/" --log-file restorefull.log

image-20221012155413479

image-20221012155110296

1.4 单库备份与恢复

1.4.1 单库备份

# 单库备份
dataDir=`date +%Y%m%d`
mkdir -p /data/dbbackup/Onedb$dataDir
chmod 777 /data/dbbackup/Onedb$dataDir

#br backup db --db {数据库名} --pd "{ip地址与端口}" -s "local://{备份目录}" --log-file {备份日志输入目录}
br backup db --db test1 --pd "192.168.1.205:2379" -s "local:///data/dbbackup/Onedb$dataDir" --log-file backupfull.log

image-20221012160017991

1.4.2 删除数据库

image-20221012160445827

1.4.3 恢复单库数据

#br restore db --db {数据库名} --pd "{ip地址与端口}" --ratelimit {任务的速率限制,每节点MB/s} --storage "local://{备份目录}" --log-file {备份日志输入目录}

br restore db --db test1 --pd "192.168.1.205:2379" --ratelimit 5 --storage "local:///data/dbbackup/Onedb20221012/" --log-file restorefull.log

image-20221012160642775

1.5 单表备份与恢复

1.5.1 单表备份

dataDir=`date +%Y%m%d`
mkdir -p /data/dbbackup/onedbt$dataDir
chmod 777 /data/dbbackup/onedbt$dataDir

#br backup db --db {数据库名} --table {表名} --pd "{ip地址与端口}" --ratelimit {任务的速率限制,每节点MB/s} --storage "local://{备份目录}" --log-file {备份日志输入目录}

br backup table --db test1 --table testtab1 --pd "192.168.1.205:2379" -s "local:///data/dbbackup/onedbt$dataDir" --log-file backupfull.log

image-20221012161121913

1.5.2 删除数据表

1.5.2.1 查看表

image-20221012161410153

1.5.2.2 删除表

image-20221012161543870

1.5.3 恢复表

#br restore table单个表操作 --db {数据库名} --table {表名} --pd "{ip地址与端口}" --ratelimit {任务的速率限制,每节点MB/s} --storage "local://{备份目录}" --log-file {备份日志输入目录}

br restore table --db test1 --table testtab1 --pd "192.168.1.205:2379" --ratelimit 5 --storage "local:///data/dbbackup/onedbt20221012/" --log-file restorefull.log

image-20221012162011414

1.6 增量备份与恢复

1.6.1 增量数据介绍

如果想要备份增量,只需要在备份的时候指定上一次的备份时

间戳 --lastbackupts 即可。

  • 注意增量备份有以下限制:

    • 增量备份需要与前一次全量备份在不同的路径下

    • GC safepoint 必须在 lastbackupts 之前

1.6.2 插入增量数据

for i in `seq 21 30`
do 
    mysql -uroot -h192.168.1.204 -P4000 -pAdmin#123 -e "insert into test1.testtab1 value($i,'zhangsan$i')"
done

mysql -uroot -h192.168.1.204 -P4000 -pAdmin#123 -e "select * from test1.testtab1;"

image-20221012165031481

1.6.3 进行增量备份

获取上一次备份的时间戳,增量数据记录 (LAST_BACKUP_TS,current PD timestamp] 之间的数据变更。
br validate decode --field="end-version" -s local:///data/dbbackup/all20221012/ |tail -n1
436617729606418436
LAST_BACKUP_TS=`br validate decode --field="end-version" -s local:///data/dbbackup/all20221012/ |tail -n1`
mkdir -p /data/dbbackup/add20221012/
chmod 777 /data/dbbackup/add20221012/

br backup full --pd "192.168.1.204:2379" -s "local:///data/dbbackup/add20221012/" --log-file backupfull.log --lastbackupts ${LAST_BACKUP_TS}

1.6.4 删除数据

image-20221012170107043

1.6.5 恢复数据

# 恢复全量数据
br restore full --pd "192.168.1.204:2379" -s "local:///data/dbbackup/add20221012/"

# 恢复增量备份数据
br restore full --pd "192.168.1.204:2379" -s "local:///data/dbbackup/add20221012/"

全量恢复结果

image-20221012170512532

增量备份结果

image-20221012170503277

二、逻辑备份

安装dumpling与lingtning

#安装dumpling与lingtning
cd TIDB安装目录
cp dumpling-{version}-linux-amd64.tar.gz ../
cp tidb-lightning-{version}-linux-amd64.tar.gz ../
cd ..
tar dumpling-{version}-linux-amd64.tar.gz
tar tidb-lightning-{version}-linux-amd64.tar.gz
mv dumpling /bin/
mv tidb-lightning /bin/
  • dumpling导出
  • 备份库
#dumpling -h{指定IP} -P{端口} -u{用户} -p{密码} -B {指定数据库} -o {指定备份目录}
dumpling -h192.168.1.204 -P4000 -uroot -pAdmin#123 -B test1 -o /data/test1/

# 带条件备份
dumpling -h192.168.1.204 -P4000 -uroot -pAdmin#123 -B test1 --where='id < 10' -o /data/test1/
  • lingtning导入

创建配置文件

cat << EOF > /data/tidb-lightning.toml
[lightning]

# 转换数据的并发数,默认为逻辑 CPU 数量,不需要配置。
# 混合部署的情况下可以配置为逻辑 CPU 的 75% 大小。
# region-concurrency =

# 日志
level = "info"
file = "tidb-lightning.log"

[tikv-importer]
# backend 设置为 local 模式
backend = "local"
# 设置本地临时存储路径
sorted-kv-dir = "/tmp/sorted-kv-dir"

[mydumper]
# 源数据目录。
data-source-dir = "/data/test1"

[tidb]
# 目标集群的信息。tidb-server 的监听地址,填一个即可。
host = "192.168.1.204"
port = 4000
user = "root"
password = "Admin#123"
# 表架构信息在从 TiDB 的“状态端口”获取。
status-port = 10080
# pd-server 的地址,填一个即可
pd-addr = "192.168.1.204:2379"
EOF

删除数据表

image-20221012174918794

恢复数据

tidb-lightning -config /data/tidb-lightning.toml

image-20221012174951031

image-20221012175013213

三、使用binlog恢复数据

需要指定start/stop-datatime, 或者start/stop-tso.

可通过查看备份日志查看datatime,或通过命令br validate decode --field="end-version" -s local:///tmp/backup 查看tso.

下载工具: 
wget https://download.pingcap.org/tidb-binlog-cluster-latest-linux-amd64.tar.gz
tar -xvf tidb-binlog-cluster-latest-linux-amd64.tar.gz

4.1 配置reparo.toml
# Drainer 输出的 protobuf 格式 binlog 文件的存储路径。
data-dir = "/tidb-deploy/drainer-8249/data.drainer"

# 日志输出信息等级设置:debug, info, warn, error, fatal (默认值:info)。
log-level = "info"

# 使用 start-datetime 和 stop-datetime 来选择恢复指定时间范围内的 binlog,格式为 “2006-01-02 15:04:05”。
#start-datetime = ""
#stop-datetime = ""

# start-tso、stop-tso 分别对应 start-datetime 和 stop-datetime,也是用于恢复指定时间范围内的 binlog,用 tso 的值来设置。如果已经设置了 start-datetime 和 stop-datetime,就不需要再设置 start-tso 和 stop-tso。
# start-tso = 0
# stop-tso = 0

# 下游服务类型。 取值为 print, mysql(默认值:print)。当值为 print 时,只做解析打印到标准输出,不执行 SQL;如果为 mysql,则需要在 [dest-db] 中配置 host、port、user、password 等信息。
dest-type = "mysql"

# 输出到下游数据库一个事务的 SQL 语句数量(默认 20)。
txn-batch = 20

# 同步下游的并发数,该值设置越高同步的吞吐性能越好(默认 16)。
worker-count = 16

# 安全模式配置。取值为 true 或 false(默认值:false)。当值为 true 时,Reparo 会将 update 语句拆分为 delete + replace 语句。
safe-mode = false

# replicate-do-db 和 replicate-do-table 用于指定恢复的库和表,replicate-do-db 的优先级高于 replicate-do-table。支持使用正则表达式来配置,需要以 '~' 开始声明使用正则表达式。
# 注:replicate-do-db 和 replicate-do-table 使用方式与 Drainer 的使用方式一致。
# replicate-do-db = ["~^b.*","s1"]
# [[replicate-do-table]]
# db-name ="test"
# tbl-name = "log"
# [[replicate-do-table]]
# db-name ="test"
# tbl-name = "~^a.*"

# 如果 dest-type 设置为 mysql, 需要配置 dest-db。
[dest-db]
host = "xxx.xx.xxx.xx"
port = xxxx
user = "root"
password = ""

4.2 启动reparo进行binlog恢复

./bin/reparo   -config ~/reparo.toml
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值