写点什么

TiDB 跨版本升级 -- 新人首次尝试🧐

  • 2022 年 9 月 09 日
    北京
  • 本文字数:19561 字

    阅读完需:约 64 分钟

作者: 天蓝色的小九原文来源:https://tidb.net/blog/8c8bdb7c

升级背景

  1. 原集群版本过低,运维难度大,决定进行版本升级

  2. 经过测试发现,v5.4.0 版本相对于 v3.0.10 版本性能有很大提升

  3. 决定将 TiDB v3.0.10 升级到 TiDB v5.4.0

升级方式

本次升级采用 Dumpling+Lighting+TiDB binlog 进行


【升级方式划分】大体分为停机升级不停机升级 根据字面意思理解,我们可以根据业务的要求来进行选择,如果业务允许进行停机升级,那相对来说我们选择停机升级会更加的安全,快速,如果业务不允许停机的话我们主要选择就是不停机升级

不停机升级 根据官方文档来看,需要通过特定方式来进行滚动升级 滚动升级对于我们来说或许是一个很好的选择,但问题就是:1、业务需求回滚,我们的回滚方案通常需要针对于全备 + 增量的方式来进行回滚,回滚进度较慢 2、因版本差距过大的话,连续进行滚动升级,不可控因素增多 3、老版本通常采用 Ansible 安装,又想让新版本适用 tiup 进行管理,操作起来较为复杂 # 因为种种因素原因,最终决定采用 Dumpling+Lightning+TiDB Binlog 的方式,可以有效的规避一系列繁琐问题。


  • 获取相关信息

  • 创建 TiDB v5.3.0 的目标集群

  • Dumpling 对原集群进行数据导出

  • Lightning 对目标集群进行数据导入

  • 启动 Drainer 进行增量同步

  • sync-diff-inspector 进行数据校验

  • 搭建回滚链路

  • 切换业务

升级步骤

Ansible 安装 3.0.8 版本 TiDB

一、在中控机上安装系统依赖包

yum -y install epel-release git curl sshpass && \yum -y install python2-pip
复制代码

二、在中控机上创建用户,并生成 SSH Key

1、创建用户useradd -m -d /home/tidb tidb2、设置用户密码passwd tidb3、配置用户sudo免密码,将tidb ALL=(ALL) NOPASSWD: ALL 添加到文件末尾即可visudotidb ALL=(ALL) NOPASSWD: ALL4、生成SSH Keysu - tidbssh-keygen -t rsa
复制代码

三、在中控机器上下载 TiDB Ansible

1、以创建的用户登录中控机器并进入到/home/tidb目录,使用命令从TiDB Ansible项目上下载相应版本git clone -b 版本 https://github.com/pingcap/tidb-ansible.git#部署和升级 TiDB 集群需使用对应的 tidb-ansible 版本,通过改 inventory.ini 文件中的版本来混用可能会产生一些错误。#请务必按文档操作,将 tidb-ansible 下载到 /home/tidb 目录下,权限为 tidb 用户,不要下载到 /root 下,否则会遇到权限问题。
复制代码

四、在中控机器上安装 TiDB Ansible 及其依赖

1、在中控机器上安装TiDB Ansible及其依赖cd /home/tidb/tidb-ansible && \sudo pip install -r ./requirements.txt2、查看Ansible的版本ansible --version
复制代码

五、在中控机器上配置部署机器 SSH 互信及 sudo 规则

1、将部署的目标机器ip添加到hosts.ini文件的[servers]区块下cd /home/tidb/tidb-ansible && \vi hosts.ini[servers]172.16.10.1172.16.10.2172.16.10.3172.16.10.4172.16.10.5172.16.10.6[all:vars]username = tidbntp_server = pool.ntp.org2、执行命令,按提示输入部署目标机器的root用户密码ansible-playbook -i hosts.ini create_users.yml -u root -k
复制代码

六、在部署目标机器上安装 NTP 服务

1、登录中控机器执行命令cd /home/tidb/tidb-ansible && \ansible-playbook -i hosts.ini deploy_ntp.yml -u tidb -b#该步骤将在部署目标机器上使用系统自带软件源联网安装并启动 NTP 服务,服务使用安装包默认的 NTP server 列表,见配置文件 /etc/ntp.conf 中 server 参数。如果使用默认的 NTP server,你的机器需要连接外网。#为了让 NTP 尽快开始同步,启动 NTP 服务前,系统会执行 ntpdate 命令,与用户在 hosts.ini 文件中指定的 ntp_server 同步日期与时间。默认的服务器为 pool.ntp.org,也可替换为你的 NTP server。
复制代码

七、在部署的目标机器上配置 CPUfreq 调节器模式

#为了让 CPU 发挥最大性能,请将 CPUfreq 调节器模式设置为 performance 模式。1、查看系统支持的调节器模式cpupower frequency-info --governors#如果返回 Not Available,表示当前系统不支持配置 CPUfreq,跳过该步骤即可。2、查看系统当前的CPUfreq调节器模式cpupower frequency-info --policy3、修改调节器模式(1)使用cpupower frequency-set --governor命令来修改cpupower frequency-set --governor performance(2)使用命令在部署目标机器上批量设置ansible -i hosts.ini all -m shell -a "cpupower frequency-set --governor performance" -u tidb -b
复制代码

八、在部署的目标机器上添加数据盘 ext4 文件系统挂在参数

#使用 root 用户登录目标机器,将部署目标机器数据盘格式化成 ext4 文件系统,挂载时添加 nodelalloc 和 noatime 挂载参数。nodelalloc 是必选参数,否则 Ansible 安装时检测无法通过;noatime 是可选建议参数#如果你的数据盘已经格式化成 ext4 并挂载了磁盘,可先执行 umount /dev/nvme0n1p1 命令卸载,从编辑 /etc/fstab 文件步骤开始执行,添加挂载参数重新挂载即可。1、查看数据盘fdisk -l2、创建分区表parted -s -a optimal /dev/nvme0n1 mklabel gpt -- mkpart primary ext4 1 -13、格式化文件系统mkfs.ext4 /dev/nvme0n1p14、查看数据盘分区UUIDlsblk -f5、编辑/etc/fstab文件,添加nodelalloc参数vi /etc/fstabUUID=第4步查看到的ID /data1 ext4 defaults,nodelalloc,noatime 0 26、挂载数据盘mkdir /data1 && \mount -a7、执行以下命令,如果文件系统为ext4,并且挂载参数中包含nodelalloc,则表示生效mount -t ext4/dev/nvme0n1p1 on /data1 type ext4 (rw,noatime,nodelalloc,data=ordered)
复制代码

九、编辑 inventory.ini 文件,分配机器资源

#请使用内网 IP 来部署集群,如果部署目标机器 SSH 端口非默认的 22 端口,需添加 ansible_port 变量,如 TiDB1 ansible_host=172.16.10.1 ansible_port=5555。1、单机单TiKV实例集群拓扑Name  Host IP              Servicesnode1 172.16.10.1          PD1, TiDB1node2 172.16.10.2          PD2, TiDB2node3 172.16.10.3          PD3node4 172.16.10.4          TiKV1node5 172.16.10.5          TiKV2node6 172.16.10.6          TiKV3[tidb_servers]172.16.10.1172.16.10.2[pd_servers]172.16.10.1172.16.10.2172.16.10.3[tikv_servers]172.16.10.4172.16.10.5172.16.10.6[monitoring_servers]172.16.10.1[grafana_servers]172.16.10.1[monitored_servers]172.16.10.1172.16.10.2172.16.10.3172.16.10.4172.16.10.5172.16.10.62、单机多TiKV实例集群拓扑Name  Host IP     Servicesnode1 172.16.10.1   PD1, TiDB1node2 172.16.10.2   PD2, TiDB2node3 172.16.10.3   PD3node4 172.16.10.4   TiKV1-1, TiKV1-2node5 172.16.10.5   TiKV2-1, TiKV2-2node6 172.16.10.6   TiKV3-1, TiKV3-2[tidb_servers]172.16.10.1172.16.10.2[pd_servers]172.16.10.1172.16.10.2172.16.10.3# 注意:要使用 TiKV 的 labels,必须同时配置 PD 的 location_labels 参数,否则 labels 设置不生效。[tikv_servers]TiKV1-1 ansible_host=172.16.10.4 deploy_dir=/data1/deploy tikv_port=20171 labels="host=tikv1"TiKV1-2 ansible_host=172.16.10.4 deploy_dir=/data2/deploy tikv_port=20172 labels="host=tikv1"TiKV2-1 ansible_host=172.16.10.5 deploy_dir=/data1/deploy tikv_port=20171 labels="host=tikv2"TiKV2-2 ansible_host=172.16.10.5 deploy_dir=/data2/deploy tikv_port=20172 labels="host=tikv2"TiKV3-1 ansible_host=172.16.10.6 deploy_dir=/data1/deploy tikv_port=20171 labels="host=tikv3"TiKV3-2 ansible_host=172.16.10.6 deploy_dir=/data2/deploy tikv_port=20172 labels="host=tikv3"# 部署 3.0 版本的 TiDB 集群时,多实例场景需要额外配置 status 端口,示例如下:# TiKV1-1 ansible_host=172.16.10.4 deploy_dir=/data1/deploy tikv_port=20171 tikv_status_port=20181 labels="host=tikv1"# TiKV1-2 ansible_host=172.16.10.4 deploy_dir=/data2/deploy tikv_port=20172 tikv_status_port=20182 labels="host=tikv1"# TiKV2-1 ansible_host=172.16.10.5 deploy_dir=/data1/deploy tikv_port=20171 tikv_status_port=20181 labels="host=tikv2"# TiKV2-2 ansible_host=172.16.10.5 deploy_dir=/data2/deploy tikv_port=20172 tikv_status_port=20182 labels="host=tikv2"# TiKV3-1 ansible_host=172.16.10.6 deploy_dir=/data1/deploy tikv_port=20171 tikv_status_port=20181 labels="host=tikv3"# TiKV3-2 ansible_host=172.16.10.6 deploy_dir=/data2/deploy tikv_port=20172 tikv_status_port=20182 labels="host=tikv3"[monitoring_servers]172.16.10.1[grafana_servers]172.16.10.1[monitored_servers]172.16.10.1172.16.10.2172.16.10.3172.16.10.4172.16.10.5172.16.10.6# 注意:为使 TiKV 的 labels 设置生效,部署集群时必须设置 PD 的 location_labels 参数。[pd_servers:vars]location_labels = ["host"]3、服务配置文件参数调整#多实例情况下,需要修改 tidb-ansible/conf/tikv.yml 中 block-cache-size 下面的 capacity 参数:storage:  block-cache:    capacity: "1GB"#TiKV 实例数量指每个服务器上 TiKV 的进程数量。#推荐设置:capacity = MEM_TOTAL * 0.5 / TiKV 实例数量#多实例情况下,需要修改 tidb-ansible/conf/tikv.yml 中 high-concurrency、normal-concurrency 和 low-concurrency 三个参数:readpool:  coprocessor:    # Notice: if CPU_NUM > 8, default thread pool size for coprocessors    # will be set to CPU_NUM * 0.8.    # high-concurrency: 8    # normal-concurrency: 8    # low-concurrency: 8#推荐配置:TiKV 实例数量 * 参数值 = CPU 核心数量 * 0.8#如果多个 TiKV 实例部署在同一块物理磁盘上,需要修改 conf/tikv.yml 中的 capacity 参数:raftstore:  capacity: 0#推荐配置:capacity = 磁盘总容量 / TiKV 实例数量,例如:capacity: "100GB"。
复制代码

十、调整 inventory.ini 文件中的变量

1、调整部署目录#部署目录通过 deploy_dir 变量控制,默认全局变量已设置为 /home/tidb/deploy,对所有服务生效。如数据盘挂载目录为 /data1,可设置为 /data1/deploy,样例如下## Global variables[all:vars]deploy_dir = /data1/deploy#如为某一服务单独设置部署目录,可在配置服务主机列表时配置主机变量,以 TiKV 节点为例,其他服务类推,请务必添加第一列别名,以免服务混布时混淆TiKV1-1 ansible_host=172.16.10.4 deploy_dir=/data1/deploy
复制代码


2、调节其他变量(可选)


# 以下控制变量开启请使用首字母大写 True,关闭请使用首字母大写 False


十一、部署 TiDB 集群

#ansible-playbook 执行 Playbook 时,默认并发为 5。部署目标机器较多时,可添加 -f 参数指定并发数,例如 ansible-playbook deploy.yml -f 10。以下示例使用 tidb 用户作为服务运行用户:1、在 tidb-ansible/inventory.ini 文件中,确认 ansible_user = tidb## Connection# ssh via normal useransible_user = tidb#不要将 ansible_user 设置为 root 用户,因为 tidb-ansible 限制了服务以普通用户运行。执行以下命令,如果所有server返回tidb,表示SSH互信配置成功:ansible -i inventory.ini all -m shell -a 'whoami'执行以下命令,如果所有server返回root,表示tidb用户sudo免密码配置成功ansible -i inventory.ini all -m shell -a 'whoami' -b2、执行local_prepare.yml playbook,联网下载 TiDB binary 到中控机。ansible-playbook local_prepare.yml3、初始化系统环境,修改内核参数。ansible-playbook bootstrap.yml4、部署 TiDB 集群软件。ansible-playbook deploy.yml#Grafana Dashboard 上的 Report 按钮可用来生成 PDF 文件,此功能依赖 fontconfig 包和英文字体。如需使用该功能,登录 grafana_servers 机器,用以下命令安装:>sudo yum install fontconfig open-sans-fonts5、启动TiDB集群ansible-playbook start.yml
复制代码

十二、测试集群

#TiDB 兼容 MySQL,因此可使用 MySQL 客户端直接连接 TiDB。推荐配置负载均衡以提供统一的 SQL 接口。1、使用 MySQL 客户端连接 TiDB 集群。TiDB 服务的默认端口为 4000。mysql -u root -h 172.16.10.1 -P 40002、通过浏览器访问监控平台地址:http://ip:端口默认帐号与密码:admin;admin
复制代码

使用 TiUP 部署 TiDB5.4.0 集群

一、在 TiKV 部署目标机器上添加数据盘 EXT4 文件系统挂载参数

#使用 root 用户登录目标机器,将部署目标机器数据盘格式化成 ext4 文件系统,挂载时添加 nodelalloc 和 noatime 挂载参数。nodelalloc 是必选参数,否则 TiUP 安装时检测无法通过;noatime 是可选建议参数。1、查看数据盘fdisk -l2、创建分区parted -s -a optimal /dev/nvme0n1 mklabel gpt -- mkpart primary ext4 1 -1#使用 lsblk 命令查看分区的设备号:对于 nvme 磁盘,生成的分区设备号一般为 nvme0n1p1;对于普通磁盘(例如 /dev/sdb),生成的分区设备号一般为 sdb13、格式化文件系统mkfs.ext4 /dev/nvme0n1p14、查看数据盘分区UUIDlsblk -f5、编辑 /etc/fstab 文件,添加 nodelalloc 挂载参数。vi /etc/fstabUUID=第四步查的UUID /data1 ext4 defaults,nodelalloc,noatime 0 26、挂载数据盘mkdir /data1 && \mount -a7、执行命令,如果文件系统为 ext4,并且挂载参数中包含 nodelalloc,则表示已生效。mount -t ext4
复制代码

二、检测及关闭系统 swap

echo "vm.swappiness = 0">> /etc/sysctl.confswapoff -a && swapon -asysctl -p#一起执行 swapoff -a 和 swapon -a 命令是为了刷新 swap,将 swap 里的数据转储回内存,并清空 swap 里的数据。不可省略 swappiness 设置而只执行 swapoff -a;否则,重启后 swap 会再次自动打开,使得操作失效。#执行 sysctl -p 命令是为了在不重启的情况下使配置生效
复制代码

三、检测即关闭目标部署机器的防火墙

1、检查防火墙状态sudo firewall-cmd --statesudo systemctl status firewalld.service2、关闭防火墙服务sudo systemctl stop firewalld.service3、关闭防火墙自动启动服务sudo systemctl disable firewalld.service4、检查防火墙状态sudo systemctl status firewalld.service
复制代码

四、检测及安装 NTP 服务

1、执行以下命令,如果输出running表示NTP服务正在运行sudo systemctl status ntpd.servicentpd.service - Network Time ServiceLoaded: loaded (/usr/lib/systemd/system/ntpd.service; disabled; vendor preset: disabled)Active: active (running) since 一 2017-12-18 13:13:19 CST; 3s ago#若返回报错信息 Unit ntpd.service could not be found.,请尝试执行以下命令,以查看与 NTP 进行时钟同步所使用的系统配置是 chronyd 还是 ntpdsudo systemctl status chronyd.service#若发现系统既没有配置 chronyd 也没有配置 ntpd ,则表示系统尚未安装任一服务。此时,应先安装其中一个服务,并保证它可以自动启动,默认使用 ntpd#如果你使用的系统配置是 chronyd,请直接执行步骤 3。2、执行 ntpstat 命令检测是否与 NTP 服务器同步ntpstat#如果输出 synchronised to NTP server,表示正在与 NTP 服务器正常同步synchronised to NTP server (85.199.214.101) at stratum 2time correct to within 91 mspolling server every 1024 s#以下情况表示 NTP 服务未正常同步:unsynchronised#以下情况表示 NTP 服务未正常运行:Unable to talk to NTP daemon. Is it running?3、执行 chronyc tracking 命令查看 Chrony 服务是否与 NTP 服务器同步。#该操作仅适用于使用 Chrony 的系统,不适用于使用 NTPd 的系统chronyc tracking#如果该命令返回结果为 Leap status : Normal,则代表同步过程正常Reference ID    : 5EC69F0A (ntp1.time.nl)Stratum         : 2Ref time (UTC)  : Thu May 20 15:19:08 2021System time     : 0.000022151 seconds slow of NTP timeLast offset     : -0.000041040 secondsRMS offset      : 0.000053422 secondsFrequency       : 2.286 ppm slowResidual freq   : -0.000 ppmSkew            : 0.012 ppmRoot delay      : 0.012706812 secondsRoot dispersion : 0.000430042 secondsUpdate interval : 1029.8 secondsLeap status     : Normal#如果该命令返回结果如下,则表示同步过程出错:Leap status    : Not synchronised#如果该命令返回结果如下,则表示 Chrony 服务未正常运行:506 Cannot talk to daemon#如果要使 NTP 服务尽快开始同步,执行以下命令。可以将 pool.ntp.org 替换为你的 NTP 服务器:sudo systemctl stop ntpd.service && \sudo ntpdate pool.ntp.org && \sudo systemctl start ntpd.service#如果要在 CentOS 7 系统上手动安装 NTP 服务,可执行以下命令:sudo yum install ntp ntpdate && \sudo systemctl start ntpd.service && \sudo systemctl enable ntpd.service
复制代码

五、检查和配置操作系统优化参数

#在生产系统的 TiDB 中,建议对操作系统进行如下的配置优化:(1)关闭透明大页(即 Transparent Huge Pages,缩写为 THP)。数据库的内存访问模式往往是稀疏的而非连续的。当高阶内存碎片化比较严重时,分配 THP 页面会出现较高的延迟。(2)将存储介质的 I/O 调度器设置为 noop。对于高速 SSD 存储介质,内核的 I/O 调度操作会导致性能损失。将调度器设置为 noop 后,内核不做任何操作,直接将 I/O 请求下发给硬件,以获取更好的性能。同时,noop 调度器也有较好的普适性。(3)为调整 CPU 频率的 cpufreq 模块选用 performance 模式。将 CPU 频率固定在其支持的最高运行频率上,不进行动态调节,可获取最佳的性能。1、执行命令查看透明大页的开启状态cat /sys/kernel/mm/transparent_hugepage/enabled#[always] madvise never 表示透明大页处于启用状态,需要关闭。2、执行以下命令查看数据目录所在磁盘的 I/O 调度器。假设在 sdb、sdc 两个磁盘上创建了数据目录cat /sys/block/sd[bc]/queue/schedulernoop [deadline] cfqnoop [deadline] cfq#noop [deadline] cfq 表示磁盘的 I/O 调度器使用 deadline,需要进行修改。3、执行以下命令查看磁盘的唯一标识 ID_SERIALudevadm info --name=/dev/sdb | grep ID_SERIALE: ID_SERIAL=36d0946606d79f90025f3e09a0c1f9e81E: ID_SERIAL_SHORT=6d0946606d79f90025f3e09a0c1f9e81#如果多个磁盘都分配了数据目录,需要多次执行以上命令,记录所有磁盘各自的唯一标识。4、执行以下命令查看cpufreq模块选用的节能策略cpupower frequency-info --policyanalyzing CPU 0:current policy: frequency should be within 1.20 GHz and 3.10 GHz.              The governor "powersave" may decide which speed to use within this range.#The governor "powersave" 表示 cpufreq 的节能策略使用 powersave,需要调整为 performance 策略。如果是虚拟机或者云主机,则不需要调整,命令输出通常为 Unable to determine current policy。5、配置系统参数#方法一:使用tuned(推荐)(1)、执行tuned-adm list命令查看当前操作系统的tuned策略tuned-adm listAvailable profiles:- balanced                    - General non-specialized tuned profile- desktop                     - Optimize for the desktop use-case- hpc-compute                 - Optimize for HPC compute workloads- latency-performance         - Optimize for deterministic performance at the cost of increased power consumption- network-latency             - Optimize for deterministic performance at the cost of increased power consumption, focused on low latency network performance- network-throughput          - Optimize for streaming network throughput, generally only necessary on older CPUs or 40G+ networks- powersave                   - Optimize for low power consumption- throughput-performance      - Broadly applicable tuning that provides excellent performance across a variety of common server workloads- virtual-guest               - Optimize for running inside a virtual guest- virtual-host                - Optimize for running KVM guestsCurrent active profile: balanced#Current active profile: balanced 表示当前操作系统的 tuned 策略使用 balanced,建议在当前策略的基础上添加操作系统优化配置(2)、创建新的tuned策略mkdir /etc/tuned/balanced-tidb-optimal/vi /etc/tuned/balanced-tidb-optimal/tuned.conf[main]include=balanced[cpu]governor=performance[vm]transparent_hugepages=never[disk]devices_udev_regex=(ID_SERIAL=36d0946606d79f90025f3e09a0c1fc035)|(ID_SERIAL=36d0946606d79f90025f3e09a0c1f9e81)elevator=noop#include=balanced 表示在现有的 balanced 策略基础上添加操作系统优化配置。(3)、应用新的 tuned 策略tuned-adm profile balanced-tidb-optimal#方法二:使用脚本方式。如果已经使用 tuned 方法,请跳过本方法(1)、执行grubby命令查看默认内核版本#需安装 grubby 软件包。grubby --default-kernel(2)、执行 grubby --update-kernel 命令修改内核配置grubby --args="transparent_hugepage=never" --update-kernel /boot/vmlinuz-3.10.0-957.el7.x86_64#--update-kernel 后需要使用实际的默认内核版本(3)、执行 grubby --info 命令查看修改后的默认内核配置grubby --info /boot/vmlinuz-3.10.0-957.el7.x86_64#--info 后需要使用实际的默认内核版本index=0kernel=/boot/vmlinuz-3.10.0-957.el7.x86_64args="ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF-8 transparent_hugepage=never"root=/dev/mapper/centos-rootinitrd=/boot/initramfs-3.10.0-957.el7.x86_64.imgtitle=CentOS Linux (3.10.0-957.el7.x86_64) 7 (Core)(4)、修改当前的内核配置立即关闭透明大页echo never > /sys/kernel/mm/transparent_hugepage/enabledecho never > /sys/kernel/mm/transparent_hugepage/defrag(5)、配置udev脚本应用IO调度器策略vi /etc/udev/rules.d/60-tidb-schedulers.rulesACTION=="add|change", SUBSYSTEM=="block", ENV{ID_SERIAL}=="36d0946606d79f90025f3e09a0c1fc035", ATTR{queue/scheduler}="noop"ACTION=="add|change", SUBSYSTEM=="block", ENV{ID_SERIAL}=="36d0946606d79f90025f3e09a0c1f9e81", ATTR{queue/scheduler}="noop"(6)、应用udev脚本udevadm control --reload-rulesudevadm trigger --type=devices --action=change(7)、创建CPU节能策略配置服务cat  >> /etc/systemd/system/cpupower.service << EOF[Unit]Description=CPU performance[Service]Type=oneshotExecStart=/usr/bin/cpupower frequency-set --governor performance[Install]WantedBy=multi-user.targetEOF(8)、应用CPU节能策略配置服务systemctl daemon-reloadsystemctl enable cpupower.servicesystemctl start cpupower.service6、执行以下命令验证透明大页的状态cat /sys/kernel/mm/transparent_hugepage/enabled7、执行以下命令验证数据目录所在磁盘的IO调度器cat /sys/block/sd[bc]/queue/scheduler8、执行以下命令查看cpufreq模块选用的节能策略cpupower frequency-info --policy9、执行以下命令修改sysctl参数echo "fs.file-max = 1000000">> /etc/sysctl.confecho "net.core.somaxconn = 32768">> /etc/sysctl.confecho "net.ipv4.tcp_tw_recycle = 0">> /etc/sysctl.confecho "net.ipv4.tcp_syncookies = 0">> /etc/sysctl.confecho "vm.overcommit_memory = 1">> /etc/sysctl.confsysctl -p10、执行以下命令配置用户的limits.conf文件cat << EOF >>/etc/security/limits.conftidb           soft    nofile          1000000tidb           hard    nofile          1000000tidb           soft    stack          32768tidb           hard    stack          32768EOF
复制代码

六、安装 numactl 工具

#NUMA 绑核是用来隔离 CPU 资源的一种方法,适合高配置物理机环境部署多实例使用。#通过 tiup cluster deploy 完成部署操作,就可以通过 exec 命令来进行集群级别管理工作安装numa工具有两种方法:方法一、登录到目标节点进行安装sudo yum -y install numactl方法二、通过 tiup cluster exec 在集群上批量安装 NUMA#安装集群之后进行1、执行 tiup cluster exec 命令,以 sudo 权限在 tidb-test 集群所有目标主机上安装 NUMAtiup cluster exec tidb-test --sudo --command "yum -y install numactl"#你可以执行 tiup cluster exec --help 查看的 tiup cluster exec 命令的说明信息
复制代码

七、在中控机上部署 TiUP 组件

1、执行如下命令安装tiup工具curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh2、执行如下步骤设置tiup环境变量(1)重新声明全局环境变量source .bash_profile(2)确认tiup工具是否安装which tiup3、安装tiup cluster组件tiup cluster4、如果已经安装,则更新 TiUP cluster 组件至最新版本tiup update --self && tiup update cluster5、验证当前 TiUP cluster 版本信息。执行如下命令查看 TiUP cluster 组件版本tiup --binary cluster
复制代码

八、初始化集群拓扑文件

1、执行命令,生成集群初始化配置文件tiup cluster template > topology.yaml#针对两种常用的部署场景,也可以通过以下命令生成建议的拓扑模板  (1)混合部署场景:单台机器部署多个实例  tiup cluster template --full > topology.yaml  (2)跨机房部署场景:跨机房部署 TiDB 集群  tiup cluster template --multi-dc > topology.yaml#对于需要全局生效的参数,请在配置文件中 server_configs 的对应组件下配置。#对于需要某个节点生效的参数,请在具体节点的 config 中配置。
复制代码

九、执行部署命令

#如果是密钥方式,可以通过 -i 或者 --identity_file 来指定密钥的路径#如果是密码方式,可以通过 -p 进入密码交互窗口#如果已经配置免密登录目标机,则不需填写认证1、检查集群存在的潜在风险tiup cluster check ./topology.yaml --user root [-p] [-i /home/root/.ssh/gcp_rsa]2、自动修复集群存在的潜在风险tiup cluster check ./topology.yaml --apply --user root [-p] [-i /home/root/.ssh/gcp_rsa]3、部署TiDB集群tiup cluster deploy tidb-test v5.4.0 ./topology.yaml --user root [-p] [-i /home/root/.ssh/gcp_rsa]
复制代码

十、查看 tiup 管理的集群情况

tiup cluster list
复制代码

十一、检查部署的 TiDB 集群情况

tiup cluster display tidb-test
复制代码

十二、启动集群

#使用安全启动方式后,不能通过无密码的 root 用户登录数据库,你需要记录命令行返回的密码进行后续操作。#自动生成的密码只会返回一次,如果没有记录或者忘记该密码,请参照忘记 root 密码修改密码方式一、安全启动tiup cluster start tidb-test --init方式二、普通启动tiup cluster start tidb-test
复制代码

十三、验证集群运行状态

tiup cluster display tidb-test
复制代码

部署数据导出工具 Dumpling

1、下载包含 Dumpling 的 tidb-toolkit 安装包

wget https://download.pingcap.org/tidb-toolkit-v5.4.2-linux-amd64.tar.gz
复制代码

2、从 TiDB 导出数据

1、需要的权限SELECTRELOADLOCK TABLESREPLICATION CLIENTPROCESS2、导出为SQL文件#本文假设在 127.0.0.1:4000 有一个 TiDB 实例,并且这个 TiDB 实例中有无密码的 root 用户#Dumpling 默认导出数据格式为 SQL 文件。也可以通过设置 --filetype sql 导出数据到 SQL 文件dumpling -u root -P 4000 -h 127.0.0.1 --filetype sql -t 8 -o /tmp/test -r 200000 -F256MiB#以上命令中:-h、-P、-u 分别代表地址、端口、用户。如果需要密码验证,可以使用 -p $YOUR_SECRET_PASSWORD 将密码传给 Dumpling。-o 用于选择存储导出文件的目录,支持本地文件路径或外部存储 URL 格式。-t 用于指定导出的线程数。增加线程数会增加 Dumpling 并发度提高导出速度,但也会加大数据库内存消耗,因此不宜设置过大。一般不超过 64。-r 用于指定单个文件的最大行数,指定该参数后 Dumpling 会开启表内并发加速导出,同时减少内存使用。当上游为 TiDB 且版本为 v3.0 或更新版本时,该参数大于 0 表示使用 TiDB region 信息划分表内并发,具体取值将不再生效。-F 选项用于指定单个文件的最大大小,单位为 MiB,可接受类似 5GiB 或 8KB 的输入。如果你想使用 TiDB Lightning 将该文件加载到 TiDB 实例中,建议将 -F 选项的值保持在 256 MiB 或以下。#如果导出的单表大小超过 10 GB,强烈建议使用 -r 和 -F 参数。3、导出为CSV文件#当你导出 CSV 文件时,你可以使用 --sql <SQL> 导出指定 SQL 选择出来的记录。例如,导出 test.sbtest1 中所有 id < 100 的记录./dumpling -u root -P 4000 -h 127.0.0.1 -o /tmp/test --filetype csv --sql 'select * from `test`.`sbtest1` where id < 100' -F 100MiB --output-filename-template 'test.sbtest1.{{.Index}}'#以上命令中:--sql 选项仅仅可用于导出 CSV 文件的场景。上述命令将在要导出的所有表上执行 SELECT * FROM <table-name> WHERE id < 100 语句。如果部分表没有指定的字段,那么导出会失败。使用 --sql 配置导出时,Dumpling 无法获知导出的表库信息,此时可以使用 --output-filename-template 选项来指定 CSV 文件的文件名格式,以方便后续使用 TiDB Lightning 导入数据文件。例如 --output-filename-template='test.sbtest1.{{.Index}}' 指定导出的 CSV 文件为 test.sbtest1.000000000、test.sbtest1.000000001 等。你可以使用 --csv-separator、--csv-delimiter 等选项,配置 CSV 文件的格式。具体信息可查阅 Dumpling 主要选项表。#Dumpling 导出不区分字符串与关键字。如果导入的数据是 Boolean 类型的 true 和 false,导出时会被转换为 1 和 0 。#通过并发提高Dumpling的导出效率-t 用于指定导出的线程数。增加线程数会增加 Dumpling 并发度提高导出速度,但也会加大数据库内存消耗,因此不宜设置过大。-r 选项用于指定单个文件的最大记录数,或者说,数据库中的行数。开启后 Dumpling 会开启表内并发,提高导出大表的速度。当上游为 TiDB 且版本为 v3.0 或更新版本时,该参数大于 0 表示使用 TiDB region 信息划分表内并发,具体取值将不再生效。--compress gzip 选项可以用于压缩导出的数据。压缩可以显著降低导出数据的大小,同时如果存储的写入 I/O 带宽不足,可以使用该选项来加速导出。但该选项也有副作用,由于该选项会对每个文件单独压缩,因此会增加 CPU 消耗#调整 Dumpling 的数据一致性选项默认auto#导出大规模数据时的TiDB GC设置提前调长GC时间,避免因为导出过程中发生GC导致出失败SET GLOBAL tidb_gc_life_time = '720h';操作结束之后在恢复GC时间默认是10mSET GLOBAL tidb_gc_life_time = '10m';
复制代码

部署数据导入工具 TiDB Lightning

1、下载软件包

wget https://download.pingcap.org/tidb-toolkit-v5.4.2-linux-amd64.tar.gz
复制代码

2、配置 tidb-lightning.toml

[lightning]# 转换数据的并发数,默认为逻辑 CPU 数量,不需要配置。# 混合部署的情况下可以配置为逻辑 CPU 的 75% 大小。# region-concurrency =# 日志level = "info"file = "tidb-lightning.log"[tikv-importer]# backend 设置为 local 模式backend = "local"# 设置本地临时存储路径sorted-kv-dir = "/mnt/ssd/sorted-kv-dir"[mydumper]# 源数据目录。data-source-dir = "/data/my_database"[tidb]# 目标集群的信息。tidb-server 的监听地址,填一个即可。host = "172.16.31.1"port = 4000user = "root"password = ""# 表架构信息在从 TiDB 的“状态端口”获取。status-port = 10080# pd-server 的地址,填一个即可pd-addr = "172.16.31.4:2379"[checkpoint]# 是否启用断点续传。# 导入数据时,TiDB Lightning 会记录当前表导入的进度。# 所以即使 TiDB Lightning 或其他组件异常退出,在重启时也可以避免重复再导入已完成的数据。enable = true# 存储断点的数据库名称。schema = "tidb_lightning_checkpoint"# 存储断点的方式。#  - file:存放在本地文件系统。#  - mysql:存放在兼容 MySQL 的数据库服务器。driver = "file"
复制代码

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

#!/bin/bashnohup ./tidb-lightning -config tidb-lightning.toml > nohup.out &
复制代码

部署 TiDBbinlog 进行增量同步

一、部署 Pump

1、修改tidb-ansible/inventory.ini文件  (1)设置enable_binlog = True,表示 TiDB 集群开启 binlog## binlog triggerenable_binlog = True  (2)为 pump_servers 主机组添加部署机器 IP## Binlog Part[pump_servers]172.16.10.72172.16.10.73172.16.10.74#默认 Pump 保留 7 天数据,如需修改可修改 tidb-ansible/conf/pump.yml(TiDB 3.0.2 及之前版本中为 tidb-ansible/conf/pump-cluster.yml)文件中 gc 变量值,并取消注释。global:  # an integer value to control the expiry date of the binlog data, which indicates for how long (in days) the binlog data would be stored  # must be bigger than 0   gc: 7#请确保部署目录有足够空间存储 binlog,详见调整部署目录,也可为 Pump 设置单独的部署目录。## Binlog Part[pump_servers]pump1 ansible_host=172.16.10.72 deploy_dir=/data1/pumppump2 ansible_host=172.16.10.73 deploy_dir=/data2/pumppump3 ansible_host=172.16.10.74 deploy_dir=/data3/pump
复制代码

二、部署并启动 Pump 组件的 TiDB 集群

#在已有的TiDB集群上增加Pump组件1、部署 pump_servers 和 node_exportersansible-playbook deploy.yml --tags=pump -l ${pump1_ip},${pump2_ip},[${alias1_name},${alias2_name}]#以上命令中,逗号后不要加空格,否则会报错。2、启动pump_serversansible-playbook start.yml --tags=pump3、更新并重启tidb集群ansible-playbook rolling_update.yml --tags=tidb4、更新监控信息ansible-playbook rolling_update_monitor.yml --tags=prometheus
复制代码

三、部署 Drainer

1、可以在导出目录中找到 metadata 文件,其中的 Pos 字段值即全量备份的时间戳。metadata 文件示例如下:Started dump at: 2019-12-30 13:25:41SHOW MASTER STATUS:        Log: tidb-binlog        Pos: 413580274257362947        GTID:Finished dump at: 2019-12-30 13:25:412、修改tidb-ansible/inventory.ini文件#为 drainer_servers 主机组添加部署机器 IP,initial_commit_ts 请设置为获取的 initial_commit_ts,仅用于 Drainer 第一次启动[drainer_servers]drainer_tidb ansible_host=172.16.10.71 initial_commit_ts="402899541671542785"3、修改配置文件配置文件名命名规则为 别名_drainer.toml,否则部署时无法找到自定义配置文件。 但是需要注意 v3.0.0,v3.0.1 的配置文件命名规则与其余版本略有不同,为 别名_drainer-cluster.toml。[syncer]# downstream storage, equal to --dest-db-type# Valid values are "mysql", "file", "tidb", "kafka".db-type = "mysql"4、部署Dranineransible-playbook deploy_drainer.yml5、启动Dranineransible-playbook start_drainer.yml
复制代码

部署回滚链路使用 tiup 部署 TiDB Binlog

1、编辑扩容文件.yaml

pump_server:- host: 10.0.0.202drainer_server:- host: 10.0.0.201config:syncer.db-type: "mysql"syncer.to.host: "10.0.0.201"syncer.to.user: "root"syncer.to.password: "mysql"syncer.to.port:
复制代码

2、使用 tiup 对 Pump 和 Drainer 组件进行扩容

tiup cluster scale-out tidb-test  扩容文件.yaml  -uroot -p
复制代码

3、开启 TiDB 集群的 binlog

tiup cluster edit-config 集群名server_configs:  tidb:    binlog.enable: true    binlog.lgnore-error: true
复制代码

4、使用命令来载入新的配置

tiup cluster reload 集群名
复制代码

部署 sync-diff-inspector 进行数据比对

sync-diff-inspector 的使用限制

1、对于 MySQL 和 TiDB 之间的数据同步不支持在线校验,需要保证上下游校验的表中没有数据写入,或者保证某个范围内的数据不再变更,通过配置 range 来校验这个范围内的数据。2、不支持 JSON 类型的数据,在校验时需要设置 ignore-columns 忽略检查这些类型的数据。3、FLOAT、DOUBLE 等浮点数类型在 TiDB 和 MySQL 中的实现方式不同,在计算 checksum 时会分别取 6 位和 15 位有效数字。如果不使用该特性,需要设置 ignore-columns 忽略这些列的检查。4、支持对不包含主键或者唯一索引的表进行校验,但是如果数据不一致,生成的用于修复的 SQL 可能无法正确修复数据。
复制代码

sync-diff-inspector 所需的数据库权限

#sync-diff-inspector需要获取表结构信息,查询数据,需要的数据库权限如下:上游数据库  SELECT(查询数据进行对比)  SHOW_DATABASES(查看库名)  RELOAD(查看表结构)下游数据库  SELECT(查询数据进行对比)  SHOW_DATABASES(查看库名)  RELOAD(查看表结构)
复制代码

配置文件说明

#sync-diff-inspector 的配置总共分为五个部分:1、Global config:通用配置,包括校验的线程数量、是否输出修复SQL、是否比对数据等2、Datasource config:配置上下游数据库实例3、Routes:上游多表名通过正则匹配下游单表明的规则(可选)4、T ask config:配置校验哪些表,如果有的表在上下游有一定的映射关系或者有一些特殊要求,则需要对指定的表进行配置5、Table config:对具体表的特殊配置,例如指定范围,忽略的列等等(可选)#提示:配置名后带 s 的配置项允许拥有多个配置值,因此需要使用方括号 [] 来包含配置值# Diff Configuration.######################### Global config ########################## 检查数据的线程数量,上下游数据库的连接数会略大于该值check-thread-count = 4# 如果开启,若表存在不一致,则输出用于修复的 SQL 语句。export-fix-sql = true# 只对比表结构而不对比数据check-struct-only = false######################### Datasource config #########################[data-sources][data-sources.mysql1] # mysql1 是该数据库实例唯一标识的自定义 id,用于下面 task.source-instances/task.target-instance 中    host = "127.0.0.1"    port = 3306    user = "root"    password = ""    #(可选)使用映射规则来匹配上游多个分表,其中 rule1 和 rule2 在下面 Routes 配置栏中定义    route-rules = ["rule1", "rule2"][data-sources.tidb0]    host = "127.0.0.1"    port = 4000    user = "root"    password = ""    #(可选)使用 TiDB 的 snapshot 功能,如果开启的话会使用历史数据进行对比    # snapshot = "386902609362944000"########################### Routes ############################ 如果需要对比大量的不同库名或者表名的表的数据,或者用于校验上游多个分表与下游总表的数据,可以通过 table-rule 来设置映射关系# 可以只配置 schema 或者 table 的映射关系,也可以都配置[routes][routes.rule1] # rule1 是该配置的唯一标识的自定义 id,用于上面 data-sources.route-rules 中schema-pattern = "test_*"      # 匹配数据源的库名,支持通配符 "*" 和 "?"table-pattern = "t_*"          # 匹配数据源的表名,支持通配符 "*" 和 "?"target-schema = "test"         # 目标库名target-table = "t" # 目标表名[routes.rule2]schema-pattern = "test2_*"      # 匹配数据源的库名,支持通配符 "*" 和 "?"table-pattern = "t2_*"          # 匹配数据源的表名,支持通配符 "*" 和 "?"target-schema = "test2"         # 目标库名target-table = "t2" # 目标表名######################### Task config ########################## 配置需要对比的*目标数据库*中的表[task]    # output-dir 会保存如下信息    # 1 sql: 检查出错误后生成的修复 SQL 文件,并且一个 chunk 对应一个文件    # 2 log: sync-diff.log 保存日志信息    # 3 summary: summary.txt 保存总结    # 4 checkpoint: a dir 保存断点续传信息    output-dir = "./output"    # 上游数据库,内容是 data-sources 声明的唯一标识 id    source-instances = ["mysql1"]    # 下游数据库,内容是 data-sources 声明的唯一标识 id    target-instance = "tidb0"    # 需要比对的下游数据库的表,每个表需要包含数据库名和表名,两者由 `.` 隔开    # 使用 ? 来匹配任意一个字符;使用 * 来匹配任意;详细匹配规则参考 golang regexp pkg: https://github.com/google/re2/wiki/Syntax    target-check-tables = ["schema*.table*", "!c.*", "test2.t2"]    #(可选)对部分表的额外配置,其中 config1 在下面 Table config 配置栏中定义    target-configs = ["config1"]######################### Table config ########################## 对部分表进行特殊的配置,配置的表必须包含在 task.target-check-tables 中[table-configs.config1] # config1 是该配置的唯一标识自定义 id,用于上面 task.target-configs 中# 目标表名称,可以使用正则来匹配多个表,但不允许存在一个表同时被多个特殊配置匹配。target-tables = ["schema*.test*", "test2.t2"]#(可选)指定检查的数据的范围,需要符合 sql 中 where 条件的语法range = "age > 10 AND age < 20"#(可选)指定用于划分 chunk 的列,如果不配置该项,sync-diff-inspector 会选取一些合适的列(主键/唯一键/索引)index-fields = ["col1","col2"]#(可选)忽略某些列的检查,例如 sync-diff-inspector 目前还不支持的一些类型(json,bit,blob 等),# 或者是浮点类型数据在 TiDB 和 MySQL 中的表现可能存在差异,可以使用 ignore-columns 忽略检查这些列ignore-columns = ["",""]#(可选)指定划分该表的 chunk 的大小,若不指定可以删去或者将其配置为 0。chunk-size = 0#(可选)指定该表的 collation,若不指定可以删去或者将其配置为空字符串。collation = ""
复制代码

一、运行 sync-diff-inspector

./sync_diff_inspector --config=名字.toml#该命令最终会在 config.toml 中的 output-dir 输出目录输出本次比对的检查报告 summary.txt 和日志 sync_diff.log。在输出目录下还会生成由 config.toml 文件内容哈希值命名的文件夹,该文件夹下包括断点续传 checkpoint 结点信息以及数据存在不一致时生成的 SQL 修复数据。
复制代码

二、输出文件目录结构

output/|-- checkpoint # 保存断点续传信息| |-- bbfec8cc8d1f58a5800e63aa73e5 # config hash 占位文件,标识该输出目录(output/)对应的配置文件│ |-- DO_NOT_EDIT_THIS_DIR│ └-- sync_diff_checkpoints.pb # 断点续传信息||-- fix-on-target # 保存用于修复不一致的 SQL 文件| |-- xxx.sql| |-- xxx.sql| └-- xxx.sql||-- summary.txt # 保存校验结果的总结└-- sync_diff.log # 保存 sync-diff-inspector 执行过程中输出的日志信息
复制代码

三、综合结果

#日志sync-diff-inspector 的日志存放在 ${output}/sync_diff.log 中,其中 ${output} 是 config.toml 文件中 output-dir 的值。#校验进度sync-diff-inspector 会在运行时定期(间隔 10s)输出校验进度到checkpoint中(位于 ${output}/checkpoint/sync_diff_checkpoints.pb 中,其中 ${output} 是 config.toml 文件中 output-dir 的值。#校验结果当校验结束时,sync-diff-inspector 会输出一份校验报告,位于 ${output}/summary.txt 中,其中 ${output} 是 config.toml 文件中 output-dir 的值。+---------------------+--------------------+----------------+|        TABLE        | STRUCTURE EQUALITY | DATA DIFF ROWS |+---------------------+--------------------+----------------+| `sbtest`.`sbtest99` | true               | +97/-97        || `sbtest`.`sbtest96` | true               | +0/-101        |+---------------------+--------------------+----------------+Time Cost: 16.75370462sAverage Speed: 113.277149MB/sTABLE:该列表示对应的数据库及表明STRUCTURE EQUALITY:表结构是否相同DATA DIFF ROWS:即rowAdd / rowDelete,表示该表修复需要增加/删除的行数
复制代码

四、SQL 修复

#校验过程中遇到不同的行,会生成修复数据的 SQL 语句。一个chunk如果出现数据不一致,就会生成一个以 chunk.Index 命名的 SQL 文件。文件位于 ${output}/fix-on-${instance} 文件夹下。其中 ${instance} 为 config.toml 中 task.target-instance 的值。#一个 SQL 文件会包含该 chunk 的所属表以及表示的范围信息。对每个修复 SQL 语句,有三种情况:下游数据库缺失行,则是 REPLACE 语句下游数据库冗余行,则是 DELETE 语句下游数据库行部分数据不一致,则是 REPLACE 语句,但会在 SQL 文件中通过注释的方法标明不同的列-- table: sbtest.sbtest99-- range in sequence: (3690708) < (id) <= (3720581)/*  DIFF COLUMNS ╏   `K`   ╏                `C`                 ╏               `PAD`╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╋╍╍╍╍╍╍╍╍╍╋╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╋╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍  source data  ╏ 2501808 ╏ 'hello'                            ╏ 'world'╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╋╍╍╍╍╍╍╍╍╍╋╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╋╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍  target data  ╏ 5003616 ╏ '0709824117-9809973320-4456050422' ╏ '1714066100-7057807621-1425865505'╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╋╍╍╍╍╍╍╍╍╍╋╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╋╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍*/REPLACE INTO `sbtest`.`sbtest99`(`id`,`k`,`c`,`pad`) VALUES (3700000,2501808,'hello','world');
复制代码

升级总结

#相对于v3.0.8版本,v5.4.0版本性能上更加稳定,运维起来也更加方便  针对于这种跨版本的数据库升级,我相信它会是一种操作比较多也是比较重要的项目。在这里只是简单的介绍了方法的流程与步骤具体的操作执行,还需要自己进行相应的测试,毕竟对于我们来说,安全、稳定更为重要。#有几个地方是我们需要值得注意的:1、Dumpling导出数据之前一定要开启Pump和Drainer2、Dumpling导出数据之前GC时间要进行调整3、Lightning导入数据会有部分由于版本差距过大导致的不兼容问题,尽量提前测试提前进行避免4、sync-diff-inspector数据校验,针对于不支持的列提前找出并过滤,进行手工比对5、记着获取原集群的用户信息导入到目标集群6、回滚链路只需要配置好文件在切换业务时候扩容即可7、需求回滚之时把原业务反向切换
复制代码


发布于: 刚刚阅读数: 4
用户头像

TiDB 社区官网:https://tidb.net/ 2021.12.15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
TiDB跨版本升级--新人首次尝试🧐_迁移_TiDB 社区干货传送门_InfoQ写作社区