文章目录
一、物理备份
-
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;"
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
1.3.2 删除数据库
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
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
1.4.2 删除数据库
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
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
1.5.2 删除数据表
1.5.2.1 查看表
1.5.2.2 删除表
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
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;"
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 删除数据
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/"
全量恢复结果
增量备份结果
二、逻辑备份
安装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
删除数据表
恢复数据
tidb-lightning -config /data/tidb-lightning.toml
三、使用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