TIDB運(yùn)維文檔(下)
點(diǎn)擊上方“IT那活兒”公眾號(hào),關(guān)注后了解更多內(nèi)容,不管IT什么活兒,干就完了?。?!
接上篇《TiDB運(yùn)維文檔(上)》,我們今天講一下TIDB數(shù)據(jù)庫(kù)的日常運(yùn)維。
1.1 升級(jí) TiUP 或更新 TiUP 離線鏡像
1.2 檢查當(dāng)前集群的健康狀況
執(zhí)行結(jié)束后,最后會(huì)輸出 region status 檢查結(jié)果。
如果結(jié)果為 "All regions are healthy",則說(shuō)明當(dāng)前集群中所有 region 均為健康狀態(tài),可以繼續(xù)執(zhí)行升級(jí);
如果結(jié)果為 "Regions are not fully healthy: m miss-peer, n pending-peer" 并提示 "Please fix unhealthy regions before other operations.",則說(shuō)明當(dāng)前集群中有 region 處在異常狀態(tài),應(yīng)先排除相應(yīng)異常狀態(tài),并再次檢查結(jié)果為 "All regions are healthy" 后再繼續(xù)升級(jí)。
1.3 升級(jí) TiDB 集群
升級(jí)的方式有兩種:不停機(jī)升級(jí)和停機(jī)升級(jí)。TiUP Cluster 默認(rèn)的升級(jí) TiDB 集群的方式是不停機(jī)升級(jí),即升級(jí)過(guò)程中集群仍然可以對(duì)外提供服務(wù)。升級(jí)時(shí)會(huì)對(duì)各節(jié)點(diǎn)逐個(gè)遷移 leader 后再升級(jí)和重啟,因此對(duì)于大規(guī)模集群需要較長(zhǎng)時(shí)間才能完成整個(gè)升級(jí)操作。如果業(yè)務(wù)有維護(hù)窗口可供數(shù)據(jù)庫(kù)停機(jī)維護(hù),則可以使用停機(jī)升級(jí)的方式快速進(jìn)行升級(jí)操作。tiup cluster upgrade <cluster-name> v5.1.2
注意:
2.1 擴(kuò)容 TiDB/PD/TiKV 節(jié)點(diǎn)
2.1.1 在 scale-out.yaml 文件添加擴(kuò)容拓?fù)渑渲?/span>
tidb_servers:
- host: 10.0.1.5
ssh_port: 22
port: 4000
status_port: 10080
deploy_dir: /data/deploy/install/deploy/tidb-4000
log_dir: /data/deploy/install/log/tidb-4000
tikv_servers:
- host: 10.0.1.5
ssh_port: 22
port: 20160
status_port: 20180
deploy_dir: /data/deploy/install/deploy/tikv-20160
data_dir: /data/deploy/install/data/tikv-20160
log_dir: /data/deploy/install/log/tikv-20160
pd_servers:
- host: 10.0.1.5
ssh_port: 22
name: pd-1
client_port: 2379
peer_port: 2380
deploy_dir: /data/deploy/install/deploy/pd-2379
data_dir: /data/deploy/install/data/pd-2379
log_dir: /data/deploy/install/log/pd-2379
可以使用 tiup cluster edit-config 查看當(dāng)前集群的配置信息,因?yàn)槠渲械?global 和 server_configs 參數(shù)配置默認(rèn)會(huì)被 scale-out.yaml 繼承,因此也會(huì)在 scale-out.yaml 中生效。2.1.2 執(zhí)行擴(kuò)容命令
tiup cluster scale-out scale-out.yaml
預(yù)期輸出 Scaled cluster out successfully 信息,表示擴(kuò)容操作成功。須提前打通中控機(jī)到目標(biāo)主機(jī)的sudo互信。2.2 擴(kuò)容 TiFlash 節(jié)點(diǎn)
2.2.1 添加節(jié)點(diǎn)信息到 scale-out.yaml 文件
編寫 scale-out.yaml 文件,添加該 TiFlash 節(jié)點(diǎn)信息(目前只支持 ip,不支持域名):tiflash_servers:
- host: 10.0.1.4
2.2.2 運(yùn)行擴(kuò)容命令
tiup cluster scaltiup cluster scale-out
scale-out.yamle-out scale-out.yaml
2.3 擴(kuò)容 TiCDC 節(jié)點(diǎn)
2.3.1 添加節(jié)點(diǎn)信息到 scale-out.yaml 文件
cdc_servers:
- host: 10.0.1.3
- host: 10.0.1.4
2.3.2 運(yùn)行擴(kuò)容命令
tiup cluster scale-out scale-out.yaml
2.4 縮容 TiDB/PD/TiKV 節(jié)點(diǎn)
2.4.1 查看節(jié)點(diǎn) ID 信息
2.4.2 執(zhí)行縮容操作
tiup cluster scale-in <cluster-name> --node 10.0.1.5:20160
其中 --node 參數(shù)為需要下線節(jié)點(diǎn)的 ID。預(yù)期輸出 Scaled cluster in successfully 信息,表示縮容操作成功。2.4.3 檢查集群狀態(tài)
下線需要一定時(shí)間,下線節(jié)點(diǎn)的狀態(tài)變?yōu)?Tombstone 就說(shuō)明下線成功。執(zhí)行如下命令檢查節(jié)點(diǎn)是否下線成功:2.5 縮容 TiFlash 節(jié)點(diǎn)2.5.1 根據(jù) TiFlash 剩余節(jié)點(diǎn)數(shù)調(diào)整數(shù)據(jù)表的副本數(shù)
在下線節(jié)點(diǎn)之前,確保 TiFlash 集群剩余節(jié)點(diǎn)數(shù)大于等于所有數(shù)據(jù)表的最大副本數(shù),否則需要修改相關(guān)表的 TiFlash 副本數(shù)。在 TiDB 客戶端中針對(duì)所有副本數(shù)大于集群剩余 TiFlash 節(jié)點(diǎn)數(shù)的表執(zhí)行:alter table name>.<table-name> set tiflash replica 0;
等待相關(guān)表的 TiFlash 副本被刪除(按照查看表同步進(jìn)度一節(jié)操作,查不到相關(guān)表的同步信息時(shí)即為副本被刪除)。2.5.2 執(zhí)行縮容操作
通過(guò)以下命令確定需要下線的節(jié)點(diǎn)名稱:執(zhí)行 scale-in 命令來(lái)下線節(jié)點(diǎn),假設(shè)步驟 1 中獲得該節(jié)點(diǎn)名為 10.0.1.4:9000tiup cluster scale-in <cluster-name> --node 10.0.1.4:9000
2.6 縮容 TiCDC 節(jié)點(diǎn)
tiup cluster scale-in <cluster-name> --node 10.0.1.4:8300
3.1 BR備份恢復(fù)
BR 全稱為 Backup & Restore,是 TiDB 分布式備份恢復(fù)的命令行工具,用于對(duì) TiDB 集群進(jìn)行數(shù)據(jù)備份和恢復(fù)。BR 只支持在 TiDB v3.1 及以上版本使用。 BR 將備份或恢復(fù)操作命令下發(fā)到各個(gè) TiKV 節(jié)點(diǎn)。TiKV 收到命令后執(zhí)行相應(yīng)的備份或恢復(fù)操作。此備份只備份各節(jié)點(diǎn)的leader副本。 在一次備份或恢復(fù)中,各個(gè) TiKV 節(jié)點(diǎn)都會(huì)有一個(gè)對(duì)應(yīng)的備份路徑,TiKV 備份時(shí)產(chǎn)生的備份文件將會(huì)保存在該路徑下,恢復(fù)時(shí)也會(huì)從該路徑讀取相應(yīng)的備份文件。備份路徑下會(huì)生成以下幾種類型文件:
- SST 文件:存儲(chǔ) TiKV 備份下來(lái)的數(shù)據(jù)信息。
- backupmeta 文件:存儲(chǔ)本次備份的元信息,包括備份文件數(shù)、備份文件的 Key 區(qū)間、備份文件大小和備份文件 Hash (sha256) 值。
- backup.lock 文件:用于防止多次備份到同一目錄。
1) 推薦部署配置
推薦 BR 部署在 PD 節(jié)點(diǎn)上。推薦使用一塊高性能 SSD 網(wǎng)盤,掛載到 BR 節(jié)點(diǎn)和所有 TiKV 節(jié)點(diǎn)上,網(wǎng)盤推薦萬(wàn)兆網(wǎng)卡,否則帶寬有可能成為備份恢復(fù)時(shí)的性能瓶頸。2) 備份數(shù)據(jù)
br backup full
--pd "${PDIP}:2379"
--storage "local:///tmp/backup"
--ratelimit 128
--log-file backupfull.log
以上命令中,--ratelimit 選項(xiàng)限制了每個(gè) TiKV 執(zhí)行備份任務(wù)的速度上限(單位 MiB/s)。--log-file 選項(xiàng)指定把 BR 的 log 寫到 backupfull.log 文件中。br backup db
--pd "${PDIP}:2379"
--db test
--storage "local:///tmp/backup"
--ratelimit 128
--log-file backuptable.log
db 子命令的選項(xiàng)為 --db,用來(lái)指定數(shù)據(jù)庫(kù)名。其他選項(xiàng)的含義與備份全部集群數(shù)據(jù)相同。br backup table
--pd "${PDIP}:2379"
--db test
--table usertable
--storage "local:///tmp/backup"
--ratelimit 128
--log-file backuptable.log
table 子命令有 --db 和 --table 兩個(gè)選項(xiàng),分別用來(lái)指定數(shù)據(jù)庫(kù)名和表名。其他選項(xiàng)的含義與備份全部集群數(shù)據(jù)相同。iv) 使用表庫(kù)功能過(guò)濾備份多表
使用表庫(kù)過(guò)濾功能備份多張表的數(shù)據(jù)。如果你需要以更復(fù)雜的過(guò)濾條件來(lái)備份多個(gè)表,執(zhí)行 br backup full 命令,并使用 --filter 或 -f 來(lái)指定表庫(kù)過(guò)濾規(guī)則。用例:以下命令將所有 db*.tbl* 形式的表格數(shù)據(jù)備份到每個(gè) TiKV 節(jié)點(diǎn)上的 /tmp/backup 路徑,并將 backupmeta 文件寫入該路徑。br backup full
--pd "${PDIP}:2379"
--filter db*.tbl*
--storage "local:///tmp/backup"
--ratelimit 128
--log-file backupfull.log
3) 恢復(fù)數(shù)據(jù)
要將全部備份數(shù)據(jù)恢復(fù)到集群中來(lái),可使用 br restore full 命令。該命令的使用幫助可以通過(guò) br restore full -h 或 br restore full --help 來(lái)獲取。用例:將 /tmp/backup 路徑中的全部備份數(shù)據(jù)恢復(fù)到集群中。br restore full
--pd "${PDIP}:2379"
--storage "local:///tmp/backup"
--ratelimit 128
--log-file restorefull.log
以上命令中,--ratelimit 選項(xiàng)限制了每個(gè) TiKV 執(zhí)行恢復(fù)任務(wù)的速度上限(單位 MiB/s)。--log-file 選項(xiàng)指定把 BR 的 log 寫到 restorefull.log 文件中。ii) 恢復(fù)單個(gè)數(shù)據(jù)庫(kù)的數(shù)據(jù)
要將備份數(shù)據(jù)中的某個(gè)數(shù)據(jù)庫(kù)恢復(fù)到集群中,可以使用 br restore db 命令。該命令的使用幫助可以通過(guò) br restore db -h 或 br restore db --help 來(lái)獲取。用例:將 /tmp/backup 路徑中備份數(shù)據(jù)中的某個(gè)數(shù)據(jù)庫(kù)恢復(fù)到集群中。br restore db
--pd "${PDIP}:2379"
--db "test"
--ratelimit 128
--storage "local:///tmp/backup"
--log-file restorefull.log
以上命令中 --db 選項(xiàng)指定了需要恢復(fù)的數(shù)據(jù)庫(kù)名字。其余選項(xiàng)的含義與恢復(fù)全部備份數(shù)據(jù)相同。iii) 恢復(fù)單張表的數(shù)據(jù)
要將備份數(shù)據(jù)中的某張數(shù)據(jù)表恢復(fù)到集群中,可以使用 br restore table 命令。該命令的使用幫助可通過(guò) br restore table -h 或 br restore table --help 來(lái)獲取。用例:將 /tmp/backup 路徑下的備份數(shù)據(jù)中的某個(gè)數(shù)據(jù)表恢復(fù)到集群中。br restore table
--pd "${PDIP}:2379"
--db "test"
--table "usertable"
--ratelimit 128
--storage "local:///tmp/backup"
--log-file restorefull.log
iv) 使用表庫(kù)功能過(guò)濾恢復(fù)數(shù)據(jù)
如果你需要用復(fù)雜的過(guò)濾條件來(lái)恢復(fù)多個(gè)表,執(zhí)行 br restore full 命令,并用 --filter 或 -f 指定使用表庫(kù)過(guò)濾。用例:以下命令將備份在 /tmp/backup 路徑的表的子集恢復(fù)到集群中。br restore full
--pd "${PDIP}:2379"
--filter db*.tbl*
--storage "local:///tmp/backup"
--log-file restorefull.log
3.2 TiCDC異地庫(kù)備份
B集群作為備份集群,GC time設(shè)置為 1天,生產(chǎn)A集群需要恢復(fù)數(shù)據(jù)時(shí),可通過(guò)Dumpling工具導(dǎo)出指定時(shí)間點(diǎn)之前數(shù)據(jù),進(jìn)行數(shù)據(jù)恢復(fù)。3.3 DumplingTiDB Lightning備份恢復(fù)
輸出文件格式:
- metadata:此文件包含導(dǎo)出的起始時(shí)間,以及 master binary log 的位置。
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:創(chuàng)建 schema 的 SQL 文件。
CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
- {schema}.{table}-schema.sql:創(chuàng)建 table 的 SQL 文件。
CREATE TABLE `t1` (
`id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
- {schema}.{table}.{0001}.{sql|csv}:數(shù)據(jù)源文件。
/*!40101 SET NAMES binary*/;
INSERT INTO `t1` VALUES
(1);
1) 備份工具Dumpling
該工具可以把存儲(chǔ)在 TiDB/MySQL 中的數(shù)據(jù)導(dǎo)出為 SQL 或者 CSV 格式,可以用于完成邏輯上的全量備份或者導(dǎo)出。./dumpling
-u root
-P 4000
-h 127.0.0.1
--filetype sql
-o /tmp/test
-t 8
-r 200000
-F 256MiB
- --filetype:導(dǎo)出文件類型,sql|csv。
- -o:用于選擇存儲(chǔ)導(dǎo)出文件的目錄。
- -t:用于指定導(dǎo)出的線程數(shù)。增加線程數(shù)會(huì)增加 Dumpling 并發(fā)度提高導(dǎo)出速度,但也會(huì)加大數(shù)據(jù)庫(kù)內(nèi)存消耗,因此不宜設(shè)置過(guò)大。
- -r:用于指定單個(gè)文件的最大行數(shù),指定該參數(shù)后 Dumpling 會(huì)開啟表內(nèi)并發(fā)加速導(dǎo)出,同時(shí)減少內(nèi)存使用。
- -F:選項(xiàng)用于指定單個(gè)文件的最大大?。▎挝粸?MiB,可接受類似 5GiB 或 8KB 的輸入)。
例: --filter "employees.*" --sql:導(dǎo)出scv文件時(shí)條件過(guò)濾。例: --sql select * from `test`.`sbtest1` where id < 100參數(shù)列表:
| | |
| | |
| 導(dǎo)出指定數(shù)據(jù)庫(kù) | |
| | |
| 導(dǎo)出能匹配模式的表,語(yǔ)法可參考 filter.txt | |
| | |
| 連接的數(shù)據(jù)庫(kù)主機(jī)的地址 | |
| | |
| 將 table 劃分成 row 行數(shù)據(jù),一般針對(duì)大表操作并發(fā)生成多個(gè)文件。 | |
| 日志輸出地址,為空時(shí)會(huì)輸出到控制臺(tái) | |
| 日志級(jí)別 {debug,info,warn,error,dpanic,panic,fatal} | |
| | |
| 不導(dǎo)出數(shù)據(jù),適用于只導(dǎo)出 schema 場(chǎng)景 | |
| 導(dǎo)出 csv 格式的 table 數(shù)據(jù),不生成 header | |
| | |
| 不導(dǎo)出 schema,只導(dǎo)出數(shù)據(jù) | |
| 控制 INSERT SQL 語(yǔ)句的大小,單位 bytes | |
| 將 table 數(shù)據(jù)劃分出來(lái)的文件大小,需指明單位(如 128B, 64KiB, 32MiB, 1.5GiB) | |
| | |
| | |
| 根據(jù)指定的 sql 導(dǎo)出數(shù)據(jù),該選項(xiàng)不支持并發(fā)導(dǎo)出 | |
| | |
snapshot: 通過(guò) TSO 來(lái)指定 dump 某個(gè)快照時(shí)間點(diǎn)的 TiDB 數(shù)據(jù) |
lock: 對(duì)需要 dump 的所有表執(zhí)行 lock tables read 命令 |
none: 不加鎖 dump,無(wú)法保證一致性 |
auto: MySQL 默認(rèn)用 flush, TiDB 默認(rèn)用 snapshot |
| snapshot tso,只在 consistency=snapshot 下生效 | |
| 對(duì)備份的數(shù)據(jù)表通過(guò) where 條件指定范圍 | |
| 連接的數(shù)據(jù)庫(kù)主機(jī)的密碼 | |
| 連接的數(shù)據(jù)庫(kù)主機(jī)的端口 | |
| 連接的數(shù)據(jù)庫(kù)主機(jī)的用戶名 | |
| 導(dǎo)出空數(shù)據(jù)庫(kù)的建庫(kù)語(yǔ)句 | |
| 用于 TLS 連接的 certificate authority 文件的地址 | |
| 用于 TLS 連接的 client certificate 文件的地址 | |
| 用于 TLS 連接的 client private key 文件的地址 | |
| | |
| | |
| | |
| 使用反斜杠 () 來(lái)轉(zhuǎn)義導(dǎo)出文件中的特殊字符 | |
--output-filename-template | 以 golang template 格式表示的數(shù)據(jù)文件名格式 | {{.DB}}.{{.Table}}.{{.Index}} |
支持 {{.DB}}、{{.Table}}、{{.Index}} 三個(gè)參數(shù) |
分別表示數(shù)據(jù)文件的庫(kù)名、表名、分塊 ID |
| Dumpling 的服務(wù)地址,包含了 Prometheus 拉取 metrics 信息及 pprof 調(diào)試的地址 | |
| 單條 dumpling 命令導(dǎo)出 SQL 語(yǔ)句的內(nèi)存限制,單位為 byte,默認(rèn)為 32 GB | |
2) 恢復(fù)工具Tidb Lightning
TiDB Lightning 是一個(gè)將全量數(shù)據(jù)高速導(dǎo)入到 TiDB 集群的工具。tidb-lightning --config cfg.toml --backend tidb -tidb-
host 127.0.0.1 -tidb-user root --tidb-password passwd -
tidb-port 4000 -d /home/tidb/bakfile/9
Local-backend 工作原理:
TiDB Lightning 整體工作原理如下:
- i) 在導(dǎo)入數(shù)據(jù)之前,tidb-lightning 會(huì)自動(dòng)將 TiKV 集群切換為“導(dǎo)入模式” (import mode),優(yōu)化寫入效率并停止自動(dòng)壓縮。
- ii) tidb-lightning 會(huì)在目標(biāo)數(shù)據(jù)庫(kù)建立架構(gòu)和表,并獲取其元數(shù)據(jù)。
- iii) 每張表都會(huì)被分割為多個(gè)連續(xù)的區(qū)塊,這樣來(lái)自大表 (200 GB+) 的數(shù)據(jù)就可以用增量方式并行導(dǎo)入。
- iv) tidb-lightning 會(huì)為每一個(gè)區(qū)塊準(zhǔn)備一個(gè)“引擎文件 (engine file)”來(lái)處理鍵值對(duì)。tidb-lightning 會(huì)并發(fā)讀取 SQL dump,將數(shù)據(jù)源轉(zhuǎn)換成與 TiDB 相同編碼的鍵值對(duì),然后將這些鍵值對(duì)排序?qū)懭氡镜嘏R時(shí)存儲(chǔ)文件中。
- v) 當(dāng)一個(gè)引擎文件數(shù)據(jù)寫入完畢時(shí),tidb-lightning 便開始對(duì)目標(biāo) TiKV 集群數(shù)據(jù)進(jìn)行分裂和調(diào)度,然后導(dǎo)入數(shù)據(jù)到 TiKV 集群。
- vi) 引擎文件包含兩種:數(shù)據(jù)引擎與索引引擎,各自又對(duì)應(yīng)兩種鍵值對(duì):行數(shù)據(jù)和次級(jí)索引。通常行數(shù)據(jù)在數(shù)據(jù)源里是完全有序的,而次級(jí)索引是無(wú)序的。因此,數(shù)據(jù)引擎文件在對(duì)應(yīng)區(qū)塊寫入完成后會(huì)被立即上傳,而所有的索引引擎文件只有在整張表所有區(qū)塊編碼完成后才會(huì)執(zhí)行導(dǎo)入。
- vii) 整張表相關(guān)聯(lián)的所有引擎文件完成導(dǎo)入后,tidb-lightning 會(huì)對(duì)比本地?cái)?shù)據(jù)源及下游集群的校驗(yàn)和 (checksum),確保導(dǎo)入的數(shù)據(jù)無(wú)損,然后讓 TiDB 分析 (ANALYZE) 這些新增的數(shù)據(jù),以優(yōu)化日后的操作。同時(shí),tidb-lightning 調(diào)整 AUTO_INCREMENT 值防止之后新增數(shù)據(jù)時(shí)發(fā)生沖突。
- viii) 表的自增 ID 是通過(guò)行數(shù)的上界估計(jì)值得到的,與表的數(shù)據(jù)文件總大小成正比。因此,最后的自增 ID 通常比實(shí)際行數(shù)大得多。這屬于正?,F(xiàn)象,因?yàn)樵?TiDB 中自增 ID 不一定是連續(xù)分配的。
- viiii) 在所有步驟完畢后,tidb-lightning 自動(dòng)將 TiKV 切換回“普通模式” (normal mode),此后 TiDB 集群可以正常對(duì)外提供服務(wù)。
參數(shù)列表:
| | |
| 從 file 讀取全局設(shè)置。如果沒(méi)有指定則使用默認(rèn)設(shè)置。 | |
| | |
| | |
| 日志的等級(jí):debug、info、warn、error 或 fatal (默認(rèn)為 info) | |
| 表庫(kù)過(guò)濾的規(guī)則 (可多次指定) | |
| 選擇后端的模式:importer、local 或 tidb | |
| 日志文件路徑(默認(rèn)是 /tmp 中的臨時(shí)文件) | |
| TiDB Lightning 服務(wù)器的監(jiān)聽地址 | |
| | |
| | |
| | |
| TiDB Server 的端口(默認(rèn)為 4000) | |
| TiDB Server 的狀態(tài)端口的(默認(rèn)為 10080) | |
| | |
| | |
| 忽略表結(jié)構(gòu)文件,直接從 TiDB 中獲取表結(jié)構(gòu)信息 | |
| 是否啟用斷點(diǎn) (默認(rèn)值為 true) | |
| 導(dǎo)入后分析表信息 (默認(rèn)值為 true) | |
| 導(dǎo)入后比較校驗(yàn)和 (默認(rèn)值為 true) | |
--check-requirements bool | 開始之前檢查集群版本兼容性(默認(rèn)值為 true) | lightning.check-requirements |
| | |
| | |
| | |
| 在服務(wù)器模式下啟動(dòng) TiDB Lightning | |
backend各模式區(qū)別:
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
是否影響 TiDB 對(duì)外提供服務(wù) | | | |
參考: https://asktug.com/t/topic/636754.1 誤drop庫(kù)
1) 確認(rèn)刪除時(shí)間
刪庫(kù)這種操作權(quán)限一般只有管理員才會(huì)有,當(dāng)然也不排除有部分開發(fā)人員申請(qǐng)了超級(jí)權(quán)限,如果這個(gè)事情發(fā)生了那么我們肯定是希望能精確找到刪庫(kù)的時(shí)間點(diǎn)這樣可以減少數(shù)據(jù)丟失,好在Tidb記錄了所以DDL操作,可以通過(guò)adminshowddljobs;查看,找到刪庫(kù)的具體時(shí)間點(diǎn)。2) 確認(rèn)數(shù)據(jù)的有效性
通過(guò)上面方法我們可以確認(rèn)drop 庫(kù)的操作是在 2020-11-17 08:26:36 ,那么我們需要這個(gè)時(shí)間點(diǎn)的前幾秒的快照應(yīng)該就有被我們刪除的庫(kù),通過(guò) set @@tidb_snapshot="xx-xx-xx xx:xx:xx"; 設(shè)置當(dāng)前session查詢?cè)摎v史快照數(shù)據(jù)。3) 備份數(shù)據(jù)
dumpling -h 172.21.xx.xx -P 4000 -uroot -p xxx -t 32 -F 64MiB -B xxx_ods --snapshot "2020-11-17 08:26:35" -o ./da
4) 恢復(fù)數(shù)據(jù)
myloader -h 172.21.xx.xx -u root -P 4000 -t 32 -d ./da -p xxx
1) 確認(rèn)操作時(shí)間
通過(guò) admin show ddl jobs 確認(rèn)truncate的操作的開始時(shí)間。2) 將數(shù)據(jù)寫入到臨時(shí)表
通過(guò) set @@tidb_snapshot="xx-xx-xx xx:xx:xx"; 設(shè)置當(dāng)前session查詢?cè)摎v史快照數(shù)據(jù)。FLASHBACK TABLE xxx_comment TO xxx_comment_bak_20201117;
如果線上的這張表沒(méi)有新數(shù)據(jù)寫入或者新數(shù)據(jù)可以不要,那么可以這樣操作:drop table xxx_comment ;
rename table xxx_comment_bak_20201117 to xxx_comment;
如果線上的表還在繼續(xù)有新數(shù)據(jù)寫入并且不能破壞,那么可以把恢復(fù)出來(lái)的臨時(shí)表的數(shù)據(jù)在寫會(huì)到線上表。insert into xxx_comment select * from xxx_comment_bak_20201117;
1) 確認(rèn)操作時(shí)間
通過(guò) admin show ddl jobs 確認(rèn)truncate的操作的開始時(shí)間。2) 恢復(fù)表
通過(guò)recover table恢復(fù):RECOVER TABLE xxx_comment ;
上面是通過(guò)表名恢復(fù)的,這種方式有兩個(gè)前提條件:最近 DDL JOB 歷史中找到的第一個(gè) DROP TABLE 操作,且 DROP TABLE 所刪除的表的名稱與 RECOVER TABLE 語(yǔ)句指定表名相同 ,如果這個(gè)表執(zhí)行過(guò)多次刪除再建的操作,你想恢復(fù)到第一次的刪除操作之前的數(shù)據(jù),可以通過(guò) RECOVER TABLE BY JOB 827; 恢復(fù),其中827是通過(guò) admin show ddl jobs ; 確認(rèn)的job id。4.4 誤 delete、update表
1) 確認(rèn)操作時(shí)間
對(duì)于DML的誤操作,如圖Tidb集群沒(méi)開啟全日志,基本沒(méi)辦法從集群層面確認(rèn)誤操作時(shí)間了,需要從誤操作發(fā)起端介入排查了。如果是管理員命令行誤操作,可以通過(guò)堡壘機(jī)的操作記錄去人;如果是程序bug可以通過(guò)排查程序的日志確認(rèn)執(zhí)行誤操作的時(shí)間。2) 確認(rèn)數(shù)據(jù)的有效性
通過(guò)上面方法我們可以確認(rèn)誤操作是在 2020-11-17 10:28:25 ,那么我們需要這個(gè)時(shí)間點(diǎn)的前幾秒的快照應(yīng)該就有被我們刪除的庫(kù),通過(guò)set @@tidb_snapshot=“xx-xx-xx xx:xx:xx”; 設(shè)置當(dāng)前session查詢?cè)摎v史快照數(shù)據(jù)。3) 備份數(shù)據(jù)
通過(guò)dumpling把上面確定的時(shí)間點(diǎn)的快照數(shù)據(jù)備份出來(lái):dumpling -h 172.21.xx.xx -P 4000 -uroot -p xxx -t 32 -F
64MiB -B xxx_ods -T xxx_ods.xxx_comment --snapshot "2020-
11-17 09:55:00" -o ./da
4) 恢復(fù)數(shù)據(jù)
把上面?zhèn)浞莸臄?shù)據(jù)導(dǎo)入到一個(gè)臨時(shí)實(shí)例里面,確認(rèn)下數(shù)據(jù)沒(méi)問(wèn)題可以在臨時(shí)實(shí)例里面把這個(gè)表重命名,然后導(dǎo)入到線上庫(kù),最后把數(shù)據(jù)合并到線上的表里面。myloader -h 172.21.xx.xx -u root -P 4001 -t 32 -d ./da -p xxx
5.1 中控有備份
中控有備份,那么我們可以直接通過(guò)中控的備份進(jìn)行恢復(fù);1) 中控備份
TiUP 相關(guān)的數(shù)據(jù)都存儲(chǔ)在用戶home目錄的 .tiup 目錄下,若要遷移中控機(jī)只需要拷貝 .tiup 目錄到對(duì)應(yīng)目標(biāo)機(jī)器即可。中控備份:tar czvf tiup.tar.gz .tiup。為了避免中控機(jī)磁盤損壞或異常宕機(jī)等情況導(dǎo)致TiUP數(shù)據(jù)丟失,建議線上環(huán)境定時(shí)備份.tiup 目錄,寫一個(gè)簡(jiǎn)單的腳本就可以搞定。2) 恢復(fù)方法
- i) 把 tiup.tar.gz 拷貝到目標(biāo)機(jī)器home目錄。
- ii) 在目標(biāo)機(jī)器 home 目錄下執(zhí)行 tar xzvf tiup.tar.gz。
- iii) 添加 .tiup 目錄到 PATH 環(huán)境變量。
如使用 bash 并且是 tidb 用戶,在 ~/.bashrc 中添加 export PATH=/home/tidb/.tiup/bin:$PATH 后執(zhí)行 source ~/.bashrc,根據(jù)使用的 shell 與用戶做相應(yīng)調(diào)整。5.2 中控沒(méi)有備份
針對(duì)中控沒(méi)有備份,那么其實(shí)恢復(fù)方案也相對(duì)比較簡(jiǎn)單。恢復(fù)方法:
- i) 在新的中控機(jī)器上,重新部署tiup。
- ii) 根據(jù)運(yùn)行的集群組件,重新配置一個(gè)集群的拓?fù)湮募?/span>
- iii) 執(zhí)行deploy命令:tiup cluster deploy tidb-xxx ./topology.yaml。
- iv) 執(zhí)行完成之后,不需要start集群,因?yàn)榧罕旧硎窃谶\(yùn)行的,執(zhí)行display查看一下集群的節(jié)點(diǎn)狀態(tài)即可。
5.3 注意事項(xiàng)
6.1 集群狀態(tài)
1) 實(shí)例
2) 主機(jī)
3) 磁盤
4) 存儲(chǔ)拓?fù)?/span>
5) 監(jiān)控告警
6.2 Sql語(yǔ)句
6.3 慢查詢
6.4 流量可視化
6.5 集群診斷報(bào)告
本文作者:李仕豪(上海新炬中北團(tuán)隊(duì))
本文來(lái)源:“IT那活兒”公眾號(hào)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/129138.html