tidb笔记
HTAP-TiDB5.x原理及实战第一部分TiDB的设计原理
- 1. 数据及数据库产品的发展
1.1 数据的定义和价值
1.1.1 什么是数据
数据是指对客观事件进行记录并可以鉴别的符号,是对客观事物的性质、状态以及相互关系等进行记载的物理符号或这些物理符号的组合。它是可识别的、抽象的符号。
1.1.2 数据的种类
它不仅指狭义上的数字,还可以是具有一定意义的文字、字母、数字符号的组合、图形、图像、视频、音频等,也是客观事物的属性、数量、位置及其相互关系的抽象表示。
例如,“0、1、2.”、“阴、雨、下降、气温”、“学生的档案记录、货物的运输情况”等都是数据。数据经过加工后就成为信息。
在计算机科学,数据是所有能输入计算机并被计算机程序处理的符号的介质的总称,是用于输入电子计算机进行处理,具有一定意义的数字、字母、符号和模拟量等的通称。计算机存储和处理的对象十分广泛,表示这些对象的数据也随之变得越来越复杂。
1.1.3 数据的价值
识别对象行为,利用相关关系预测/推荐可能会发生什么行为?分析行为之间的关系,记录、监控、防止异常行为
识别对象(人脸,声音,人体,图片)挖掘对象的情感等属性。
解决信息不对称,信用体系发现不足、异常,并改善
描述和*验证想法
https://www.jianshu.com/p/c773e88bb127
1.2 各行业数据量增长现状
近年来,伴随着云计算、大数据、物联网、人工智能等信息技术的快速发展和传统产业数字化的转型,数据量呈现几何级增长,据IDC统计,全球数据总量2020年达到44个ZB,我国数据量将达到8060个EB,占全球数据总量的18%。
据IDC统计,2020年有超过500亿的终端与设备联网,而有50%的物联网网络将面临网络带宽的限制,40%的数据需要在网络边缘分析、处理与储存。边缘计算市场规模将超万亿,成为与云计算平分秋色的新兴市场。而在国内市场方面,据CEDA预测,2020年 我国物联网市场规模有望达到18300亿元,年复合增速高达25%,我国边缘计算发展将在接下来的两年迎来高峰期。
到2020年,平均下来,一个人每天会产生1.5G的数据,每辆车会产生4TB的数据,每架飞机会产生40TB的数据,每个小型的工厂会产生1PB数据。
1.3 数据库产品迭代历程
自上世纪70年代,EF codd提出了关系型数据库模型开始,数据库已经发展了将近半个世
纪。可以说是一个历史悠久的计算机学科,在这个半个世纪里,这个学科发生了很多变化,但也有一些共性的驱动在里面。我们尝试一起探讨下数据技术发展的内在驱动、以及展望趋势。
里程碑一:关系型商业数据库
上世纪80年代,也就是从提出关系型数据库模型后10多年,关系型数据库产品逐步完成了工程与产品实现,Oracle、IBMDB2、Sybase以及SQL Server和Informix第一批关系型商业数据库开始出现。
里程碑二:开源数据库萌芽
90年代中后期,MySQL、PostgreSQL等开源数据库开始萌芽。
里程碑三:开源数据库盛行、NoSQL、大数据生态来临
上世纪末到本世纪初,IT与通信两门技术发生第一次碰撞,开启互联网时代,数据量开始爆发增长,快速发展的各类互联网公司,更加青睐MySQL、PostgreSQL这类开源数据库,同时也给这类开源数据库带来丰富的产品生态,比如基于开源数据库的各种分库分表方案产生。
同期,2006年谷歌的三驾马车(GFS、Bigtable、Mapreduce)开启了大数据时代,涌现了Hadoop、Hbase、Redis等NoSQL大数据生态。
里程碑四:数据库技术百花齐放
2010年后,IT技术与通信技术发生第二次碰撞,4G网络开启了移动互联网时代,在这个时代,产生了很多业务与场景创新,底层数据技术更是进入前所未有的快速通道
集成了分布式技术与关系模型的NewSQL数据库开始出现,代表产品有Spanner、TiDB 等。
云计算与数据库、大数据发生融合;很多云原生数据库出现,云计算不仅给数据技术带来 新的变革,也给数据库厂商提供了更高效的服务交付、商业模式,各种DBaaS(Database-as-a-Service)产品涌现。
里程碑五:HTAP的强需求
2020年后,各行各业都逐步进入数字化时期,虽然从技术创新角度,会有越来越多的数据技术栈与产品将出现
但这么多的技术栈也会大大增加使用成本,从用户需求的角度看,能不能将在线处理业务与分析业务进行整合,也就是我们经常说的HTAP(Hybrid Transactional/Analytical Processing)作为一种统一的数据服务变成了一个强需求。
二、tidb生产部署实战
2.1组件端口
# 1. 下载并安装 TiUP工具 wget https://tiup-mirrors.pingcap.com/install.sh sh install.sh source .bash_profile # 2. 部署 TiDB 集群 tiup playground v5.2.1 --db 2 --pd 3 --kv 3 --monitor --host 10.0.0.20 # 3. 链接测试 mysql --host 127.0.0.1 --port 4000 -u root 通过 http://IP:9090 访问 TiDB 的 Prometheus 管理界面。 通过 http://IP:2379/dashboard 访问 TiDB Dashboard 页面,默认用户名为 root,密码为空。 # 4. 销毁 通过 ctrl + c 停掉进程 执行以下命令: tiup clean --all
wget https://tiup-mirrors.pingcap.com/install.sh sh install.sh source .bash_profile tiup cluster tiup update --self && tiup update cluster
global: user: "tidb" ssh_port: 22 deploy_dir: "/data/tidb-deploy" data_dir: "/data/tidb-data" monitored: node_exporter_port: 9100 blackbox_exporter_port: 9115 server_configs: tidb: log.slow-threshold: 300 tikv: readpool.storage.use-unified-pool: false readpool.coprocessor.use-unified-pool: true pd: replication.enable-placement-rules: true replication.location-labels: ["host"] tiflash: logger.level: "info" pd_servers: - host: 10.0.0.20 tidb_servers: - host: 10.0.0.20 tikv_servers: - host: 10.0.0.20 port: 20160 status_port: 20180 config: server.labels: { host: "logic-host-1" } - host: 10.0.0.20 port: 20161 status_port: 20181 config: server.labels: { host: "logic-host-2" } - host: 10.0.0.20 port: 20162 status_port: 20182 config: server.labels: { host: "logic-host-3" } tiflash_servers: - host: 10.0.0.20 monitoring_servers: - host: 10.0.0.20 grafana_servers: - host: 10.0.0.20
2.4 部署TiDB Cluster
# 1. 由于模拟多机部署,需要通过 root 用户调大 sshd 服务的连接数限制 修改 /etc/ssh/sshd_config 将 MaxSessions 调至 20。 重启 sshd 服务 # 2. 创建并启动集群 按下面的配置模板,编辑配置文件,命名为 topo.yaml,其中: user: "tidb":表示通过 tidb 系统用户(部署会自动创建)来做集群的内部管理,默认使用 22 端口通 过 ssh 登录目标机器 replication.enable-placement-rules:设置这个 PD 参数来确保 TiFlash 正常运行 host:设置为本部署主机的 IP # 3. 执行集群部署命令 tiup cluster deploy oldguo-cluster v5.2.1 ./topo.yaml --user root -p # 4. 启动集群 tiup cluster start oldguo-cluster # 5. 访问 TiDB 数据库,密码为空
yum install -y mariadb mysql -h 10.0.0.20 -P 4000 -u root # 6. 访问 TiDB 的 Grafana 监控 通过 http://{grafana-ip}:3000 访问集群 Grafana 监控页面,默认用户名和密码均为 admin。 # 7.访问 TiDB 的 Dashboard 通过 http://{pd-ip}:2379/dashboard 访问集群 TiDB Dashboard 监控页面,默认用户名为 root,密码为空。 # 8. 执行以下命令确认当前已经部署的集群列表 tiup cluster list 执行以下命令查看集群的拓扑结构和状态: tiup cluster display oldguo-cluster
#用户的管理 create user oldguo@'10.0.0.%' identified by '123'; drop user alter user #权限和角色管理 create role r_manager, r_staff; drop role r_staff; grant insert, update, delete on test.* to r_mgr; grant r_mgr to 'jack'@'172.16.6.212'; set role all;
vim scale.out.yaml tikv_servers: - host: 172.16.6.157 ssh_port: 22 port: 20160 status_port: 20180 deploy_dir: /tidb-deploy/tikv-20160 data_dir: /tidb-data/tikv-20160 log_dir: /tidb-deploy/tikv-20160/log
8.1.2 运行扩容命令
tiup cluster scale-out oldguo-cluster scale-out.yaml
8.1.3 确认节点
tiup cluster display oldguo-cluster
8.1.4 缩容
# 1. 查看节点ID tiup clustger display oldguo-cluster # 2. 缩容 tiup cluster scale-in oldguo-cluster --node NODE-IP:NODE-PORT # 3. 检查集群 tiup cluster display oldguo-cluster
# 1. 根据TiFlash 剩余节点数据调整数据表的副本数 alter table DB-NAME.TABLE-name set tiflash replica 0; # 2. 确认表的副本确实被删除 select * from information_schema.tiflash_replica where table_schema='DB_NAME' and TABLE_NAME='TABLE_NAME'; 3. 查看节点ID信息 tiup cluster display oldguo-cluster 4. 执行缩容操作 tiup cluster scale-in oldguo-cluster --node NODE-IP:NODE-PORT 5. 检查集群状态 tiup cluster display oldguo-cluster ------------------------------ #集群重命名 tiup cluster rename oldguo-cluster tidb-test; ———————————————————— # 删除集群数据、日志、重建集群、 tiup cluster clean oldguo-cluster --log tiup cluster clean oldguo-cluster --data tiup cluster clean oldguo-cluster --all tiup cluster destroy oldguo-cluste ———————————— #时区管理 set global time_zone='UTC' time_zone='+8:00'
9.2 TiDB Cluster 版本升级
升级思路: 1. 升级TiUP(建议高于1.4) tiup update --self tiup update cluster 2. 修改TiUP CLuster 拓扑配置文件 tiup clustger edit-config oldguo-cluster 3. 检查健康状态(regions) tiup check oldguo-cluster --cluster 4. 集群升级到制定版本 # 不停机 tiup cluster upgrade oldguo-cluster v5.2.1 # 停机 tiup cluster stop oldguo-cluster tiup cluster upgrade oldguo-cluster v5.2.1 --offline tiup cluster start oldguo-cluster 5. 检查状态 tiup cluster display oldguo-cluster
wget https://download.pingcap.org/tidb-toolkit-v5.2.1-linux-amd64.tar.gz #或者 tiup install br
1.5.2 BR的使用
注意: 在所有的 TiKV 节点创建文件夹 /tmp/backup,用来存储本节点的备份文件(SST文件) 并将文件夹 的权限设置为可以读写。 首先登录到 TiKV 节点,之后执行: mkdir /tmp/backup chmod 777 /tmp/backup # 全库备份应用 ./br backup full --pd "172.16.6.202:2379" --storage "local:///tmp/backup" --ratelimit 120 --log-file backupfull.log 参数介绍: --pd"172.16.6.202:2379":连接TiDB数据库的PD节点,最好在PD节点上执行,即连接本节点。 --storage"local:///tmp/backup":备份文件存储在TiKV节点上的位置。 --ratelimit120:对于备份所用存储带宽限速,以免影响线上业务。 --log-filebackupfull.log:备份日志文件。) 单库备份应用: mkdir -p /tmp/worldbak chmod 777 /tmp/worldbak ./br backup db --pd "172.16.6.202:2379" --db employees --storage "local:///tmp/worldbak" --ratelimit 120 --log-file backupdb.log cd tidb-toolkit-v5.0.1-linux-amd64/bin/ ./br restore db --pd "172.16.6.202:2379" --db "world" --storage "local:///tmp/worldbak" --log-file restoredb.log 单表备份应用: mkdir /tmp/citybak chmod 777 /tmp/citybak ./br backup table --pd "172.16.6.202:2379" --db world --table city --storage "local:///tmp/citybak" --ratelimit 120 --log-file backuptable.log ./br restore table --pd "172.16.6.202:2379" --db "world" --table "city" --storage "local:///tmp/citybak" --log-file restoretable.log
2.3 Dumpling 工具应用实战
1. 安装方式: tiup install dumpling:{版本} 或者: tidb-toolkit 包含 2. 最小权限要求 select reload lock tables replication client 3. 单表导出使用 # ./dumpling -uroot -ptidb -P4000 -h 172.16.6.212 --filetype sql -t 8 -o /tmp/city -r 200000 -F 256MiB -T world.city 各个参数的解释如下: -uroot :用户名为 root -P4000 : 端口号为4000 -h 172.16.6.212 :主机 IP 为 172.16.6.212; -p : 密码 --filetype sql :导出文件类型为 SQL 文件。 -t 8 :采用 8 线程同时导出。 -o /tmp/city :导出文件保存在 /tmp/city 中。 -r 200000 :每个导出文件最大容纳 200000 行数据。 -F 256MiB :每个导出文件最大 256 MiB。 4. 单库导出使用 ./dumpling -uroot -ptidb -P4000 -h 172.16.6.212 --filetype sql -t 8 -o /tmp/world -r 200000 -F 256MiB -B world 5. 导出数据的一致性保证 --consistency flush/snapshot/lock/none/auto ./dumpling --snapshot "2021-07-02 23:00:00"
3.2Lightning 工具应用实战
1. 工具基本使用 # cd tidb-toolkit-v5.0.1-linux-amd64/bin/ # vi tidb-lightning.toml 内容为: [lightning] # 日志 level = "info" file = "tidb-lightning.log" [tikv-importer] # 选择使用的 local 后端 backend = "local" # 设置排序的键值对的临时存放地址,目标路径需要是一个空目录 sorted-kv-dir = "/tmp" [mydumper] # 源数据目录。 data-source-dir = "/tmp/world/" [tidb] # 目标集群的信息 host = "172.16.6.212" port = 4000 user = "root" # 表架构信息在从 TiDB 的“状态端口”获取。 status-port = 10080 # 集群 pd 的地址 pd-addr = "172.16.6.202:2379" #!/bin/bash nohup ./tidb-lightning -config tidb-lightning.toml > nohup.out & 2. TiDB Lightning 断点续传 # 断点续传参数配置 [checkpoint] enable = true # 断点的存储 driver = 'file' # 断点续传的控制 --checkpoint-error-destroy : 让失败的表从同开始导入 --checkpoint-error-ignore : 清除出错状态,忽略错误继续导。 --checkpoint-remove : 清除断点,不断点续传 3. 数据过滤(4.0+) [mydumper] filter = ['a*.*','b*.*'] 4. TiDB lightning web管理 [lightning] server-mode = true status-addr = ':8289'
# 安装配置 tiup install dm tiup update --self && tiup update dm tiup dm template > topology.yaml #查看dm历史版本 tiup list dm-master # 启动DM tiup dm deploy dm-test v5.0.0-nightly-20210531 ./topology.yaml --user root -p tiup dm list tiup dm start dm-test tiup dm display dm-test # 获取dmctl 工具 tiup dmctl:v5.0.0-nightly-20210531
# 创建用户 参考mysql主从配置 # 修改配置文件 vim mysql-source-conf1.yaml 4.3.2 任务配置模板 source-id: "mysql-replica-01" enable-gtid: true from: host: "172.16.6.212" user: "root" password: "F1GJCYzuWx/8H4EJHRDWwkBJCrN+4A==" port: 3306 # 加载源配置文件 tiup dmctl --master-addr=172.16.6.202:8261 operate-source create mysql-sourceconf1.yaml # 查看数据源 tiup dmctl --master-addr=172.16.6.202:8261 get-config source mysql-replica-01 # 查看数据源和DM-Worker对应关系 tiup dmctl --master-addr=172.16.6.202:8261 operate-source show
4.3.2 任务配置模板
vim dm-task.yaml name: "dm-taskX" task-mode: all ignore-checking-items: ["auto_increment_ID"] target-database: host: "172.16.6.212" port: 4000 user: "root" password: "tidb" mysql-instances: - source-id: "mysql-replica-01" route-rules: ["instance-1-user-rule","sale-route-rule"] filter-rules: ["trace-filter-rule", "user-filter-rule" , "store-filter-rule"] block-allow-list: "log-ignored" mydumper-config-name: "global" loader-config-name: "global" syncer-config-name: "global" - source-id: "mysql-replica-02" route-rules: ["instance-2-user-rule", "instance-2-store-rule","sale-routerule"] filter-rules: ["trace-filter-rule", "user-filter-rule" , "store-filter-rule"] block-allow-list: "log-ignored" mydumper-config-name: "global" loader-config-name: "global" syncer-config-name: "global" # 所有实例的共有配置 routes: instance-1-user-rule: schema-pattern: "user" target-schema: "user_north" instance-2-user-rule: schema-pattern: "user" target-schema: "user_east" instance-2-store-rule: schema-pattern: "store" table-pattern: "store_sz" target-schema: "store" target-table: "store_suzhou" sale-route-rule: schema-pattern: "salesdb" target-schema: "salesdb" filters: trace-filter-rule: schema-pattern: "user" table-pattern: "trace" events: ["truncate table", "drop table", "delete"] action: Ignore user-filter-rule: schema-pattern: "user" events: ["drop database"] action: Ignore store-filter-rule: schema-pattern: "store" events: ["drop database", "truncate table", "drop table", "delete"] action: Ignore block-allow-list: log-ignored: ignore-dbs: ["log"] mydumpers: global: threads: 4 chunk-filesize: 64
4.3.3 dm复制任务的开启与检测(——————————官方文档参考——————————)
# 检查配置 tiup dmctl --master-addr=172.16.6.202:8261 check-task dm-task.yaml # 开启迁移任务 tiup dmctl --master-addr=172.16.6.202:8261 start-task dm-task.yaml # 查看任务状态 tiup dmctl --master-addr=172.16.6.202:8261 query-status dm-task.yaml # 控制迁移任务 1.暂停任务 tiup dmctl --master-addr=172.16.6.202:8261 pause-task dm-task【任务名】 2.恢复任务 tiup dmctl --master-addr=172.16.6.202:8261 resume-task dm-task 3.停止任务 tiup dmctl --master-addr=172.16.6.202:8261 stop-task dm-task
4.3.4 扩容DM 节点
vi dm-scale.yaml 加入如下内容: worker_servers: - host: 172.16.6.202 tiup dm scale-out dm-test dm-scale.yaml -uroot -p tiup dm display dm-test
---------------------------------------------具体内容官方文档--------------------------------------------