14、TIUP TIDB

跨机房集群方式,延迟最好要低于 100ms

参考地址: https://docs.pingcap.com/zh/tidb/dev/tiup-cluster

TIUP 常用命令

Usage:
  tiup cluster [command]

Available Commands:
  check       对集群进行预检
  deploy      部署集群
  start       启动已部署的集群
  stop        停止集群
  restart     重启集群
  scale-in    集群缩容
  scale-out   集群扩容
  clean       清理数据
  destroy     销毁集群
  upgrade     升级集群
  display     获取集群信息
  list        获取集群列表
  audit       查看集群操作日志
  import      导入一个由 TiDB Ansible 部署的集群
  edit-config 编辑 TiDB 集群的配置
  reload      用于必要时重载集群配置
  patch       使用临时的组件包替换集群上已部署的组件
  help        打印 Help 信息

Flags:
  -c, --concurrency int     最大并行任务数(默认值为 5
      --format string       (实验特性) 输出的格式, 支持 [default, json] (默认值为 "default")
  -h, --help                帮助信息
      --ssh string          (实验特性)SSH 执行类型,可选值为 'builtin''system''none'
      --ssh-timeout uint    SSH 连接超时时间
  -v, --version             版本信息
      --wait-timeout uint   等待操作超时的时间
  -y, --yes                 跳过所有的确认步骤

TIUP 服务器时间必须一直

TiUP 查看系统架构

dpkg --print-architecture
amd64   --> amd64

TiUP 初始化集群拓扑文件


# 我这里使用的是 跨机房部署 TiDB 集群
tiup-cluster template --multi-dc > topology.yaml

配置如下

```yaml
# # Global variables are applied to all deployments and used as the default value of
# # the deployments if a specific deployment value is missing.
global:
  # 运行 tidb cluster 用户.
  user: "tidb"
  # group用于指定用户所属的组名,如果它与user不同的话。
  # group: "tidb"
  # 受管集群中服务器的SSH端口。
  ssh_port: 22
  # 集群部署文件、启动脚本和配置文件的存储目录。
  deploy_dir: "/tidb-deploy"
  # 集群数据存储目录
  data_dir: "/tidb-data"

  # 支持的系统值, "amd64" || "arm64" (default: "amd64")
  arch: "amd64"

# 所有机器监控设置
monitored:
  # 用于报告TiDB集群中每个节点的系统信息的通信端口。
  node_exporter_port: 9100
  # Blackbox_exporter通信端口,用于TiDB集群端口监控
  blackbox_exporter_port: 9115
  # 监控组件的部署文件、启动脚本和配置文件的存储目录
  deploy_dir: "/tidb-deploy/monitored-9100"
  # 监控组件的数据存储目录
  data_dir: "/tidb-data/monitored-9100"
  # 监控组件的日志存储目录
  log_dir: "/tidb-deploy/monitored-9100/log"

# 全局服务配置
server_configs:
  tidb:
    log.level: debug
    log.slow-query-file: tidb-slow.log
    log.slow-threshold: 300
  tikv:
    # gRPC消息的压缩算法
    server.grpc-compression-type: gzip
    readpool.storage.use-unified-pool: true
    readpool.storage.low-concurrency: 10
    raftstore.raft-min-election-timeout-ticks: 1000
    raftstore.raft-max-election-timeout-ticks: 1020
  # tiflash:
  # tiflash-learner:
  pd:
    # 标签级别设置
    replication.location-labels: ["zone","host"]
    # TiKV数据的副本数量
    # replication.max-replicas: 3
    # 禁止 leader 被安排到指定的标签地点。
    # label-property:
    #   reject-leader:
    #     - key: "dc"
    #       value: "sha"


# 用于指定 PD 服务器的配置
pd_servers:
  # PD 服务器地址
  - host: 10.11.19.142
    # 远程端口
    # ssh_port: 22
    # PD 服务器名字
    name: "pd-1"
    # TiDB服务器要连接的通信端口
    client_port: 2379
    # PD服务器节点之间的通信端口.
    peer_port: 2380
    # PD服务器部署文件、启动脚本、配置文件存储目录
    deploy_dir: "/tidb-deploy/pd-2379"
    # PD服务器数据存储目录
    data_dir: "/tidb-data/pd-2379"
    # PD服务器日志存储目录
    log_dir: "/tidb-deploy/pd-2379/log"
    # # numa节点绑定
    # numa_node: "0,1"
    # # The following configs are used to overwrite the `server_configs.pd` values.
    # config:
    #   schedule.max-merge-region-size: 20
    #   schedule.max-merge-region-keys: 200000
  - host: 10.11.19.143
    # ssh_port: 22
    name: "pd-2"
    client_port: 2379
    peer_port: 2380
    deploy_dir: "/tidb-deploy/pd-2379"
    data_dir: "/tidb-data/pd-2379"
    log_dir: "/tidb-deploy/pd-2379/log"
    # numa_node: "0,1"
    # config:
    #   schedule.max-merge-region-size: 20
    #   schedule.max-merge-region-keys: 200000
  - host: 10.11.19.144
    # ssh_port: 22
    name: "pd-3"
    client_port: 2379
    peer_port: 2380
    deploy_dir: "/tidb-deploy/pd-2379"
    data_dir: "/tidb-data/pd-2379"
    log_dir: "/tidb-deploy/pd-2379/log"
    # numa_node: "0,1"
    # config:
    #   schedule.max-merge-region-size: 20
    #   schedule.max-merge-region-keys: 200000

# 服务器配置用于指定TiDB服务器的配置。
tidb_servers:
  # TiDB 服务器 IP 地址 
  - host: 10.11.19.142
    # 远程端口
    # ssh_port: 22
    # 访问TiDB集群端口
    port: 4000
    # TiDB服务器状态信息报告端口
    status_port: 10080
    # TiDB服务器部署文件,启动脚本,配置文件存储目录。
    deploy_dir: "/tidb-deploy/tidb-4000"
    # TiDB服务器日志文件存储目录
    log_dir: "/tidb-deploy/tidb-4000/log"
  - host: 10.11.19.143
    ssh_port: 22
    port: 4000
    status_port: 10080
    deploy_dir: "/tidb-deploy/tidb-4000"
    log_dir: "/tidb-deploy/tidb-4000/log"
  - host: 10.11.19.144
    ssh_port: 22
    port: 4000
    status_port: 10080
    deploy_dir: "/tidb-deploy/tidb-4000"
    log_dir: "/tidb-deploy/tidb-4000/log"

# # Server configs are used to specify the configuration of TiKV Servers.
tikv_servers:
  # TiKV 服务器IP地址
  - host: 10.11.19.142
    # 远程SSH端口
    # ssh_port: 22
    # TiKV 服务器通信端口
    port: 20160
    # 用于报告TiKV服务器状态的通信端口
    status_port: 20180
    # TiKV服务器部署文件,启动脚本,配置文件存储目录。
    deploy_dir: "/tidb-deploy/tikv-20160"
    # TiKV 服务器数据存储目录
    data_dir: "/tidb-data/tikv-20160"
    # TiKV 服务器日志文件存储目录
    log_dir: "/tidb-deploy/tikv-20160/log"
    # 以下配置用于覆盖 "server_configs.tikv" 值。
    config:
      server.labels:
        zone: us
        host: us-host
  # # The ip address of the TiKV Server.
  - host: 10.11.19.143
    # 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"
    config:
      server.labels:
        zone: cn
        host: cn-host
  - host: 10.11.19.144
    # 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"
    config:
      server.labels:
        zone: flb
        host: flb-host



# 服务器配置用于指定Prometheus服务器的配置。
monitoring_servers:
  # Prometheus 服务器IP
  - host: 10.11.19.142
    # 远程端口
    # ssh_port: 22
    # Prometheus 服务器通信端口.
    port: 9090
    # ng-监控服务通信端口
    ng_port: 12020
    # Prometheus 部署文件,启动脚本,配置文件存储目录。
    deploy_dir: "/tidb-deploy/prometheus-8249"
    # Prometheus 服务器存储目录.
    data_dir: "/tidb-data/prometheus-8249"
    # Prometheus 服务器日志存储目录.
    log_dir: "/tidb-deploy/prometheus-8249/log"

# Grafana服务器的配置。
grafana_servers:
  #  Grafana 服务器IP
  - host: 10.11.19.142
    # 远程端口
    # ssh_port: 22
    # Grafana Web服务客户端(浏览器)访问端口
    port: 3000
    # Grafana部署文件,启动脚本,配置文件存储目录
    deploy_dir: /tidb-deploy/grafana-3000

# Alertmanager服务器的配置  
alertmanager_servers:
  # Alertmanager  服务器IP
  - host: 10.11.19.142
    # 远程端口
    # ssh_port: 22
    # Alertmanager Web 服务客户端(浏览器)访问端口
    web_port: 9093
    # Alertmanager 通信端口
    cluster_port: 9094
    # Alertmanager 部署文件、启动脚本、配置文件存储目录
    deploy_dir: "/tidb-deploy/alertmanager-9093"
    # Alertmanager 服务器数据存放目录
    data_dir: "/tidb-data/alertmanager-9093"
    # Alertmanager 服务器日志存放目录
    log_dir: "/tidb-deploy/alertmanager-9093/log"

TiUP 检查集群是否符合

tiup cluster check ./topology.yaml --user root [-p] [-i /home/root/.ssh/gcp_rsa]

TiUP 自动修复集群

tiup cluster check ./topology.yaml --apply --user root [-p] [-i /home/root/.ssh/gcp_rsa]
#  [-i /home/root/.ssh/gcp_rsa]    # 指定密钥的方式

TiUP 自动部署集群

  • tidb-test: 自定义集群名字

  • v7.1.0: Tidb 版本

tiup cluster deploy <cluster-name> <cluster-version> ./topology.yaml --user root [-p] [-i /home/root/.ssh/gcp_rsa]

TiUP 安全启动集群

# 安全启动方式: --init  , 不能通过无密码的 root 用户登录数据库,你需要记录命令行返回的密码进行后续操作
tiup cluster start <cluster-name> --init

TiUP 查看集群列表

tiup cluster list

TiUP 检查集群状态

tiup cluster display <cluster-name>

TIUP 扩容节点

对 TiKV、TiFlash 及 Binlog 组件的操作

  • 停止已经下线掉的节点的服务

  • 清理已经下线掉的节点的相关数据文件

  • 更新集群的拓扑,移除已经下线掉的节点

对其他组件的操作

  • 下线 PD 组件时,会通过 API 将指定节点从集群中删除掉(这个过程很快),然后停掉指定 PD 的服务并且清除该节点的相关数据文件

  • 下线其他组件时,直接停止并且清除节点的相关数据文件

参考: https://docs.pingcap.com/zh/tidb/dev/scale-tidb-using-tiup

编写扩容拓扑配置

可以使用 tiup cluster edit-config 查看当前集群的配置信息,因为其中的 global 和 server_configs 参数配置默认会被 scale-out.yml 继承,因此也会在 scale-out.yml 中生效。

# scale-out.yml 
tidb_servers:
  - host: 10.11.19.146
    #ssh_port: 22
    port: 4000
    status_port: 10080
    deploy_dir: /tidb-deploy/tidb-4000
    log_dir: /tidb-deploy/tidb-4000/log


tikv_servers:
  - host: 10.11.19.146
    #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


pd_servers:
  - host: 10.11.19.146
    #ssh_port: 22
    name: pd-4
    client_port: 2379
    peer_port: 2380
    deploy_dir: /tidb-deploy/pd-2379
    data_dir: /tidb-data/pd-2379
    log_dir: /tidb-deploy/pd-2379/log

执行扩容命令


# 检查集群存在的潜在风险
tiup cluster check <cluster-name> scale-out.yml --cluster --user root [-p] [-i /home/root/.ssh/gcp_rsa]

# 自动修复集群存在的潜在风险
tiup cluster check <cluster-name> scale-out.yml --cluster --apply --user root [-p] [-i /home/root/.ssh/gcp_rsa]

# 执行 scale-out 命令扩容 TiDB 集群
tiup cluster scale-out <cluster-name> scale-out.yaml --user root -p

TIUP 缩容节点

正常缩容

# 查看 tidb-test 集群
[admin@es1 ~]$ tiup cluster display tidb-test
tiup is checking updates for component cluster ...
Starting component `cluster`: /home/admin/.tiup/components/cluster/v1.12.2/tiup-cluster display tidb-test
Cluster type:       tidb
Cluster name:       tidb-test
Cluster version:    v7.1.0
Deploy user:        tidb
SSH type:           builtin
Dashboard URL:      http://10.11.19.142:2379/dashboard
Grafana URL:        http://10.11.19.142:3000
ID                  Role          Host          Ports        OS/Arch       Status  Data Dir                      Deploy Dir
--                  ----          ----          -----        -------       ------  --------                      ----------
10.11.19.142:9093   alertmanager  10.11.19.142  9093/9094    linux/x86_64  Up      /tidb-data/alertmanager-9093  /tidb-deploy/alertmanager-9093
10.11.19.142:3000   grafana       10.11.19.142  3000         linux/x86_64  Up      -                             /tidb-deploy/grafana-3000
10.11.19.142:2379   pd            10.11.19.142  2379/2380    linux/x86_64  Up|UI   /tidb-data/pd-2379            /tidb-deploy/pd-2379
10.11.19.143:2379   pd            10.11.19.143  2379/2380    linux/x86_64  Up      /tidb-data/pd-2379            /tidb-deploy/pd-2379
10.11.19.144:2379   pd            10.11.19.144  2379/2380    linux/x86_64  Up|L    /tidb-data/pd-2379            /tidb-deploy/pd-2379
10.11.19.146:2379   pd            10.11.19.146  2379/2380    linux/x86_64  Up      /tidb-data/pd-2379            /tidb-deploy/pd-2379
10.11.19.142:9090   prometheus    10.11.19.142  9090/12020   linux/x86_64  Up      /tidb-data/prometheus-8249    /tidb-deploy/prometheus-8249
10.11.19.142:4000   tidb          10.11.19.142  4000/10080   linux/x86_64  Up      -                             /tidb-deploy/tidb-4000
10.11.19.143:4000   tidb          10.11.19.143  4000/10080   linux/x86_64  Up      -                             /tidb-deploy/tidb-4000
10.11.19.144:4000   tidb          10.11.19.144  4000/10080   linux/x86_64  Up      -                             /tidb-deploy/tidb-4000
10.11.19.146:4000   tidb          10.11.19.146  4000/10080   linux/x86_64  Up      -                             /tidb-deploy/tidb-4000
10.11.19.142:20160  tikv          10.11.19.142  20160/20180  linux/x86_64  Up      /tidb-data/tikv-20160         /tidb-deploy/tikv-20160
10.11.19.143:20160  tikv          10.11.19.143  20160/20180  linux/x86_64  Up      /tidb-data/tikv-20160         /tidb-deploy/tikv-20160
10.11.19.144:20160  tikv          10.11.19.144  20160/20180  linux/x86_64  Up      /tidb-data/tikv-20160         /tidb-deploy/tikv-20160
10.11.19.146:20160  tikv          10.11.19.146  20160/20180  linux/x86_64  Up      /tidb-data/tikv-20160         /tidb-deploy/tikv-20160





# 执行缩容
tiup cluster scale-in tidb-test --node 10.11.19.146:20160 --node 10.11.19.146:4000 --node 10.11.19.146:2379

---
    There are some nodes can be pruned: 
            Nodes: [10.11.19.146:20160]
            You can destroy them with the command: `tiup cluster prune tidb-test`
---


# 如果过了很久都没有消失,可以手动执行: tiup cluster prune tidb-test  清除 Tombstone 的节点信息

TiUP 切换 PD Dashboard 到其他节点

  • 版本: v7.1.0

  • 集群: tidb-test

正常切换

  • 通信正常情况下(直接切换)

# 中控机执行
tiup cluster display tidb-test  # 查看 CLUSTER_VERSION 版本,例如: Cluster version: v7.1.0
tiup ctl:v7.1.0 pd -u http://<原PD:2379> config set dashboard-address http://<新PD:2379>

故障切换

  • 先禁用 TiDB Dashboard

  • 重新启用 TiDB Dashboard

# 中控机执行, 禁用 TiDB Dashboard
tiup ctl:v7.1.0 pd -u http://10.11.19.142:2379 config set dashboard-address none


# 重新查看
tiup cluster display tidb-test --dashboard



# 自动选举 <重新启用 TiDB Dashboard>
tiup ctl:v7.1.0 pd -u http://<任意PD节>:2379 config set dashboard-address auto


# 允许指定节点  <重新启用 TiDB Dashboard>
tiup ctl:v7.1.0 pd -u http://<任意PD节>:2379 config set dashboard-address http://<指定PD>:2379

注意: 若新启用的 TiDB Dashboard 实例与禁用前的实例不一致,将会丢失之前 TiDB Dashboard 实例所存储的本地数据,包括流量可视化历史、历史搜索记录等。

TiDB Dashboard 安全问题

  • 为 root 用户设置强密码

  • 为 TiDB Dashboard 创建最小权限用户

  • 用防火墙阻止不可信访问

  • 通过反向代理使用 TiDB Dashboard

# 例如: PD WEB UI 地址: http://192.168.0.123:2379/dashboard/
server {
  listen 8033;
  location /dashboard/ {
    proxy_pass http://192.168.0.123:2379/dashboard/;
  }
}

建议 root 强密码,防火墙配置

TiDB 备份与恢复实践示例

# 安装
tiup install br:v7.1.0

# 升级
tiup update br:v7.1.0

配置备份存储 (Amazon S3)

  • 1、在 S3 创建用于保存备份数据的目录 s3://tidb-pitr-bucket/backup-data

    • 创建 bucket: tidb-pitr-bucket

    • 创建备份数据总目录: backup-data

  • 2、配置 br 命令行工具和 TiKV 访问 S3 中的备份目录的权限

    • 备份集群的 TiKV 和 br 命令行工具需要的 s3://<桶名>/<文件夹> 权限

      • s3:ListBucket

      • s3:PutObject

      • s3:AbortMultipartUpload。

    • 恢复集群的 TiKV 和 br 命令行工具需要 s3://<桶名>/<文件夹> 的最小权限

      • s3:ListBucket

      • s3:GetObject

      • s3:PutObject。

  • 3、规划备份数据保存的目录结构,以及快照(全量)备份和日志备份的目录。

    • 所有快照备份保存在 s3://tidb-pitr-bucket/backup-data/snapshot-${date} 目录下,${date} 为快照备份开始的时间点,如在 2022/05/12 00:01:30 开始的快照备份保存为 s3://tidb-pitr-bucket/backup-data/snapshot-20220512000130。

    • 日志备份保存在 s3://tidb-pitr-bucket/backup-data/log-backup/ 目录下。

示例: TiUP 备份快照数据到 AWS S3

tiup br backup full -u "${PD_IP}:2379" \
--storage "s3://external/backup-20220915?access-key=${access-key}&secret-access-key=${secret-access-key}"

示例: TiUP 从 AWS S3 恢复快照备份数据

tiup br  restore full -u "${PD_IP}:2379" \
--storage "s3://external/backup-20220915?access-key=${access-key}&secret-access-key=${secret-access-key}"

TIUP 实战备份

AWS参考格式: URL格式参考: https://docs.pingcap.com/zh/tidb/stable/backup-and-restore-storages

  • 运行日志备份,持续不断备份数据库数据变更;

  • 每隔两天在零点左右进行一次快照备份;

  • 保存 30 天内的快照备份和日志备份数据,清理超过 30 天的备份数据。

1、执行日志备份(必须)

  • 结合快照备份,可以恢复到历史指定时间点的用户数据

  • 日志备份持续不断将数据库变更数据备份到 S3 中,(实测默认是间隔2分30秒左右)

# 启动日志备份任务后,日志备份进程会在 TiKV 集群运行,持续不断将数据库变更数据备份到 S3 中。
# task-name: 自定义名字

tiup br log start --task-name=${task-name} --pd="${PD_IP}:2379" \
--storage="s3://tidb-pitr-bucket/backup-data/log-backup?access-key=${access-key}&secret-access-key=${secret-access-key}"


# 查看所有任务
tiup br log status --pd="${PD_IP}:2379"

# 查看某一个任务
tiup br log status --task-name=${task-name} --pd="${PD_IP}:2379"

2、执行快照备份(必须)

  • 可以借助 Contab 定时任务做备份

# PD_IP: PD 服务IP地址
# TIME_NOW_STR1: S3备份文件夹名字
# TIME_NOW_STR2: 时间点
# ACCESS_KEY: S3 access_key
# SECRET_ACCESS_KEY: S3 密钥

PD_IP="10.11.19.142"
TIME_NOW_STR1=`date +%Y%m%d%H%M%S`
TIME_NOW_STR2=`date +%F\ %T`
ACCESS_KEY="AKIASFD2HMQ7LSDXZ6H2"
SECRET_ACCESS_KEY="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"

tiup br backup full --pd="${PD_IP}:2379" \
--storage="s3://tidb-pitr-bucket/backup-data/snapshot-${TIME_NOW_STR1}?access-key=${ACCESS_KEY}&secret-access-key=${SECRET_ACCESS_KEY}" \
--backupts="${TIME_NOW_STR2}"


# 可根据 echo $? 做执行快照备份成功判断

TIUP 恢复备份

  • 恢复的时候需要先暂停日志备份任务

# 假如只有一个 pitr 日志备份任务正在运行, 先暂停,再执行恢复
tiup br log status  --pd="{PD_IP}:2379"
tiup br log stop --task-name=pitr --pd="{PD_IP}:2379"

恢复指定快照日期

# 快照日期
SNAPSHOT_TIME="202209150000"

tiup br restore full -u "${PD_IP}:2379" \
--storage "s3://tidb-pitr-bucket/backup-data/snapshot-${SNAPSHOT_TIME}?access-key=${access-key}&secret-access-key=${secret-access-key}"

执行 PITR(恢复到指定时间位置)

  • 假设你接到需求,要准备一个(新)集群查询 2022/05/15 18:00:00 时间点的用户数据。

  • 此时,你可以制定 PITR 方案,恢复 2022/05/14 的快照备份和该快照到 2022/05/15 18:00:00 之间的日志备份数据,从而收集到目标数据。

# 1、恢复 2022-05-14 00:00:00 快照备份
# 2、该快照到 2022-05-15 18:00:00 之间的日志备份数据,从而收集到目标数据
S3_DIR_TIME="20220514000000"
RESTORE_TIME="2022-05-15 18:00:00+0800"



tiup br restore point --pd="${PD_IP}:2379" \
--storage='s3://tidb-pitr-bucket/backup-data/log-backup' \
--full-backup-storage="s3://tidb-pitr-bucket/backup-data/snapshot-${S3_DIR_TIME}?access-key=${access-key}&secret-access-key=${secret-access-key}" \
--restored-ts ${RESTORE_TIME}

TiDB 日志备份与 PITR 命令行手册

官网更详细: https://docs.pingcap.com/zh/tidb/stable/br-pitr-manual#%E6%9F%A5%E8%AF%A2%E6%97%A5%E5%BF%97%E5%A4%87%E4%BB%BD%E4%BB%BB%E5%8A%A1

日常巡检

官网更详细: https://docs.pingcap.com/zh/tidb/stable/daily-check

MYSQL|TIDB 全量迁移

  • 1、MYSQL|TIDB 把数据先全量备份导出,sql 结尾文件

  • 2、sql 文件导入到 TIDB 集群中

安装组件

# 中控机
tiup install dumpling tidb-lightning
  • dumpling: 可以把存储在 TiDB 或 MySQL 中的数据导出为 SQL 或 CSV 格式,用于逻辑全量备份

    • filetype: sql/csv 两种类型

    • B: 备份指定数据库

    • t: 线程数

    • o: 存储路径

    • r: 指定单个文件的最大行数

    • F: 指定单个文件的最大大小,单位为 MiB,可接受类似 5GiB 或 8KB 的输入。

    • 更多参考: https://docs.pingcap.com/zh/tidb/stable/dumpling-overview

  • Lightning: 是用于从静态文件导入 TB 级数据到 TiDB 集群的工具,常用于 TiDB 集群的初始化数据导入。

    • 物理导入模式:快(100 ~ 500 GiB/小时)-->无法提供服务,常用于初始化导入

    • 逻辑导入模式:慢(10 ~ 50 GiB/小时)-->可提供服务,常用于生产环境线上有数据

    • 更多参考: https://docs.pingcap.com/zh/tidb/stable/tidb-lightning-overview

注意: 如果你想使用 TiDB Lightning 将该文件加载到 TiDB 实例中,建议将 -F 选项的值保持在 256 MiB 或以下 注意: 如果导出的单表大小超过 10 GB,强烈建议使用 -r 和 -F 参数。

导出数据

# 全量导出: 比如全量迁移 MYSQL 远程数据库的数据
tiup dumpling -h 10.11.19.247 -u root -p 123456 -P 3306  --filetype sql -t 8 -o /tmp/test -r 200000 -F256MiB


# 指定库导出: 比如远程服务器 MYSQL 数据库: fastapi , 用户名/密码: fastapi/fastapi
tiup dumpling -h 10.11.19.247 -u fastapi -p fastapi -P 3306  -B fastapi  --filetype sql -t 8 -o /tmp/test -r 200000 -F256MiB


# 导出到 Amazon S3 云盘
export Bucket="s3_bucket"
export Folder="back-data"
export AWS_ACCESS_KEY_ID="xxxx"
export AWS_SECRET_ACCESS_KEY="xxxx"

tiup dumpling -h 10.11.19.247 -u root -p 123456 -P 3306 -r 200000 -o "s3://${Bucket}/${Folder}?access-key=${AWS_ACCESS_KEY_ID}&secret-access-key=${AWS_SECRET_ACCESS_KEY}"

导入数据

/tmp/test/ 刚刚导出的 sql 目录地址

  • 配置 tidb-lightning.toml

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

[tikv-importer]
# 选择使用的导入模式, local 物理导入模式, tidb 逻辑导入模式
backend = "tidb"
# 设置排序的键值对的临时存放地址,目标路径需要是一个空目录
sorted-kv-dir = "/tmp/ssd/sorted-kv-dir"

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

# 配置通配符规则,默认规则会过滤 mysql、sys、INFORMATION_SCHEMA、PERFORMANCE_SCHEMA、METRICS_SCHEMA、INSPECTION_SCHEMA 系统数据库下的所有表
# 若不配置该项,导入系统表时会出现“找不到 schema”的异常
filter = ['*.*', '!mysql.*', '!sys.*', '!INFORMATION_SCHEMA.*', '!PERFORMANCE_SCHEMA.*', '!METRICS_SCHEMA.*', '!INSPECTION_SCHEMA.*']
[tidb]
# 目标集群的信息
host = "10.11.19.142"
port = 4000
user = "root"
password = "rootroot"
# 表架构信息在从 TiDB 的“状态端口”获取。
status-port = 10080
# 集群 pd 的地址
pd-addr = "10.11.19.142:2379"
  • 启动 tidb-lightning

#!/bin/bash
nohup tiup tidb-lightning -config tidb-lightning.toml > nohup.out &

# 导入完毕后,TiDB Lightning 会自动退出。若导入成功,日志的最后一行会显示 tidb lightning exit。

tiup dmctl --master-addr 10.11.19.141:8261 operate-source create source1.yaml

MYSQL|TIDB 不停机迁移

部署参考: https://docs.pingcap.com/zh/tidb-data-migration/v5.3/deploy-a-dm-cluster-using-tiup 具体迁移参考: https://docs.pingcap.com/zh/tidb-data-migration/v5.3/migrate-data-using-dm

DM 集群安装组件

tiup install dm dmctl

编辑初始化配置文件

tiup dm template > dm.yaml


[admin@es1 ~]$ cat dm.yaml 
# 这里没有使用高可用集群方式
---
global:
  user: "tidb"
  ssh_port: 22
  deploy_dir: "/home/tidb/dm/deploy"
  data_dir: "/home/tidb/dm/data"
  # arch: "amd64"

master_servers:
  - host: 10.11.19.141

执行部署命令

# tiup list dm-master 来查看 TiUP 支持的最新版本。
tiup dm deploy dm-test ${version} ./dm.yaml --user root [-p] [-i /home/root/.ssh/gcp_rsa]
# 预期日志结尾输出会有 Deployed cluster `dm-test` successfully 关键词,表示部署成功。

检查

tiup dm list               # 查看 TiUP 管理的集群情况
tiup dm display dm-test    # 检查部署的 DM 集群情况
tiup dm start dm-test      # 启动集群
tiup dm display dm-test    # 验证集群运行状态

Last updated