TiDB 數(shù)據(jù)庫管理 [TiDB v6](303)筆記

cover

原文地址:https://alphahinex.github.io/2022/12/25/tidb-v6-pcta-303/


description: "通過這門課程像吻,學(xué)員可以學(xué)習 TiDB 數(shù)據(jù)庫的體系架構(gòu)、設(shè)計理念與各個組件的運行原理。學(xué)習并掌握 TiDB 數(shù)據(jù)庫的管理。掌握 TiDB 的數(shù)據(jù)遷移垢夹、同步、復(fù)制和備份恢復(fù)方法。熟悉主要生態(tài)工具的適用范圍建车、場景和基本使用方法。"
date: 2022.12.25 10:26
categories:
- Database
tags: [Database, TiDB]
keywords: TiDB, PD, TiDB Server, TiKV, TiFlash, Raft, RocksDB, Region, HTAP, OLTP, OLAP, MVCC


在線學(xué)習地址:https://learn.pingcap.com/learner/course/1110001

軟件包下載地址:https://cn.pingcap.com/product-community/

Lesson 01 TiDB Cluster 部署

  • TiUP 是從 TiDB 4.0 引入的包管理器
  • TiUP 在執(zhí)行時椒惨,命令 <command> 和組件 < component > 可以同時出現(xiàn)
  • TiDB 集群啟動順序:PD => TiKV => TiDB => TiFlash缤至;停止順序是啟動順序倒序
  • tiup cluster start tidb-test --init 安全啟動,為 root 用戶生成初始密碼
  • set password = password('new pwd'); 可修改密碼

Lesson 02 TiDB 的連接管理

  • 100% 兼容 MySQL 5.7 協(xié)議
  • 支持 MySQL 5.7 常用的功能及語法
  • 不支持的功能特性:存儲過程與函數(shù)康谆、觸發(fā)器领斥、外鍵、函數(shù)沃暗、全文索引月洛、CREATE TABLE AS SELECT
  • TiDB 默認端口 4000
  • 查看 TiDB 版本:select tidb_version()\G

Lesson 03 TiDB 的配置

  • TiDB 配置分兩類
  1. 系統(tǒng)配置:TiDB Server,跟 SQL 有關(guān)的孽锥,存在 TiKV 里嚼黔,更新配置不需要重啟细层,可以通過 MySQL 客戶端進行修改,有作用域
  2. 集群配置:TiKV唬涧、PD今艺、一部分的 TiDB Server,存在自己節(jié)點的配置文件中爵卒,重啟節(jié)點方可生效,沒有作用域
  • TiDB 系統(tǒng)參數(shù)的作用域:SESSION(會話級別撵彻,默認)钓株、GLOBAL(全局級別)、INSTANCE(實例級別)
  • 修改集群配置:tiup cluster edit-config tidb-test陌僵,之后 tiup cluster reload tidb-test 重啟所有節(jié)點應(yīng)用新配置轴合。tiup cluster show-config tidb-test 查看配置。
  • 6.0 有在線修改集群配置碗短,但是實驗特性受葛,所以集群配置的修改還是需要重啟節(jié)點才能生效

Lesson 04 用戶管理與安全

  • 查看用戶信息
select user, host, authentication_string from mysql.user;
  • 創(chuàng)建/刪除用戶
create user 'jack'@'172.31.0.%' identified by 'pingcap';
drop user 'user3'@'localhost';
  • 修改密碼
SET PASSWORD FOR 'test'@'localhost'=password('mypass');
ALTER USER 'test'@'localhost' IDENTIFIED BY 'mypass';
  • 創(chuàng)建/刪除角色
create role r_emp@'172.31.0.159';
create role r_emp@'%';
create role r_emp;
drop role 'r_admin','r_dev'@'localhost';
  • 授權(quán)
    grant select,insert on test.emp to 'jack'@'172.31.0.159';
    grant select,insert on test.emp to 'r_emp';
    -- 賦予用戶全部權(quán)限
    grant all privileges on *.* to 'user2'@'localhost' with grant option;
    -- 將角色賦予用戶
    grant r_emp to 'jack'@'172.31.0.%';
    -- 擁有角色的用戶登錄后,需開啟角色
    set role all;
    -- 查看授權(quán)
    show grants;
    show grants for 'admin'@'localhost';
    -- 回收用戶全部權(quán)限
    revoke all privileges on *.* from 'user2'@'localhost';
    
  • 角色與用戶相似之處為:
  1. 是被鎖踪怂(locked)的(不能用于登錄)
  2. 沒有密碼
  3. 被存儲在 mysql.user 表中
  4. 當用戶登錄后总滩,必須使用 set role all 命令開啟用戶被賦予的角色
  • 忘記 root 密碼的解決辦法:
  1. 修改配置文件
[security]
skip-grant-table = true
  1. 重啟數(shù)據(jù)庫后生效 mysql -h 127.0.0.1 -P 4000 -u root

Lesson 05 監(jiān)控 TiDB

  • 兩套體系:
  1. Grafana + Prometheus —— http://{grafana-ip}:3000,用戶名密碼默認 admin / admin
  2. TiDB Dashboard —— http://{pd-ip}:2379/dashboard巡雨,root / tidb
  • 確認 TiDB 集群狀態(tài)
$ tiup cluster display didb-test
  • 報警項由低到高分為:警告闰渔、嚴重、緊急 三個級別

Lesson 06 TiDB 集群管理

  • TiDB/TiKV/PD 在線擴容步驟:
  1. 編輯配置文件
  2. 執(zhí)行擴容命令 tiup cluster scale-out tidb-test scale-out-tikv.yaml -uroot -p
  3. 確認新節(jié)點是否加入 tiup cluster display tidb-test
  • TiFlash 在線擴容
  1. 確認當前 TiDB 的版本支持 TiFlash
  2. Enable-plcaement-rules 開啟參數(shù)
  3. 編輯配置文件
  4. 執(zhí)行擴容命令
  5. 確認新節(jié)點加入
  • TiDB/TiKV/PD 在線縮容步驟:
  1. 查看節(jié)點 ID 信息 tiup cluster display tidb-test
  2. 執(zhí)行縮容操作 tiup cluster scale-in tidb --node <node-IP>:<node-Port>铐望,執(zhí)行后節(jié)點變?yōu)?Tombstone 狀態(tài)冈涧,可繼續(xù)通過 tiup cluster prune tidb-test 命令清理節(jié)點
  3. 檢查集群狀態(tài)
  • TiFlash 在線縮容
  1. 根據(jù) TiFlash 剩余節(jié)點數(shù)調(diào)整數(shù)據(jù)表的副本數(shù) alter table <db-name>.<table-name> set tiflash replica 0;
  2. 確認表的副本已經(jīng)被刪除 SELECT * FROM information_schema.tiflash_replica WHERE TABLE_SCHEMA='<db_name>' and TABLE_NAME='<table_name>'
  3. 查看節(jié)點 ID 信息
  4. 通過 TiUP 縮容 TiFlash 節(jié)點
  5. 檢查集群狀態(tài)
  • 重命名集群 tiup cluster rename ${cluster-name} ${new-name}
  • 清理集群數(shù)據(jù) tiup cluster clean ${clust4er-name} --xxx,清理會停庫正蛙,再使用需要重新啟動 TiDB督弓,清理后 root 用戶沒有密碼了,可以直接登錄
  1. --log 清理日志
  2. --data 清理數(shù)據(jù)
  3. --all 清理日志和數(shù)據(jù)
  • 銷毀集群 tiup cluster destroy tidb-test
  • 查看全局和 session 的時區(qū):
select @@global.time_zone, @@session.time_zone;
  • 設(shè)置 session 級別時區(qū)
set session time_zone='UTC';
  • Datetime 類型不受時區(qū)影響乒验,timestamp 類型受時區(qū)影響

Lesson 07 升級 TiDB Cluster

  • 升級集群上的所有 TiDB 實例愚隧,-R 指定要升級的組件,tidb徊件、tikv奸攻、pd 等
$ tiup cluster patch ${cluster-name} /tmp/tidb-hotfix.tar.gz -R tidb
  • 替換其中一個 TiDB 實例
$ tiup cluster patch ${cluster-name} /tmp/tidb-hotfix.tar.gz -N ${Node_IP}:${Node_Port}
  • 升級 TiDB 集群分為不停機升級和停機升級
  • 版本升級流程:升級 TiUP => 修改 TiUP Cluster 拓撲配置文件 => 檢查當前集群健康狀況 => 將集群升級到指定版本 => 驗證
  • 5.3 之前 TiFlash 不支持在線升級
  • 升級時報錯中斷,處理完報錯后如何繼續(xù)
# 查看操作記錄虱痕,找到失敗的升級操作記錄的 ID
$ tiup cluster audit
# 重試上次的升級操作記錄
$ tiup cluster replay <audit-id>
  • 升級過程中 evict leader 等待時間過長睹耐,如何跳過該步驟快速升級
$ tiup cluster upgrade <cluster-name> <version> --force

Lesson 08 備份恢復(fù)策略

  • 備份的類型
  1. 熱備份:允許讀寫,對性能有影響部翘,TiDB 采用 MVCC 方式實現(xiàn)
  2. 冷備份:不允許讀寫
  3. 溫備份:允許讀硝训,不允許寫
  • 按輸出分類:
  1. 邏輯備份:SQL、CSV,可讀性好窖梁,速度慢赘风,支持異構(gòu)數(shù)據(jù)遷移
  2. 物理備份:二進制副本,恢復(fù)速度快纵刘,不可讀邀窃,只能同構(gòu)恢復(fù)
  3. 基于復(fù)制增量備份:主從模式,對主庫影響小假哎,主庫出問題備庫能立即提供服務(wù)
  • BR 是熱備份 & 物理備份

Lesson 09 數(shù)據(jù)導(dǎo)出工具 Dumpling

  • 用于完成邏輯上的全量備份或者導(dǎo)出瞬捕,不支持增量導(dǎo)出
  • 支持 table-filter,篩選數(shù)據(jù)導(dǎo)出
  • 適用于數(shù)據(jù)量小于 50G 的導(dǎo)出場景
  • 導(dǎo)出數(shù)據(jù)的一致性:通過 --consistency <consistency level> 標識控制導(dǎo)出數(shù)據(jù)舵抹,默認是 Snapshot 級別(獲取指定時間戳的一致性快照)肪虎,還有 Flush(全庫加只讀鎖), Lock(給要導(dǎo)出的表加讀鎖), None(不要一致性), Auto(根據(jù)數(shù)據(jù)庫類型,如果是 TiDB惧蛹,設(shè)置為 Snapshot扇救,如果是 MySQL,設(shè)置為 Flush)
$ ./dumpling --snapshot 417773951312461825
$ ./dumpling --snapshot "2020-07-02 17:12:45"

Lesson 10 使用 TiDB Lightning 導(dǎo)入數(shù)據(jù)

  • TiDB Lightning 是導(dǎo)入 SQL香嗓、CSV 至 TiDB 的工具
  • TiDB Lightning 的兩種導(dǎo)入模式:
  1. Physical Import Mode
  2. Logical Import Mode:連到 TiDB Server 上執(zhí)行 SQL


  • Physical Import Mode 原理
  1. 切換 TiKV 為導(dǎo)入模式
  2. Schema & 表創(chuàng)建
  3. 分割源數(shù)據(jù)
  4. 讀取 dump 文件
  5. 寫入本地臨時文件(轉(zhuǎn)換成 key-value 格式迅腔,并排序)
  6. 導(dǎo)入臨時文件到 TiKV 集群
  7. 檢驗與分析
  8. 切換回普通模式
  • 并行導(dǎo)入時,TiDB Lightning 實例數(shù)不宜超過 10 個
  • 支持斷點續(xù)傳陶缺,斷點可以存儲在文件或數(shù)據(jù)庫中
  • 邏輯模式不直接寫 TiKV钾挟,是向 TiDB Server 執(zhí)行 SQL

Lesson 11 使用 BR 進行備份恢復(fù)

  • BR —— Backup & Restore
  • BR 直接與 PD 和 TiKV 交互,不經(jīng)過 TiDB Server
  • BR 是二進制備份饱岸,只能恢復(fù)到 TiDB 數(shù)據(jù)庫中
  • 備份輸出文件:SST 文件掺出、backupmeta 文件、backup.lock 文件
  • TiDB 5.4 版本之后才開始支持 GBK 字符集
  • BR 恢復(fù)的工具無法通過 TiCDC 或 TiDB Binlog 同步到下游
  • 備份時苫费,每個 TiKV 備份自己 TiKV 節(jié)點里存儲的數(shù)據(jù)
  • 恢復(fù)時汤锨,要將各個節(jié)點的數(shù)據(jù)先進行匯總,保證每個節(jié)點都有全量的恢復(fù)數(shù)據(jù)百框,才能進行恢復(fù)
    $ br backup/restore full/db/table \
    --pd "${PDIP}:2379" \
    --db test \
    --table usertable \
    --storage "s3://backup-data/table/" \
    --ratelimit 128 \
    --log-file backup.log
    
  • 增量備份需先獲得最近一次備份的時間點闲礼,并傳入備份指令
  • BR 是熱備份,物理備份铐维,支持增量備份 & 恢復(fù)

Lesson 12 使用 sync-diff-inspector 校驗數(shù)據(jù)

  • 原理:并行切分數(shù)據(jù)并行比較柬泽,比較時采用二分法,縮小逐行比較的范圍
  • 限制:
  1. 不支持 JSON嫁蛇、BIT锨并、BINARY、BLOG 等類型的數(shù)據(jù)
  2. FLOAT睬棚、DOUBLE 等浮點數(shù)類型無法在 TiDB 和 MySQL 之間進行校驗
  3. 不包含主鍵或者唯一索引的表可以進行校驗第煮,但修復(fù) SQL 可能無法正確修復(fù)數(shù)據(jù)
  4. MySQL 與 TiDB 之間或者 MySQL 與 MySQL 之間的數(shù)據(jù)校驗不支持數(shù)據(jù)同步在線校驗
  • sharding 選項默認打開解幼,支持源端分表分庫目標并表的驗證

Lesson 13 使用 TiDB DataMigration(DM)同步數(shù)據(jù)

  • 一個 DM worker 對應(yīng)上游的一個數(shù)據(jù)庫實例,讀取上游 binlog 進行同步
  • 數(shù)據(jù)源多于 worker 數(shù)量時包警,多出的 worker 空閑
  • DM 的目標端只能是 TiDB撵摆,源端可以是多個兼容 MySQL 協(xié)議的數(shù)據(jù)庫
  • DM 依賴源端數(shù)據(jù)庫開啟 binlog,可以通過 binlog event filter 過濾某些操作不進行復(fù)制
  • 用戶通過 dmctl 命令行工具向 DM master 發(fā)送指令害晦,DM master 再操作 DM worker 進行同步
  • 支持全量及增量同步特铝、源庫表與目標庫異構(gòu)表的同步、進行分表分庫的合并同步
  • DM 可以支持一定程度的異構(gòu)表遷移壹瘟,只要異構(gòu)表存在包含關(guān)系(源庫不能選擇列苟呐,需要復(fù)制全部列;目標表的列可以多于源庫表的列)
  • DM 部署相關(guān)命令
$ tiup install dm dmctl
$ tiup dm display dm-test
$ tiup dm start dm-test
$ tiup dm list
# DM 集群縮容
$ tiup dm scale-in dm-test -N 172.31.0.175:8262
# DM 集群擴容
$ tiup dm scale-out dm-test dm-scale.yaml -uroot -p
$ tiup dm stop dm-test
$ tiup dm destory dm-test
  • DM 的任務(wù)包含:源端俐筋、目標端、數(shù)據(jù)過濾(黑白名單严衬、事件過濾)和表路由


# 檢查與啟動任務(wù)
$ tiup dmctl --master-addr=172.31.0.49:8261 start-task dm-task.yaml
# 暫停任務(wù)
$ tiup dmctl --master-addr=172.31.0.49:8261 pause-task dm-task.yaml
# 恢復(fù)任務(wù)
$ tiup dmctl --master-addr=172.31.0.49:8261 resume-task dm-task.yaml
# 查詢?nèi)蝿?wù)
$ tiup dmctl --master-addr=172.31.0.49:8261 query-status dm-task.yaml
# 停止任務(wù)
$ tiup dmctl --master-addr=172.31.0.49:8261 stop-task dm-task.yaml

Lesson 14 使用 TiCDC 同步數(shù)據(jù)

  • 數(shù)據(jù)源是 TiDB澄者,下游是兼容 MySQL 協(xié)議的數(shù)據(jù)庫或 kafka 等,與 DM 是反向的
  • TiCDC 集群中的一個節(jié)點負責多個 TiKV
  • TiCDC 讀取的是 TiKV 的 changelog请琳,比 TiDB Binlog 的效率高
  • TiCDC 是異步復(fù)制粱挡,目標端與源端有時間延遲;源頭數(shù)據(jù)庫出現(xiàn)災(zāi)難后依然有丟失數(shù)據(jù)的可能
  • TiCDC 只能同步至少存在一個有效索引的表
  • 同步任務(wù)不能在線修改配置俄精,需要先 pause询筏,然后 update,再 resume
  • TiCDC capture 可以有多個竖慧,并行從 TiKV 讀取 changelog嫌套;導(dǎo)入目標端時,一個 capture 對應(yīng)一個目標端圾旨,但是會將其他 capture 中的數(shù)據(jù)復(fù)制到自己這再向下游同步踱讨。只有負責匯聚數(shù)據(jù)的 capture 里才有全量的 changelog 數(shù)據(jù)
  • TiCDC 目標端不支持 Oracle
  • Changelog 抽取到 TiCDC 中時,會在本地進行排序
  • TiCDC 可以通過 TiDB 集群的拓撲文件進行部署及擴縮容

Lesson 15 使用 TiDB Binlog 同步數(shù)據(jù)

  • TiDB Binlog 的作用與 TiCDC 類似砍的,TiDB 5.0 版本后痹筛,推薦使用 TiCDC 替代 TiDB Binlog
  • 只能做增量復(fù)制,不能做全量復(fù)制
  • 可以使用 tiup 工具為 TiDB 集群增加 TiDB Binlog 所使用的 pump 和 drainer 節(jié)點
  • Pump 會先將數(shù)據(jù)進行排序廓鞠,之后發(fā)送給 drainer帚稠,drainer 再進行合并排序
  • TiDB Binlog 類似 MySQL row 格式的 binlog,記錄的是已經(jīng)提交的事務(wù)床佳,默認未開啟
  • Pump 不是從 TiKV 讀取滋早,是直接從 TiDB 讀取 TiDB 產(chǎn)生的 binlog 日志
  • 一個 drainer 對應(yīng)一個目標端

Lesson 16 數(shù)據(jù)庫高可用概述

  • 恢復(fù)時間目標(Recovery Time Objective,RTO)
  • 恢復(fù)點目標(Recovery Point Objective夕土,RPO)
  • TiDB 支持 CP馆衔,不支持 AP瘟判,出現(xiàn)網(wǎng)絡(luò)隔離時,保證一致性角溃,不保證可用性
  • TiDB 數(shù)據(jù)庫提供強一致性拷获,如不能保證強一致性,則拒絕服務(wù)
  • 故障解決會伴隨有服務(wù)的降級

Lesson 17 TiDB 數(shù)據(jù)庫常用高可用架構(gòu)

  • 同城三中心:網(wǎng)絡(luò)延遲小减细,RTO 較小匆瓜,RPO 為 0
  • 同城兩中心(50km 內(nèi)),中心之間同步復(fù)制未蝌,DR AutoSync驮吱,建議四副本,3 voter 1 leaner萧吠,非極端情況可保證 RPO = 0
  • 兩地三中心左冬,城市之間是異步復(fù)制,不能保證 RPO = 0 和一致性恢復(fù)
  • 異步復(fù)制是通過 TiDB Binlog 或 CDC 組件完成纸型,會丟失數(shù)據(jù)(RPO 不為 0)拇砰,有損恢復(fù)后,保證一致性
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末狰腌,一起剝皮案震驚了整個濱河市除破,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌琼腔,老刑警劉巖瑰枫,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異丹莲,居然都是意外死亡光坝,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門甥材,熙熙樓的掌柜王于貴愁眉苦臉地迎上來教馆,“玉大人,你說我怎么就攤上這事擂达⊥疗蹋” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵板鬓,是天一觀的道長悲敷。 經(jīng)常有香客問我,道長俭令,這世上最難降的妖魔是什么后德? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮抄腔,結(jié)果婚禮上瓢湃,老公的妹妹穿的比我還像新娘理张。我一直安慰自己,他們只是感情好绵患,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布雾叭。 她就那樣靜靜地躺著,像睡著了一般落蝙。 火紅的嫁衣襯著肌膚如雪织狐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天筏勒,我揣著相機與錄音移迫,去河邊找鬼。 笑死管行,一個胖子當著我的面吹牛厨埋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捐顷,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼揽咕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了套菜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤设易,失蹤者是張志新(化名)和其女友劉穎逗柴,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體顿肺,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡戏溺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了屠尊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片旷祸。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖讼昆,靈堂內(nèi)的尸體忽然破棺而出托享,到底是詐尸還是另有隱情,我是刑警寧澤浸赫,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布闰围,位于F島的核電站,受9級特大地震影響既峡,放射性物質(zhì)發(fā)生泄漏羡榴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一运敢、第九天 我趴在偏房一處隱蔽的房頂上張望校仑。 院中可真熱鬧忠售,春花似錦、人聲如沸迄沫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽邢滑。三九已至腐螟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間困后,已是汗流浹背乐纸。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留摇予,地道東北人汽绢。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像侧戴,于是被迫代替她去往敵國和親宁昭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容