OB技术直播间 | 从0到1手把手教你搭建高可用的OceanBase数据库集群

2024年 5月 7日 70.8k 0

摘要:本文整理自OceanBase技术直播间第一期,本期庆涛来带你手把手搭建一个高可用的OceanBase数据库集群。您可以关注“OceanBase”公众号回复“0423”获取直播PPT。想不错过下一场直播,欢迎加入OceanBase钉钉互动群:搜索群号21949783

OB技术直播间 | 从0到1手把手教你搭建高可用的OceanBase数据库集群-1

OB技术直播间 | 从0到1手把手教你搭建高可用的OceanBase数据库集群-2

前言

目前有关OceanBase功能、案例、故事的文章已经很多,对OceanBase感兴趣的朋友都想安装一个数据库试试。本文就是分享初学者如何手动搭建一个OceanBase集群。这也是学习理解OceanBase集群原理的第一步。在生产环境,我们有自动化运维平台OCP可以负责生产环境的OceanBase集群部署和运维。同时官网上提供的下载文件里也有python脚本自动化部署OceanBase集群,大家熟悉了安装原理后就可以自己动手使用自动化脚本安装。


OceanBase是分布式数据库,以集群的形式存在,是share-nothing架构。各个节点就是普通的x86服务器,使用本地盘(SSD),不依赖共享存储,也没有集群文件系统。各个节点之间网络互通即可,不需要直连线。所以OceanBase集群的搭建相比ORACLE RAC集群而言,还是很简单的。


目前OceanBase对内存资源要求不低,建议学习环境每个节点在32G以上,64G更好。并且OceanBase集群至少包含三个节点,节点数以奇数递增。如果有三台机器更好,但是如果只有一台机器,但是内存够大(192G以上),那也可以启动三个OceanBase进程来模拟三个节点。


OBServer安装


OceanBase分布式数据库是以集群形式存在,至少三个节点,每个节点的形式一observer进程,不同节点上多个observer进程组成一个集群对外提供服务。


1. 安装规划


本次安装目标会搭建一个2-2-2架构的OceanBase集群,理论上这个需要6台机器,实际上我只有3台。因此我会在每个机器上启动2个OceanBase进程来模拟2个节点。


机器节点规划如下。如果你只有一台大内存的机器,可以在上面起3个或者6个OceanBase进程,注意RPC PortConnect Port不要重复或者跟其他应用端口冲突即可。


Zone IP RPC Port Connect Port

Zone1

192.168.1.241

2882

2881

Zone1

192.168.1.241

3882

3881

Zone2

192.168.1.81

2882

2881

Zone2

192.168.1.81

3882

3881

Zone3

192.168.1.86

2882

2881

Zone3

192.168.1.86

3882

3881

由于OceanBase是分布式数据库,应用的数据可能分布在任一节点上,所以应用需要通过一个反向代理OBProxy来访问OceanBase集群。OBProxy可以安装在任意机器上,包括OceanBase数据库节点上。这里我安装在其中一个节点上。

OB技术直播间 | 从0到1手把手教你搭建高可用的OceanBase数据库集群-3

2. 机器环境准备


OceanBase机器节点环境主要是安装用户、内核参数配置、防火墙和SELinux设置、时间同步设置、和用户会话限制等。


  • 安装用户

OceanBase默认会安装在用户admin下。可以选择安装在其他用户下(不使用RPM包安装)。

通常建议admin用户配置sudo权限,这样安装过程中就不需要root账户介入。


useradd admin

passwd admin

# 赋予sudo权限

chmod u+w /etc/sudoers

vi /etc/sudoers

root ALL=(ALL) ALL

admin ALL=(ALL) ALL

chmod u-w /etc/sudoers

  • 用户会话设置

使用命令ulimit可以查看用户会话默认限制。修改下面文件可以默认会话限制修改永久生效。

sudo vi /etc/security/limits.conf

* soft nofile 655350

* hard nofile 655350

* soft stack 20480

* hard stack 20480

* soft nproc 655360

* hard nproc 655360

* soft core unlimited

* hard core unlimited

退出重登录,检查设置生效

ulimit -a


  • 内核参数配置

内核参数主要是网络、内存相关的设置。


sudo vi /etc/sysctl.conf

fs.aio-max-nr = 65536

net.core.somaxconn = 2048

net.core.netdev_max_backlog = 10000

net.core.rmem_default = 16777216

net.core.wmem_default = 16777216

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

net.ipv4.ip_local_port_range = 3500 65535

net.ipv4.ip_forward = 0

net.ipv4.conf.default.rp_filter = 1

net.ipv4.conf.default.accept_source_route = 0

net.ipv4.tcp_syncookies = 0

net.ipv4.tcp_rmem = 4096 87380 16777216

net.ipv4.tcp_wmem = 4096 65536 16777216

net.ipv4.tcp_max_syn_backlog = 16384

net.ipv4.tcp_fin_timeout = 15

net.ipv4.tcp_max_syn_backlog = 16384

net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle =1

net.ipv4.tcp_slow_start_after_idle=0

vm.swappiness = 0

kernel.core_pattern = /data/1/core-%e-%p-%t

vm.min_free_kbytes = 2097152

vm.max_map_count=655360

修改后使用下面命令生效,并检查

sudo sysctl -p


  • 关闭防火墙和SELinux

Linux的防火墙和SELinux安全特性可能会导致OceanBase各个节点之间通信异常,所以都建议关闭


sudo systemctl disable firewalld

sudo systemctl stop firewalld

sudo systemctl status firewalld

sudo vi /etc/selinux/config

SELINUX=disabled

sudo setenforce 0

  • 节点时间同步设置

OceanBase是个分布式数据库,要求各个节点的时间保持同步,时间误差控制在50ms以内。节点时间误差偏大时,后面初始化OceanBase集群会失败,或者现有的OceanBase集群会出现异常。

节点间的时间同步要靠Linux的NTP同步来保证。检查时间误差使用clockdiff命令


clockdiff 192.168.1.86

clockdiff 192.168.1.81

clockdiff 192.168.1.241


配置节点的NTP同步


sudo vi /etc/ntp.conf

server 192.168.1.239

停掉ntpd服务,强行同步一次时间,再启动ntpd服务。后续时间同步靠ntpd服务。


sudo service ntpd stop;

sudo ntpdate 192.168.1.239;

sudo service ntpd start;

ntpq -4p

OB技术直播间 | 从0到1手把手教你搭建高可用的OceanBase数据库集群-4

3. 软件安装


  • 软件目录

目前oceanbase.alipay.com上提供了OCP试用版下载,里面包含了OCP和OB的很多文件,手动安装只需要里面两个RPM文件:obproxyoceanbase。获取方法如下:


wget https://gw.alipayobjects.com/os/downloads/ossupload/ocp-release.zip

unzip ocp-release.zip

tar zxvf ocp-setup.tar.gz

cd ocp_yh

ls -lrth obproxy-1.3.3-1506155.el7.x86_64.rpm oceanbase-1.4.60-1571952.el7.x86_64.rpm

我们先看一下oceanbaseRPM包内容,


rpm2cpio oceanbase-1.4.60-1571952.el7.x86_64.rpm |cpio –div

cd home/admin;

tar czvf ob1.4.6.tar.gz oceanbase/

cd ~/

scp home/admin/ob1.4.6.tar.gz 192.168.1.241:/tmp/;

scp home/admin/ob1.4.6.tar.gz 192.168.1.81:/tmp/;

scp home/admin/ob1.4.6.tar.gz 192.168.1.86:/tmp/;

可以看到目录结构如下。其中bin下有可执行文件observeretc目录用于存放配置和相关脚本。


OB技术直播间 | 从0到1手把手教你搭建高可用的OceanBase数据库集群-5

如果直接安装该RPM包,则会安装在admin用户的根目录下。由于我们要在一个机器上启动两个observer进程,彼此软件目录要分开。所以改用解压缩RPM包文件然后复制到两个目录,目录owneradmin


su - admin

mkdir -p node1 node2

cd ~/node1; tar zxvf /tmp/ob1.4.6.tar.gz -C .

cd ~/node2; tar zxvf /tmp/ob1.4.6.tar.gz -C .

cd ~/; tree

  • 存储目录

OceanBase的存储目录是在软件目录下的store文件夹里。存储目录会包含数据文件目录和相关日志文件目录。出于性能考虑,数据文件目录和相关日志文件目录都需要单独的文件系统(如果底层是独立的盘会更好)。然后把实际目录映射到软件目录下的store目录下。


su - adminmkdir -p /data/data/1/obdemo/cd /data/data/1/obdemo/mkdir -p etc3 sort_dir sstablemkdir -p /data/log/log1/obdemo/cd /data/log/log1/obdemo/mkdir -p clog etc2 ilog oob_clog slogmkdir -p /home/admin/node1/oceanbase/store/obdemocd /home/admin/node1/oceanbase/store/obdemo/ln -s /data/data/1/obdemo/sort_dir /home/admin/node1/oceanbase/store/obdemo/sort_dirln -s /data/data/1/obdemo/sstable /home/admin/node1/oceanbase/store/obdemo/sstableln -s /data/log/log1/obdemo/clog /home/admin/node1/oceanbase/store/obdemo/clogln -s /data/log/log1/obdemo/ilog /home/admin/node1/oceanbase/store/obdemo/ilogln -s /data/log/log1/obdemo/oob_clog /home/admin/node1/oceanbase/store/obdemo/oob_clogln -s /data/log/log1/obdemo/slog /home/admin/node1/oceanbase/store/obdemo/slogtree ~/node1 -uhmkdir -p /data/data/2/obdemo/cd /data/data/2/obdemo/mkdir -p etc3 sort_dir sstablemkdir -p /data/log/log2/obdemo/cd /data/log/log2/obdemo/mkdir -p clog etc2 ilog oob_clog slogmkdir -p /home/admin/node2/oceanbase/store/obdemocd /home/admin/node2/oceanbase/store/obdemo/ln -s /data/data/2/obdemo/sort_dir /home/admin/node2/oceanbase/store/obdemo/sort_dirln -s /data/data/2/obdemo/sstable /home/admin/node2/oceanbase/store/obdemo/sstableln -s /data/log/log2/obdemo/clog /home/admin/node2/oceanbase/store/obdemo/clogln -s /data/log/log2/obdemo/ilog /home/admin/node2/oceanbase/store/obdemo/ilogln -s /data/log/log2/obdemo/oob_clog /home/admin/node2/oceanbase/store/obdemo/oob_clogln -s /data/log/log2/obdemo/slog /home/admin/node2/oceanbase/store/obdemo/slogtree /home/admin/node2/oceanbase/store/obdemo/ -uhtree ~/node2 -uh

由此一个完整的OBServer进程的相关目录如下:

OB技术直播间 | 从0到1手把手教你搭建高可用的OceanBase数据库集群-6

  • 依赖RPM包安装


OceanBase会对数据进行压缩,所以依赖两个压缩协议的RPM文件:snappy.x86_64lzo.x86_64

OceanBase 集群初始化

1. OBServer启动


  • 启动参数


首先分别在每个节点上启动第一个observer进程,监听端口是2881和2882. 下图中灰色斜体部分都根据实际情况调整。注意根据实际情况修改zone名称、IP, 网卡名字等。


OB技术直播间 | 从0到1手把手教你搭建高可用的OceanBase数据库集群-7

192.168.1.241:2881:2882 zone1 注意修改 zone, IP, 网卡名字


cd /home/admin/node1/oceanbase && /home/admin/node1/oceanbase/bin/observer -i eth0 -P 2882 -p 2881 -z zone1 -d /home/admin/node1/oceanbase/store/obdemo -r '192.168.1.241:2882:2881;192.168.1.81:2882:2881;192.168.1.86:2882:2881' -c 20190423 -n obdemo -o "cpu_count=24,memory_limit=100G,datafile_size=200G,config_additional_dir=/data/data/1/obdemo/etc3;/data/log/log1/obdemo/etc2"ps -ef|grep observervi log/observer.log

其他两个节点的启动名分别如下:

192.168.1.81:2881:2882 zone2 注意修改 zone, IP, 网卡名字


cd /home/admin/node1/oceanbase && /home/admin/node1/oceanbase/bin/observer -i eth3 -P 2882 -p 2881 -z zone2 -d /home/admin/node1/oceanbase/store/obdemo -r '192.168.1.241:2882:2881;192.168.1.81:2882:2881;192.168.1.86:2882:2881' -c 20190423 -n obdemo -o "cpu_count=24,memory_limit=100G,datafile_size=200G,config_additional_dir=/data/data/1/obdemo/etc3;/data/log/log1/obdemo/etc2"ps -ef|grep observervi log/observer.log

192.168.1.86:2881:2882 zone3 注意修改 zone, IP, 网卡名字


cd /home/admin/node1/oceanbase && /home/admin/node1/oceanbase/bin/observer -i eth3 -P 2882 -p 2881 -z zone3 -d /home/admin/node1/oceanbase/store/obdemo -r '192.168.1.241:2882:2881;192.168.1.81:2882:2881;192.168.1.86:2882:2881' -c 20190423 -n obdemo -o "cpu_count=24,memory_limit=100G,datafile_size=200G,config_additional_dir=/data/data/1/obdemo/etc3;/data/log/log1/obdemo/etc2"

ps -ef|grep observer

vi log/observer.log


2. 集群初始化

3节点OBServer都启动后,这一步集群初始化命令就至关重要,成败在此一举。


首先使用mysql命令登录任一节点,然后执行bootstrap命令。注意命令中不要有空格和空白。


mysql -h192.168.1.241 -uroot -P2881 -p

alter system bootstrap ZONE 'zone1' SERVER '192.168.1.241:2882', ZONE 'zone2' SERVER '192.168.1.81:2882', ZONE 'zone3' SERVER '192.168.1.86:2882';

大概十几秒后集群启动成功。此时重新退出再登录集群。登录命令的username格式需要变化一下。登录成功后修改默认sys租户管理员root@sys


mysql -h192.168.1.241 -uroot@sys -P2881 -p -c -A oceanbase

alter user root identified by 'rootpwd';

退出使用密码登录验证,同时查看集群资源信息。


mysql -h192.168.1.241 -uroot@sys -P2881 -prootpwd -c -A oceanbase

select zone, svr_ip, inner_port, cpu_total, cpu_assigned, cpu_assigned_percent cpu_ass_percent, round(mem_total/1024/1024/1024) mem_total_gb, round(mem_assigned/1024/1024/1024) mem_ass_gb, round(disk_total/1024/1024/1024) disk_total_gb, unit_num, substr(build_version,1,6) version

from __all_virtual_server_stat

order by zone, svr_ip, inner_port;


3. 集群扩容


目前搭建的还是1-1-1布局的OceanBase集群,需要再添加3个节点,扩容到2-2-2布局。这里就直接在3台机器上再启动第二个observer进程,监听端口是3881和3882。

  • 节点准备

192.168.1.241:3881:3882 zone1 注意修改node zone, ip, port, 网卡名字


cd /home/admin/node2/oceanbase && /home/admin/node2/oceanbase/bin/observer -i eth0 -P 3882 -p 3881 -z zone1 -d /home/admin/node2/oceanbase/store/obdemo -r '192.168.1.241:2882:2881;192.168.1.81:2882:2881;192.168.1.86:2882:2881' -c 20190423 -n obdemo -o "cpu_count=24,memory_limit=61440M,datafile_size=100G,config_additional_dir=/data/data/2/obdemo/etc3;/data/log/log2/obdemo/etc2"

ps -ef|grep observer

vi log/observer.log

192.168.1.81:2881:2882 zone2 注意修改node zone, ip, port, 网卡名字


cd /home/admin/node2/oceanbase && /home/admin/node2/oceanbase/bin/observer -i eth3 -P 3882 -p 3881 -z zone2 -d /home/admin/node2/oceanbase/store/obdemo -r '192.168.1.241:2882:2881;192.168.1.81:2882:2881;192.168.1.86:2882:2881' -c 20190423 -n obdemo -o "cpu_count=24,memory_limit=61440M,datafile_size=100G,config_additional_dir=/data/data/2/obdemo/etc3;/data/log/log2/obdemo/etc2"

ps -ef|grep observer

vi log/observer.log

192.168.1.86:2881:2882 zone3 注意修改node zone, ip, port, 网卡名字


cd /home/admin/node2/oceanbase && /home/admin/node2/oceanbase/bin/observer -i eth3 -P 3882 -p 3881 -z zone3 -d /home/admin/node2/oceanbase/store/obdemo -r '192.168.1.241:2882:2881;192.168.1.81:2882:2881;192.168.1.86:2882:2881' -c 20190423 -n obdemo -o "cpu_count=24,memory_limit=61440M,datafile_size=100G,config_additional_dir=/data/data/2/obdemo/etc3;/data/log/log2/obdemo/etc2"

ps -ef|grep observer

vi log/observer.log

  • 集群扩容

将新增的3节点加入到OceanBase集群中。注意zone名称和IP要对应正确。


alter system add server '192.168.1.241:3882' zone 'zone1';

alter system add server '192.168.1.81:3882' zone 'zone2';

alter system add server '192.168.1.86:3882' zone 'zone3';

select zone, svr_ip, inner_port, cpu_total, cpu_assigned, cpu_assigned_percent cpu_ass_percent, round(mem_total/1024/1024/1024) mem_total_gb, round(mem_assigned/1024/1024/1024) mem_ass_gb, round(disk_total/1024/1024/1024) disk_total_gb, unit_num, substr(build_version,1,6) version

from __all_virtual_server_stat

order by zone, svr_ip, inner_port;

4. OBProxy安装和启动


OceanBase是分布式数据库,应用的数据可能分布在任一节点上并且不固定,所以应用不可能知道数据在哪个节点或者记录所有节点IP。这时就需要一个反向代理OBProxy在OceanBase集群前面提供SQL路由功能。应用通过OBProxy访问OceanBase集群,OBProxy就是数据库的代表。


  • OBProxy的软件安装


一个节点只需要安装一个OBproxy,所以可以直接使用RPM包安装。


su - admin

mkdir -p /home/admin/logs/obproxy/log /home/admin/logs/obproxy/minidump

sudo rpm -ivh obproxy-1.3.3-1506155.el7.x86_64.rpm


  • OBProxy专用用户


OBProxy需要跟OceanBase集群保持通信,所以需要在sys租户里提前创建好账户。

CREATE USER proxyro IDENTIFIED BY password '*e9c2bcdc178a99b7b08dd25db58ded2ee5bff050' ;

GRANT SELECT ON *.* to proxyro;

show grants for proxyro;

  • OBProxy启动


OBProxy启动跟OBServer启动类似


OB技术直播间 | 从0到1手把手教你搭建高可用的OceanBase数据库集群-8

注意其中 -r指定的是rootservice list地址,格式稍微不同,不需要RPC Port信息。-p指定OBProxy的监听端口。


cd /opt/taobao/install/obproxy && bin/obproxy -r "192.168.1.241:2881;192.168.1.81:2881;192.168.1.86:2881" -p 2883 -o "enable_strict_kernel_release=false,enable_cluster_checkout=false" -c obdemo

ps -ef|grep obproxy


通过OBProxy连接OceanBase集群的命令有两种格式,区别在于用户名的格式。如:[用户名]@[租户名]#[集群名] 或 [集群名]:[租户名]:[用户名]


mysql -h192.168.1.241 -uroot@sys#obdemo -P2883 -prootpwd -c -A oceanbase

mysql -h192.168.1.241 -uobdemo:sys:root -P2883 -prootpwd -c -A oceanbase

OceanBase 集群运维


OceanBase分布式数据库跟传统数据库或者其他分布式数据库产品的一个显著的区别就是它有资源管理的思想在里面。OceanBase集群把多台主机的资源(CPU、内存和空间)聚合在一个大的池子里,然后从中分配出指定规格的资源给一个具体的业务使用。这个提供给业务使用的就是租户,也叫实例。


下面简单演示一个租户的创建过程。


1. 租户的创建


  • 定义资源规格

mysql -h192.168.1.241 -uroot@sys#obdemo -P2883 -prootpwd -c -A oceanbase

create resource unit unit_4c20g512g, max_cpu=4, max_memory='20G', min_memory='10G', max_iops=10000, min_iops=1000, max_session_num=1000000, max_disk_size=53687091200;

create resource unit unit_8c40g1024g, max_cpu=8, max_memory='40G', min_memory='20G', max_iops=20000, min_iops=5000, max_session_num=1000000, max_disk_size=107374182400;

create resource unit unit_16c80g2048g, max_cpu=16, max_memory='80G', min_memory='40G', max_iops=50000, min_iops=10000, max_session_num=1000000, max_disk_size=214748364800;

select unit_config_id,name,max_cpu,min_cpu,round(max_memory/1024/1024/1024) max_mem_gb, round(min_memory/1024/1024/1024) min_mem_gb, round(max_disk_size/1024/1024/1024) max_disk_size_gb

from __all_unit_config

order by unit_config_id;

  • 创建资源池

mysql -h192.168.1.241 -uroot@sys#obdemo -P2883 -prootpwd -c -A oceanbase

create resource pool pool_demo unit = 'unit_4c20g512g', unit_num = 1;

select resource_pool_id, name,unit_count, unit_config_id, zone_list, tenant_id, gmt_modified

from __all_resource_pool order by resource_pool_id ;

  • 创建租户


mysql -h192.168.1.241 -uroot@sys#obdemo -P2883 -prootpwd -c -A oceanbasecreate tenant t_obdemo resource_pool_list=('pool_demo');select tenant_id, tenant_name, zone_list, locality ,gmt_modified from __all_tenant;

  • 登录租户

租户连接 断开sys租户,连接用户租户


mysql -h192.168.1.241 -uroot@t_obdemo#obdemo -P2883 oceanbase -A -pshow databases;create database sysbenchtest;grant all privileges on sysbenchtest.* to testuser@'%' identified by 'testpwd';

2. 租户扩容


  • 租户内查看自己的资源能力


mysql -h192.168.1.241 -uroot@t_obdemo#obdemo -P2883 oceanbase -A -pselect tenant_id,tenant_name, unit_id, zone, svr_ip,svr_port,max_cpu,min_cpu,round(max_memory/1024/1024/1024) max_mem_gb, round(min_memory/1024/1024/1024) min_mem_gb, round(max_disk_size/1024/1024/1024) max_disk_size_gbfrom gv$unit;

如果业务觉得数据库很慢且瓶颈是在资源,则对租户的资源能力进行扩容。


  • 租户扩容


租户扩容有两个思路,一是提升资源单元规格,二是增加资源单元数量。


mysql -h192.168.1.241 -uobdemo:sys:root -P2883 -prootpwd -c -A oceanbasealter resource pool pool_demo unit = 'unit_8c40g1024g';alter resource pool pool_demo unit_num = 2;

缩容同理


alter resource pool pool_demo unit_num = 1;


3. 集群参数配置


至此,OceanBase集群和租户都搭建好了。为了避免学习环境因为资源紧张导致OceanBase不稳定,还需要做一些参数配置,类似于ORACLE中的参数变更。


  • 集群参数修改


配置日志相关参数


mysql -h192.168.1.241 -uobdemo:sys:root -P2883 -prootpwd -c -A oceanbase

-- observer log自清理设置

alter system set enable_syslog_recycle=True;

alter system set max_syslog_file_count=5;

show parameters where name in ('enable_syslog_recycle', 'max_syslog_file_count');

配置OBProxy参数


-- obproxy设置:

alter proxyconfig set enable_metadb_used=False;

alter proxyconfig set enable_proxy_scramble=True;

alter proxyconfig set proxy_mem_limited=2G;

alter proxyconfig set log_dir_size_threshold=10G;

配置冻结合并参数


-- 关闭轮转合并,设置转储次数

alter system set enable_merge_by_turn = false;

alter system set minor_freeze_times=3;

alter system set minor_warm_up_duration_time='300s';

  • 租户变量修改


OceanBase还支持对租户的行为进行配置,这些是通过租户变量的修改实现。类似于MySQL中的变量修改。


mysql -h192.168.1.241 -uroot@t_obdemo#obdemo -P2883 oceanbase -A -p

set global ob_query_timeout=100000000;

OceanBase 集群清理

如果前面在集群初始化中出现报错,则需要清理所有步骤重新来过。


### OceanBase安装环境清理

```bash

pkill observer

Sleep 10

rpm -qa|grep oceanbase

rpm -qa|grep obproxy

sudo rpm -e

su - admin

/bin/rm -rf ~/node1 ~/node2

/bin/rm -rf /data/data/* /data/log/*

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论