Skip to content

TiDB

TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP)的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库、兼容 MySQL 5.7 协议和 MySQL 生态等重要特性。目标是为用户提供一站式 OLTP (Online Transactional Processing)、OLAP (Online Analytical Processing)、HTAP 解决方案。TiDB 适合高可用、强一致要求较高、数据规模较大等各种应用场景。

截止到 2020-06-02, TiDB 的最新版本是 TiDB 4.0:

发版日期:2020 年 5 月 15 日

TiDB 版本:4.0.0-rc.2

TiUP 版本:4.0.0-rc.2

TiDB 数据库单机版的部署

准备环境

  • 推荐安装 CentOS 7.3 及以上版本
  • Linux 操作系统开放外网访问,用于下载 TiDB 及相关软件安装包
  • 部署需要使用部署主机的 root 用户及密码
  • 部署需要关闭防火墙或者开放 TiDB 集群的节点间所需端口

最小规模的 TiDB 集群拓扑:

实例个数IP配置
TiKV2127.0.0.1
127.0.0.1
127.0.0.1
避免端口和目录冲突
TiDB1127.0.0.1默认端口
全局目录配置
PD1127.0.0.1默认端口
全局目录配置
TiFlash1127.0.0.1默认端口
全局目录配置
Monitor1127.0.0.1默认端口
全局目录配置

实施部署

  1. 下载并安装 TiUP:

    sh
    $ curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
    
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 	 Dload  Upload   Total   Spent    Left  Speed
    100 4131k  100 4131k    0     0  3685k      0  0:00:01  0:00:01 --:--:-- 3685k
    Detected shell: /bin/bash
    Shell profile:  /root/.bash_profile
    /root/.bash_profile has been modified to to add tiup to PATH
    open a new terminal or source /root/.bash_profile to use it
    Installed path: /root/.tiup/bin/tiup
    ===============================================
    Have a try:     tiup playground
    ===============================================

安装 TiUP 后需要重新打开命令终端才能使用 tiup 命令。

  1. 安装 TiUP 的 cluster 组件:

    sh
    $ tiup cluster
    
    The component `cluster` is not installed; downloading from repository.
    
    ...
    
    Starting component `cluster`: /root/.tiup/components/cluster/v1.0.1/tiup-cluster
    Deploy a TiDB cluster for production
    
    Usage:
      tiup cluster cluster [flags]
      tiup cluster [command]
    
    Available Commands:
      check       Perform preflight checks for the cluster.
      deploy      Deploy a cluster for production
      start       Start a TiDB cluster
      stop        Stop a TiDB cluster
      restart     Restart a TiDB cluster
      scale-in    Scale in a TiDB cluster
      scale-out   Scale out a TiDB cluster
      destroy     Destroy a specified cluster
      upgrade     Upgrade a specified TiDB cluster
      exec        Run shell command on host in the tidb cluster
      display     Display information of a TiDB cluster
      list        List all clusters
      audit       Show audit log of cluster operation
      import      Import an exist TiDB cluster from TiDB-Ansible
      edit-config Edit TiDB cluster config
      reload      Reload a TiDB cluster's config and restart if needed
      patch       Replace the remote package with a specified package and restart the service
      help        Help about any command
    
    Flags:
      -h, --help               help for tiup
          --ssh-timeout int    Timeout in seconds to connect host via SSH, ignored for operations that don't need an SSH connection. (default 5)
      -v, --version            version for tiup
          --wait-timeout int   Timeout in seconds to wait for an operation to complete, ignored for operations that don't fit. (default 60)
      -y, --yes                Skip all confirmations and assumes 'yes'
    
    Use "tiup cluster help [command]" for more information about a command.
  2. 如果机器已经安装 TiUP cluster,需要更新软件版本:

    sh
    $ tiup update cluster
    
    component cluster version v1.0.1 is already installed
    Updated successfully!
  3. 由于模拟多机部署,需要通过 root 用户调大 sshd 服务的连接数限制:

    1. 修改 /etc/ssh/sshd_configMaxSessions 调至 20;

    2. 重启 sshd 服务:

      sh
      $ service sshd restart
      
      Redirecting to /bin/systemctl restart sshd.service
  4. 创建并启动集群:

    按下面的配置模板,编辑配置文件,命名为 topo.yaml,其中:

    • user: "root":表示通过 root 系统用户(部署会自动创建)来做集群的内部管理,默认使用 22 端口通过 ssh 登录目标机器

    • replication.enable-placement-rules:设置这个 PD 参数来确保 TiFlash 正常运行

    • host:设置为本部署主机的 IP

    步骤如下:

    sh
    $ mkdir tidb
    
    $ cd tidb/
    
    $ touch topo.yaml

    topo.yaml 文件的配置模板如下:

    sh
    # # Global variables are applied to all deployments and used as the default value of
    # # the deployments if a specific deployment value is missing.
    global:
     user: "root"
     ssh_port: 22
     deploy_dir: "/tidb/tidb-deploy"
     data_dir: "/tidb/tidb-data"
        
    # # Monitored variables are applied to all the machines.
    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
     tiflash:
       logger.level: "info"
        
    pd_servers:
     - host: 127.0.0.1
        
    tidb_servers:
     - host: 127.0.0.1
        
    tikv_servers:
     - host: 127.0.0.1
       port: 20160
       status_port: 20180
        
     - host: 127.0.0.1
       port: 20161
       status_port: 20181
        
     - host: 127.0.0.1
       port: 20162
       status_port: 20182
        
    tiflash_servers:
     - host: 127.0.0.1
        
    monitoring_servers:
     - host: 127.0.0.1
        
    grafana_servers:
     - host: 127.0.0.1
  5. 执行集群部署命令:

    sh
    $ tiup cluster deploy tidb-test v4.0.0 ./topo.yaml --user root [-p] [-i /home/root/.ssh/gcp_rsa]

    以上部署命令中:

    • 通过 TiUP cluster 部署的集群名称为 tidb-test

    • 部署版本为 v4.0.0,最新版本可以通过执行 tiup list tidb 来查看 TiUP 支持的版本 初始化配置文件为 topo.yaml

    • –user root:通过 root 用户登录到目标主机完成集群部署,该用户需要有 ssh 到目标机器的权限,并且在目标机器有 sudo 权限。也可以用其他有 ssh 和 sudo 权限的用户完成部署。

    • [-i] 及 [-p]:非必选项,如果已经配置免密登陆目标机,则不需填写。否则选择其一即可,[-i] 为可登录到部署机的 root 用户(或 –user 指定的其他用户)的私钥,也可使用 [-p] 交互式输入该用户的密码

    按照引导,输入”y”及 root 密码,来完成部署:

    sh
    Do you want to continue? [y/N]:  y
    Input SSH password:

    预期日志结尾输出会有 Deployed cluster tidb-test successfully 关键词,表示部署成功。

  6. 启动集群:

    sh
    $ tiup cluster start <cluster-name>
  7. 访问集群:

    访问 TiDB 数据库,密码为空:

    sh
    $ mysql -h 127.0.0.1 -P 4000 -u root

从 MySQL 迁移至 TiDB

官网推荐两种方式将 MySQL 数据迁移到 TiDB:

  • 使用 Mydumper 和 TiDB Lightning 迁移全量数据

    适合 MySQL 全量数据的大小大于 1TB 的场景。该方案只能迁移全量数据,如果需要继续同步增量数据,需要再使用 TiDB Data Migration (DM) 创建增量同步任务。

  • 使用 DM 迁移数据

    适合迁移 MySQL 全量数据并同步增量数据的场景,且全量数据的大小小于 1TB。如果全量数据的大小大于 1TB,建议使用 Mydumper 和 TiDB Lightning 导入全量数据后,再使用 DM 同步增量数据。

这里用的是第一种方案,下面是迁移步骤。

使用 Mydumper 和 TiDB Lightning 迁移全量数据

使用 Mydumper 生成 MySQL SQL 文件

  1. Mydumper 包含在 tidb-enterprise-tools 安装包中,下载地址:https://download.pingcap.org/tidb-enterprise-tools-nightly-linux-amd64.tar.gz

  2. 解压 tidb-enterprise-tools-nightly-linux-amd64.tar.gz 文件:

    sh
    $ tar -zxvf tidb-enterprise-tools-nightly-linux-amd64.tar.gz
  3. 使用 mydumper 从 MySQL 导出数据:

    sh
    $ cd /tidb-enterprise-tools-nightly-linux-amd64/bin/
    
    $ ./bin/mydumper -h 127.0.0.1 -P 3306 -u root -t 16 -F 256 -B test -T t1,t2 --skip-tz-utc -o /data/my_database/

    其中:

    -B test:从 test 数据库导出。

    -T t1,t2:只导出 t1t2 这两个表。

    -t 16:使用 16 个线程导出数据。

    -F 256:将每张表切分成多个文件,每个文件大小约为 256 MB。

    --skip-tz-utc:添加这个参数则会忽略掉 TiDB 与导数据的机器之间时区设置不一致的情况,禁止自动转换。

    这样全量备份数据就导出到了 /data/my_database 目录中。

使用 Lightning 将数据导入 TiDB

  1. 部署 TiDB 集群

    在开始数据导入之前,需先部署 TiDB,建议使用最新版。

  2. 下载 TiDB Lightning 安装包(需选择与 TiDB 集群相同的版本),下载地址:https://download.pingcap.org/tidb-toolkit-{version}-linux-amd64.tar.gz

    注意

    下载链接中的 {version} 为 TiDB Lightning 的版本号。例如,v4.0.0 版本的下载链接为 https://download.pingcap.org/tidb-toolkit-v4.0.0-linux-amd64.tar.gz

  3. 解压 tidb-toolkit-v4.0.0-linux-amd64.tar.gz 文件:

    sh
    $ tar -zxvf tidb-toolkit-v4.0.0-linux-amd64.tar.gz
TiDB Lightning TiDB-Backend

TiDB Lightning 的后端决定 tidb-lightning 将如何把将数据导入到目标集群中。目前,TiDB Lightning 支持 Importer-backend(默认)和 TiDB-backend 两种后端,两者导入数据的区别如下:

  • Importer-backend tidb-lightning 先将 SQL 或 CSV 数据编码成键值对,由 tikv-importer 对写入的键值对进行排序,然后把这些键值对 Ingest 到 TiKV 节点中。

  • TiDB-backend tidb-lightning 先将数据编码成 INSERT 语句,然后直接在 TiDB 节点上运行这些 SQL 语句进行数据导入。

这里使用第二种方式 TiDB-backend 进行数据导入。

  1. 启动 tidb-lightning

    1. 新建 tidb-lightning.toml。对于没有出现在下述模版中的配置,TiDB Lightning 给出配置错误的提醒并退出。

      sh
      $ cd /tidb-toolkit-v4.0.0-linux-amd64/bin/
      
      $ touch tidb-lightning.toml

      topo.yaml 文件的配置模板如下:

      sh
      # 转换数据的并发数,默认为逻辑 CPU 数量,不需要配置。
      # 混合部署的情况下可以配置为逻辑 CPU 的 75% 大小。
      # region-concurrency =
      
      # 日志
      level = "info"
      file = "tidb-lightning.log"
      
      [tikv-importer]
      # tikv-importer 的监听地址,需改成 tikv-importer 服务器的实际地址。
      addr = "172.16.31.10:8287"
      
      [mydumper]
      # Mydumper 源数据目录。
      data-source-dir = "/data/my_database"
      
      [tidb]
      # 目标集群的信息。tidb-server 的监听地址,填一个即可。
      host = "172.16.31.1"
      port = 4000
      user = "root"
      password = ""
      # 表架构信息在从 TiDB 的“状态端口”获取。
      status-port = 10080

      注意

      在运行 tidb-lightning 之前,在配置文件中加上如下几行:

      sh
      [tikv-importer]
      backend = "tidb"

      或者在用命令行启动 tidb-lightning 时,传入参数 --backend tidb

    2. 运行 tidb-lightning。如果直接在命令行中用 nohup 启动程序,可能会因为 SIGHUP 信号而退出,建议把 nohup 放到脚本里面,如:

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

提示

tidb-lightning 因不可恢复的错误而退出(例如数据出错),重启时不会使用断点,而是直接报错离开。为保证已导入的数据安全,这些错误必须先解决掉才能继续。使用 tidb-lightning-ctl 工具可以标示已经恢复。

  • checkpoint-remove

    sh
    $ ./tidb-lightning-ctl --checkpoint-remove=all

    无论是否有出错,把表的断点清除。

  • checkpoint-dump

    sh
    $ ./tidb-lightning-ctl --checkpoint-dump=output/directory

    将所有断点备份到传入的文件夹,主要用于技术支持。此选项仅于 driver = "mysql" 时有效。

Released under the MIT License.