阿里云助力您在中国加快取得成功
一站式安全合规咨询服务
MLPS 2.0 一站式合规解决方案
依托我们的网络进军中国市场
提升面向互联网应用的性能和安全性
保障您的中国业务安全无忧
通过强大的数据安全框架保护您的数据资产
申请 ICP 备案的流程解读和咨询服务
面向大数据建设、管理及应用的全域解决方案
企业内大数据建设、管理和应用的一站式解决方案
将您的采购和销售置于同一企业级全渠道数字平台上
全渠道内置 AI 驱动、拟人化、多语言对话的聊天机器人
快速搭建在线教育平台
提供域名注册、分析和保护服务
云原生 Kubernetes 容器化应用运行环境
以 Kubernetes 为使用界面的容器服务产品,提供符合容器规范的算力资源
安全的镜像托管服务,支持全生命周期管理
多集群环境下微服务应用流量统一管理
提供任意基础设施上容器集群的统一管控,助您轻松管控分布式云场景
高弹性、高可靠的企业级无服务器 Kubernetes 容器产品
敏捷安全的 Serverless 容器运行服务
为虚拟机和容器提供高可靠性、高性能、低时延的块存储服务
一款海量、安全、低成本、高可靠的云存储服务
可靠、弹性、高性能、多共享的文件存储服务
全托管、可扩展的并行文件系统服务。
全托管的 NoSQL 结构化数据实时存储服务
可抵扣多种存储产品的容量包,兼具灵活性和长期成本优化
让您的应用跨不同可用区资源自动分配访问量
随时绑定和解绑 VPC ECS
云网络公网、跨域流量统一计费
高性价比,可抵扣按流量计费的流量费用
创建云上隔离的网络,在专有环境中运行资源
在 VPC 环境下构建公网流量的出入口
具备网络状态可视化、故障智能诊断能力的自助式网络运维服务。
安全便捷的云上服务专属连接
基于阿里云专有网络的私有 DNS 解析服务
保障在线业务不受大流量 DDoS 攻击影响
系统运维和安全审计管控平台
业务上云的第一个网络安全基础设施
集零信任内网访问、办公数据保护、终端管理等多功能于一体的办公安全管控平台
提供7X24小时安全运维平台
防御常见 Web 攻击,缓解 HTTP 泛洪攻击
实现全站 HTTPS,呈现可信的 WEB 访问
为云上应用提供符合行业标准和密码算法等级的数据加解密、签名验签和数据认证能力
一款发现、分类和保护敏感数据的安全服务
创建、控制和管理您的加密密钥
快速提高应用高可用能力服务
围绕应用和微服务的 PaaS 平台
兼容主流开源微服务生态的一站式平台
多集群环境下微服务应用流量统一管理
Super MySQL 和 PostgreSQL,高度兼容 Oracle 语法
全托管 MySQL、PostgreSQL、SQL Server、MariaDB
兼容 Redis® 的缓存和KV数据库
兼容Apache Cassandra、Apache HBase、Elasticsearch、OpenTSDB 等多种开源接口
文档型数据库,支持副本集和分片架构
100%兼容 Apache HBase 并深度扩展,稳定、易用、低成本的NoSQL数据库。
低成本、高可用、可弹性伸缩的在线时序数据库服务
专为搜索和分析而设计,成本效益达到开源的两倍,采用最新的企业级AI搜索和AI助手功能。
一款兼容PostgreSQL协议的实时交互式分析产品
一种快速、完全托管的 TB/PB 级数据仓库
基于 Flink 为大数据行业提供解决方案
基于Qwen和其他热门模型的一站式生成式AI平台,可构建了解您业务的智能应用程
一站式机器学习平台,满足数据挖掘分析需求
高性能向量检索服务,提供低代码API和高成本效益
帮助您的应用快速构建高质量的个性化推荐服务能力
提供定制化的高品质机器翻译服务
全面的AI计算平台,满足大模型训练等高性能AI计算的算力和性能需求
具备智能会话能力的会话机器人
基于机器学习的智能图像搜索产品
基于阿里云深度学习技术,为用户提供图像分割、视频分割、文字识别等离线SDK能力,支持Android、iOS不同的适用终端。
语音识别、语音合成服务以及自学习平台
一站式智能搜索业务开发平台
助力金融企业快速搭建超低时延、高质量、稳定的行情数据服务
帮助企业快速测算和分析企业的碳排放和产品碳足迹
企业工作流程自动化,全面提高效率
金融级云原生分布式架构的一站式高可用应用研发、运维平台
eKYC 数字远程在线解决方案
可智能检测、大数据驱动的综合性反洗钱 (AML) 解决方案
阿里云APM类监控产品
实时云监控服务,确保应用及服务器平稳运行
为系统运维人员管理云基础架构提供全方位服务的云上自动化运维平台
面向您的云资源的风险检测服务
提升分布式环境下的诊断效率
日志类数据一站式服务,无需开发就能部署
ECS 预留实例
让弹性计算产品的成本和灵活性达到最佳平衡的付费方式。云原生 AI 套件
加速AI平台构建,提高资源效率和交付速度FinOps
实时分析您的云消耗并实现节约SecOps
实施细粒度安全控制DevOps
快速、安全地最大限度提高您的DevOps优势自带IP上云
自带公网 IP 地址上云全球网络互联
端到端的软件定义网络解决方案,可推动跨国企业的业务发展全球应用加速
提升面向互联网应用的性能和安全性全球互联网接入
将IDC网关迁移到云端云原生 AI 套件
加速AI平台构建,提高资源效率和交付速度FinOps
实时分析您的云消耗并实现节约SecOps
实施细粒度安全控制DevOps
快速、安全地最大限度提高您的DevOps优势金融科技云数据库解决方案
利用专为金融科技而设的云原生数据库解决方案游戏行业云数据库解决方案
提供多种成熟架构,解决所有数据问题Oracle 数据库迁移
将 Oracle 数据库顺利迁移到云原生数据库数据库迁移
加速迁移您的数据到阿里云阿里云上的数据湖
实时存储、管理和分析各种规模和类型的数据数码信贷
利用大数据和 AI 降低信贷和黑灰产风险面向企业数据技术的大数据咨询服务
帮助企业实现数据现代化并规划其数字化未来人工智能对话服务
全渠道内置 AI 驱动、拟人化、多语言对话的聊天机器人EasyDispatch 现场服务管理
为现场服务调度提供实时AI决策支持在线教育
快速搭建在线教育平台窄带高清 (HD) 转码
带宽成本降低高达 30%广电级大型赛事直播
为全球观众实时直播大型赛事,视频播放流畅不卡顿直播电商
快速轻松地搭建一站式直播购物平台用于供应链规划的Alibaba Dchain
构建和管理敏捷、智能且经济高效的供应链云胸牌
针对赛事运营的创新型凭证数字服务数字门店中的云 POS 解决方案
将所有操作整合到一个云 POS 系统中元宇宙
元宇宙是下一代互联网人工智能 (AI) 加速
利用阿里云 GPU 技术,为 AI 驱动型业务以及 AI 模型训练和推理加速DevOps
快速、安全地最大限度提高您的DevOps优势数据迁移解决方案
加速迁移您的数据到阿里云企业 IT 治理
在阿里云上构建高效可控的云环境基于日志管理的AIOps
登录到带有智能化日志管理解决方案的 AIOps 环境备份与存档
数据备份、数据存档和灾难恢复用阿里云金融服务加快创新
在云端开展业务,提升客户满意度
为全球资本市场提供安全、准确和数字化的客户体验
利用专为金融科技而设的云原生数据库解决方案
利用大数据和 AI 降低信贷和黑灰产风险
建立快速、安全的全球外汇交易平台
新零售时代下,实现传统零售业转型
利用云服务处理流量波动问题,扩展业务运营、降低成本
快速轻松地搭建一站式直播购物平台
面向大数据建设、管理及应用的全域解决方案
全渠道内置 AI 驱动、拟人化、多语言对话的聊天机器人
以数字化媒体旅程为当今的媒体市场准备就绪您的内容
带宽成本降低高达 30%
快速轻松地搭建一站式直播购物平台
为全球观众实时直播大型赛事,视频播放流畅不卡顿
使用阿里云弹性高性能计算 E-HPC 将本地渲染农场连接到云端
构建发现服务,帮助客户找到最合适的内容
保护您的媒体存档安全
通过统一的数据驱动平台提供一致的全生命周期客户服务
在钉钉上打造一个多功能的电信和数字生活平台
在线存储、共享和管理照片与文件
提供全渠道的无缝客户体验
面向中小型企业,为独立软件供应商提供可靠的IT服务
打造最快途径,助力您的新云业务扬帆起航
先进的SD-WAN平台,可实现WAN连接、实时优化并降低WAN成本
通过自动化和流程标准化实现快速事件响应
针对关键网络安全威胁提供集中可见性并进行智能安全分析
提供大容量、可靠且高度安全的企业文件传输
用智能技术数字化体育赛事
基于人工智能的低成本体育广播服务
专业的广播转码及信号分配管理服务
基于云的音视频内容引入、编辑和分发服务
在虚拟场馆中模拟关键运营任务
针对赛事运营的创新型凭证数字服务
智能和交互式赛事指南
轻松管理云端背包单元的绑定直播流
通过数据加强您的营销工作
元宇宙是下一代互联网
利用生成式 AI 加速创新,创造新的业务佳绩
阿里云高性能开源大模型
借助AI轻松解锁和提炼文档中的知识
通过AI驱动的语音转文本服务获取洞察
探索阿里云人工智能和数据智能的所有功能、新优惠和最新产品
该体验中心提供广泛的用例和产品帮助文档,助您开始使用阿里云 AI 产品和浏览您的业务数据。
利用阿里云 GPU 技术,为 AI 驱动型业务以及 AI 模型训练和推理加速
元宇宙是下一代互联网
构建发现服务,帮助客户找到最合适的内容
全渠道内置 AI 驱动、拟人化、多语言对话的聊天机器人
加速迁移您的数据到阿里云
在阿里云上建立一个安全且易扩容的环境,助力高效率且高成本效益的上云旅程
迁移到完全托管的云数据库
将 Oracle 数据库顺利迁移到云原生数据库
自带公网 IP 地址上云
利用阿里云强大的安全工具集,保障业务安全、应用程序安全、数据安全、基础设施安全和帐户安全
保护、备份和还原您的云端数据资产
MLPS 2.0 一站式合规解决方案
快速高效地将您的业务扩展到中国,同时遵守适用的当地法规
实现对 CloudOps、DevOps、SecOps、AIOps 和 FinOps 的高效、安全和透明的管理
构建您的原生云环境并高效管理集群
快速、安全地最大限度提高您的DevOps优势
实施细粒度安全控制
提供运维效率和总体系统安全性
实时分析您的云消耗并实现节约
实时存储、管理和分析各种规模和类型的数据
登录到带有智能化日志管理解决方案的 AIOps 环境
帮助企业实现数据现代化并规划其数字化未来
帮助零售商快速规划数字化之旅
将全球知名的 CRM 平台引入中国
在线存储、共享和管理照片与文件
构建、部署和管理高可用、高可靠、高弹性的应用程序
快速、安全地最大限度提高您的DevOps优势
将您的采购和销售置于同一企业级全渠道数字平台上
企业内大数据建设、管理和应用的一站式解决方案
帮助企业简化 IT 架构、实现商业价值、加速数字化转型的步伐
快速高效地将您的业务扩展到中国,同时遵守适用的当地法规
快速搜集、处理、分析联网设备产生的数据
0.0.201
由于自建ClickHouse面临高稳定性风险、运维管理难(集群扩展性差、版本更新困难)以及容灾能力弱等原因,越来越多的客户希望将自建的ClickHouse集群升级为云PaaS服务。本文为您介绍,自建ClickHouse如何迁移至云数据库ClickHouse社区兼容版集群。
目标集群:
自建集群:
已具有数据库账号和密码。
账号权限需具备库表读权限、SYSTEM命令执行权限。
目标集群与自建集群网络互通。
如果自建集群和目标集群位于同一个VPC下,您还需要将目标集群所有节点的IP地址以及其交换机 ID的IPv4网段,添加到自建集群的白名单中。
云数据库ClickHouse中如何添加白名单,请参见设置白名单。
自建集群如何添加白名单,请参见自身产品文档。
如何查看云数据库ClickHouse集群的所有节点的IP地址,请通过SELECT * FROM system.clusters;
查看。
如何获取云数据库ClickHouse交换机 ID的IPv4网段,请参见以下步骤:
在云数据库ClickHouse控制台找到目标集群的集群信息页面,在网络信息处获取交换机 ID。
在交换机列表,根据交换机 ID,搜索找到目标交换机,查看IPv4网段。
当自建集群和云集群位于不同VPC,或自建集群位于本地IDC或其他云厂商时,请先解决网络问题。具体操作,请参见如何解决目标集群与数据源网络互通问题?。
在您正式开始迁移数据前,强烈建议您创建一个测试环境,进行业务的兼容性和性能验证。迁移验证完成后,再在生产环境中进行数据迁移。这一步骤至关重要,它可以帮助您提前识别并解决潜在问题,确保迁移过程顺利,并且避免对生产环境造成不必要的影响。
迁移步骤,请参见本文。
上云兼容性和性能瓶颈分析,请参见ClickHouse自建上云兼容性和性能瓶颈分析与解决。
目标集群版本需大于等于21.8。
迁移过程中:
目标集群进行迁移的库表会暂停合并(Merge),但自建集群不会。
迁移数据时间过长,将导致目标集群的元数据积累过多。建议迁移任务的持续时长不超过5天。
目标集群必须使用default集群。如果您自建集群的命名使用了其他名字,则会自动将分布式表中的cluster定义转化为default。
迁移内容:
支持迁移的内容包含库、表、数据字典、物化视图。
不支持迁移Kafka和RabbitMQ引擎表。
为保证Kafka和RabbitMQ数据不分流,请先清理自建集群的Kafka和RabbitMQ引擎表后,再在目标集群创建,或者使用不同的消费者组。
非MergeTree类型的表(例如外表、Log表等)仅支持迁移表结构。
当自建集群存在非MergeTree类型的表时,数据迁移后,目标集群此类表只有表结构,没有具体的业务数据。具体业务数据迁移可以使用remote
函数进行迁移。具体操作,请参见通过remote函数进行数据迁移。
冷数据问题:冷存数据的迁移速度相对较慢,建议您尽量清理自建集群中的冷存数据,确保其总量不超过1TB。否则,迁移时间过长可能会导致迁移失败。
自建集群:
读取自建集群过程中,自建集群的CPU和内存会升高。
不允许其进行DDL操作。
目标集群:
写入数据过程中,目标集群的CPU和内存升高。
不允许进行DDL操作。
迁移的库表不允许进行DDL操作,不需要迁移的库表没有此限制。
迁移中的库表停止merge,不需要迁移的库表不会停止merge。
迁移任务开始前会重启,结束后也会重启一次。
在数据迁移之前,您需根据自建集群是否已启用system.part_log和system.query_log,对config.xml文件进行修改配置,以实现增量迁移。
如果您未启用system.part_log
和system.query_log
,您需在config.xml文件中增加以下内容。
<part_log>
<database>system</database>
<table>part_log</table>
<partition_by>event_date</partition_by>
<order_by>event_time</order_by>
<ttl>event_date + INTERVAL 15 DAY DELETE</ttl>
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
</part_log>
<query_log>
<database>system</database>
<table>query_log</table>
<partition_by>event_date</partition_by>
<order_by>event_time</order_by>
<ttl>event_date + INTERVAL 15 DAY DELETE</ttl>
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
</query_log>
您需根据下述内容,检查config.xml中system.part_log
和system.query_log
的配置,如果存在不一致之处,需将其修改为以下配置,否则可能会导致迁移失败或迁移速度缓慢。
<part_log>
<database>system</database>
<table>part_log</table>
<partition_by>event_date</partition_by>
<order_by>event_time</order_by>
<ttl>event_date + INTERVAL 15 DAY DELETE</ttl>
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
</part_log>
<query_log>
<database>system</database>
<table>query_log</table>
<partition_by>event_date</partition_by>
<order_by>event_time</order_by>
<ttl>event_date + INTERVAL 15 DAY DELETE</ttl>
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
</query_log>
修改配置后,您还需执行语句drop table system.part_log
和drop table system.query_log
,在业务表插入数据后,会重新触发创建system.part_log
和system.query_log
。
配置目标集群兼容自建集群,尽量减少上云后,业务上的修改。
获取目标集群与自建集群的版本号并对比二者是否相同。
登录目标集群与自建集群,分别执行下述语句,获取二者的版本号。如何登录云数据库ClickHouse,请参见连接数据库。
SELECT version();
如果对比结果不同,您需登录目标集群,通过修改compatibility参数与自建集群的版本号保持一致。使二者功能尽可能保持一致。示例如下。
SET GLOBAL compatibility = '22.8';
MaterializedMySQL
引擎。如果自建集群中有引擎为MaterializedMySQL的表,您需执行下述语句,开启MaterializedMySQL引擎的使用。
SET GLOBAL allow_experimental_database_materialized_mysql = 1;
ClickHouse社区已不再维护MaterializedMySQL引擎,建议您上云后,使用DTS同步MySQL数据。
针对MaterializedMySQL引擎社区不再维护问题,DTS将MySQL数据同步至云数据库ClickHouse时,其使用ReplacingMergeTree表代替了MaterializedMySQL表。更多详情,请参见MaterializedMySQL兼容性。
如何使用DTS迁移MySQL数据至云数据库ClickHouse,请参见下述文档。
在集群列表页面,选择社区版实例列表,单击目标集群ID。
在左侧导航栏,单击数据迁移及同步 > 从自建或云ClickHouse迁移。
在迁移任务页面,单击创建迁移任务。
配置源实例与目标实例。
配置以下信息,单击测试连接进行下一步。
测试连接成功后,进入下一个步骤。如果测试连接失败,请根据提示,重新配置源实例和目标实例。
配置项 | 说明 | 示例 |
源端接入方式 | 固定选择专线/VPN网关/智能网关/ESC自建ClickHouse。 | 专线/VPN网关/智能网关/ESC自建ClickHouse |
集群名称 | 源集群的名称。 仅由阿拉伯数字和英文字母组成。 | DataMigration |
源实例cluster名称 | 您需通过 | default |
VPC IP地址 | 集群每个shard的IP和PORT(即shard的TCP地址),并使用英文逗号隔开。 重要 不能使用云ClickHouse的VPC域名地址或者SLB地址。 格式: 根据自建上云的使用场景不同,集群IP和PORT的获取方法不同。 阿里云ClickHouse实例的跨账户、跨地域迁移 非阿里云ClickHouse实例迁移 您可以使用 如果IP不变映射到阿里云,您可以使用 如果IP和端口发生了转换后映射到阿里云,则需要根据网络打通情况配置对应的IP和PORT。 | 192.168.0.5:9000,192.168.0.6:9000 |
数据库账号 | 源集群数据库账号。 | test |
数据库密码 | 源集群数据库账号密码。 | test****** |
配置项 | 说明 | 示例 |
数据库账号 | 目标集群数据库账号。 | test |
数据库密码 | 目标群数据库账号密码。 | test****** |
确认迁移内容。
仔细阅读页面中数据迁移的包含内容提示信息,单击下一步:预检测并启动同步。
后台迁移链路预检测并启动任务。
后台会对目标集群和自建集群进行实例状态检测、存储空间检测和本地表和分布式表检测。
检测成功:
检测成功后的界面如下图所示。
仔细阅读页面迁移过程中对实例的影响提示内容。
单击完成。
单击完成后,任务创建完成且启动,任务状态为运行中,您可在任务列表查看任务。
完成任务创建后,您还需监控迁移任务,在迁移完成的最后阶段,主动停写自建集群,进行剩余库表结构迁移。如何监控迁移任务,请参见监控迁移任务并停写自建集群。
检测失败:您需要按照提示信息进行操作,重新进行数据迁移。检测内容及要求如下。检测报错信息以及解决方案,请参见迁移检查中报错信息查询及解决方案。
检测项目 | 检测要求 |
实例状态检测 | 迁移发起时,自建集群和目标集群不能有正在运行的管控任务(包含扩容,升降配等)。如果当前自建集群和目标集群有管控任务正在运行,则不能发起迁移任务。 |
存储空间检测 | 迁移进行前,进行存储空间校验。保证目标集群的存储空间大于等于自建集群的已使用空间的1.2倍。 |
本地表和分布式表检测 | 如果自建集群存在本地表没有创建分布式表或者分布式表不唯一,则校验失败。请删除多余的分布式表或创建唯一分布式表。 |
在社区版实例列表,单击目标集群ID。
在左侧导航栏,单击数据迁移及同步 > 从自建或云ClickHouse迁移。
在实例迁移列表页面,监控目标任务的运行阶段信息。
根据运行阶段信息列中预计剩余时间,主动停写自建集群,进行迁移任务的下一步操作以完成迁移任务。
完成任务操作代表在您主动停写自建集群后,此任务完成剩余数据迁移,停止迁移数据,并进行数据量检查,迁移剩余的库表结构。
如果检查不通过,迁移任务会一直处于数据量检查阶段。建议您取消迁移,重新创建迁移任务。如何取消迁移任务,请参见步骤七:其他操作。
长时间的迁移数据会导致目标集群的元数据过多,建议您在迁移任务创建后的5天内完成此操作。
在集群列表页面,选择社区版实例列表,单击目标集群ID。
在左侧导航栏,单击数据迁移及同步 > 从自建或云ClickHouse迁移。
在目标迁移任务的操作列,单击完成迁移。
在完成迁移对话框,单击确定。
迁移任务完成相关操作后,任务的迁移状态会变成已完成,但务列表不会立即更新,建议您,通过间隔刷新查看任务状态。
操作 | 功能含义 | 影响 | 使用场景 |
取消迁移 | 强制取消任务,跳过数据量检查,不迁移剩余的库表结构。 |
| 迁移任务影响了自建集群,希望尽快结束迁移,开启写入。 |
停止迁移 | 立刻停止迁移数据,跳过数据量检查,迁移剩余的库表结构。 | 目标集群重启。 | 期望迁移一部分数据后测试,但是不想停写自建集群。 |
在集群列表页面,选择社区版实例列表,单击目标集群ID。
在左侧导航栏,单击数据迁移及同步 > 从自建或云ClickHouse迁移。
在目标迁移任务的操作列,单击停止迁移。
在停止迁移对话框,单击确定。
在集群列表页面,选择社区版实例列表,单击目标集群ID。
在左侧导航栏,单击数据迁移及同步 > 从自建或云ClickHouse迁移。
在目标迁移任务的操作列,单击取消迁移。
在取消迁移对话框,单击确定。
ClickHouse元数据的迁移,主要指进行建表DDL迁移。
如需安装clickhouse-client工具,请安装与目标实例云数据库ClickHouse版本一致的clickhouse-client工具。下载链接,请参见clickhouse-client。
查看自建集群的database列表。
clickhouse-client --host="<old host>" --port="<old port>" --user="<old user name>" --password="<old password>" --query="SHOW databases" > database.list
参数说明:
参数 | 描述 |
old host | 自建集群的地址。 |
old port | 自建集群的端口。 |
old user name | 登录自建集群的账号,拥有DML读写和设置权限,允许DDL权限。 |
old password | 上述账号对应的密码。 |
system是系统数据库,不需要迁移,可以直接过滤掉。
查看自建集群的table列表。
clickhouse-client --host="<old host>" --port="<old port>" --user="<old user name>" --password="<old password>" --query="SHOW tables from <database_name>" > table.list
参数说明:
参数 | 描述 |
database_name | 数据库名称 |
您也可以通过系统表直接查询所有database和table名称。
SELECT DISTINCT database, name FROM system.tables WHERE database != 'system';
查询到的表名中,如果有以.inner.开头的表,则它们是物化视图的内部表示,不需要迁移,可以直接过滤掉。
导出自建集群中指定数据库下所有表的建表DDL。
clickhouse-client --host="<old host>" --port="<old port>" --user="<old user name>" --password="<old password>" --query="SELECT concat(create_table_query, ';') FROM system.tables WHERE database='<database_name>' FORMAT TabSeparatedRaw" > tables.sql
将建表DDL导入到目标实例云数据库ClickHouse。
您需要在建表DDL导入之前,在云数据库ClickHouse中创建表所在数据库。
clickhouse-client --host="<new host>" --port="<new port>" --user="<new user name>" --password="<new password>" -d '<database_name>' --multiquery < tables.sql
参数说明:
参数 | 描述 |
new host | 目标实例云数据库ClickHouse的地址。 |
new port | 目标实例云数据库ClickHouse的端口。 |
new user name | 登录目标实例云数据库ClickHouse的账号,拥有DML读写和设置权限,允许DDL权限。 |
new password | 上述账号对应的密码。 |
(可选)在进行云数据库ClickHouse数据迁移时,如果需要考虑网络流量。您可以通过调整network_compression_method参数来选择合适的压缩算法,减少流量的使用。
在目标实例云数据库ClickHouse中临时修改或查看network_compression_method,示例如下。
SET network_compression_method = 'ZSTD';
在目标实例云数据库ClickHouse中查看network_compression_method参数值,示例如下。
SELECT * FROM system.settings WHERE name = 'network_compression_method';
在目标实例云数据库ClickHouse中,通过如下SQL进行数据迁移。
INSERT INTO <new_database>.<new_table>
SELECT *
FROM remote('<old_endpoint>', <old_database>.<old_table>, '<username>', '<password>')
[WHERE _partition_id = '<partition_id>']
SETTINGS max_execution_time = 0, max_bytes_to_read = 0, log_query_threads = 0;
20.8版本优先使用remoteRaw函数进行数据迁移,如果失败可以申请小版本升级。
INSERT INTO <new_database>.<new_table>
SELECT *
FROM remoteRaw('<old_endpoint>', <old_database>.<old_table>, '<username>', '<password>')
[WHERE _partition_id = '<partition_id>']
SETTINGS max_execution_time = 0, max_bytes_to_read = 0, log_query_threads = 0;
参数说明:
通过partition_id对数据过滤后,可以减少资源占用,建议您选用此参数。
(可选)如果您不知道如何获取partition_id及part的数量,可以通过以下SQL在system.parts系统中查询。
SELECT partition_id, count(*) AS part_count from clusterAllReplicas(default, system, parts) WHERE `database` = '<old_database>' AND `table` = '<old_table>' GROUP BY partition_id ;
参数 | 描述 |
new_database | 目标云数据库ClickHouse实例中的数据库名。 |
new_table | 目标实例云数据库ClickHouse中的表名。 |
old_endpoint | 源实例的endpoint。 自建ClickHouse 云数据库ClickHouse endpoint格式: 重要 此处port为TCP port。 源实例的endpoint为VPC内网endpoint,不是公网endpoint。 重要 以下端口3306和9000是固定值。
|
old_database | 自建集群的数据库名。 |
old_table | 自建集群的表名。 |
username | 自建集群的账号。 |
password | 自建集群的密码。 |
max_execution_time | 查询的最大执行时间。设置为0表示没有时间限制。 |
max_bytes_to_read | 查询在读取源数据时能读取的最大字节数。设置为0表示没有限制。 |
log_query_threads | 是否记录查询执行的线程信息。设置为0表示不记录线程信息。 |
_partition_id | 数据分区ID。 |
通过文件,将数据从自建集群数据库导出到目标实例云数据库ClickHouse中。
将数据从自建集群数据库导出为CSV格式文件。
clickhouse-client --host="<old host>" --port="<old port>" --user="<old user name>" --password="<old password>" --query="select * from <database_name>.<table_name> FORMAT CSV" > table.csv
导入CSV文件到目标实例云数据库ClickHouse。
clickhouse-client --host="<new host>" --port="<new port>" --user="<new user name>" --password="<new password>" --query="insert into <database_name>.<table_name> FORMAT CSV" < table.csv
clickhouse-client --host="<old host>" --port="<old port>" --user="<user name>" --password="<password>" --query="select * from <database_name>.<table_name> FORMAT CSV" |
clickhouse-client --host="<new host>" --port="<new port>" --user="<user name>" --password="<password>" --query="INSERT INTO <database_name>.<table_name> FORMAT CSV"
检查报错信息 | 含义 | 解决方案 |
检查报错信息 | 含义 | 解决方案 |
Missing unique distributed table or sharding_key not set. | 自建集群的本地表缺失唯一分布式表。 | 迁移前,自建集群的本地表需要创建对应的分布式表。 |
The corresponding distribution table is not unique. | 自建集群的本地表对应的分布式表存在多个。 | 自建集群删除多余的分布式表,保留其中一个。 |
MergeTree table on multiple replica cluster. | 自建集群为多副本集群,但是存在非Replicated表,数据在副本之间不一致,不支持迁移。 | |
Data reserved table on destination cluster. | 需要迁移的表在目标集群存在数据。 | 删除目标集群对应的表。 |
Columns of distributed table and local table conflict | 自建集群的分布式表和本地表的列不一致。 | 自建集群重建分布式表,和本地表保持一致。 |
Storage is not enough. | 目标集群存储空间不足。 | 升配目标集群磁盘空间,满足目标集群总空间大于1.2倍的自建集群使用空间。如何升配,请参见社区兼容版集群垂直变配和水平扩缩容。 |
Missing system table. | 自建集群系统表缺失。 | 修改自建集群配置config.xml,创建必须的系统表。如何配置,请参见步骤一:自建集群检查并开启使用系统表system。 |
Q:如何处理报错:“Too many partitions for single INSERT block (more than 100)”?
A:单个INSERT操作中超过了max_partitions_per_insert_block(最大分区插入块,默认值为100)。ClickHouse每次写入都会生成一个data part(数据部分),一个分区可能包含一个或多个data part,如果单个INSERT操作中插入了太多分区的数据,那会造成ClickHouse内部有大量的data part,这会给合并和查询造成很大的负担。为了防止出现大量的data part,ClickHouse内部做了限制。
解决方案:请执行以下操作,调整分区数或者max_partitions_per_insert_block参数。
调整表结构,调整分区方式,或避免单次插入的不同分区数超过限制。
避免单次插入的不同分区数超过限制,可根据数据量适当修改max_partitions_per_insert_block参数,放大单个插入的不同分区数限制,修改语法如下:
SET GLOBAL ON cluster DEFAULT max_partitions_per_insert_block = XXX;
ClickHouse社区推荐默认值为100,分区数不要设置得过大,否则可能对性能产生影响。在批量导入数据后可以将值修改为默认值。
Q:为什么目标实例云数据库ClickHouse连接自建数据库ClickHouse连接失败?
A:可能是您的自建数据库ClickHouse设置了防火墙或白名单等操作。您需在自建数据库ClickHouse的白名单中添加云数据库ClickHouse的交换机 ID的IPv4网段。如何获取云数据库ClickHouse的交换机 ID的IPv4网段,请参见查看IPv4网段。
Q:扩缩容和迁移多副本实例时,为什么不允许存在非Replicated表?如果存在,如何解决?
A:原因及解决方案如下:
原因分析:多副本实例需要使用Replicated表才能实现数据在副本间同步,否则多副本将失去意义。迁移工具随机选择其中一个副本作为数据源将数据迁移到目标实例。
如果存在非Replicated表,导致不同副本之间数据无法同步,数据处于单副本状态。迁移工具只会迁移其中一个副本的数据,进而导致数据缺失。如下图所示,副本0(r0)的MergeTree表存在1、2、3数据;副本1(r1)的MergeTree表存在4、5数据。迁移到目标实例后,只剩下1、2、3数据。
解决方案:如果源实例非Replicated表可以删除,建议优先选择删除表。否则,需要将源实例的非Replicated表替换为Replicated表。具体操作如下:
登录源实例。
创建Replicated表,除了引擎以外,表结构必须与要替换的非Replicated表保持一致。
手动将非Replicated表的数据迁移到新建的Replicated表。迁移语句如下。
每个副本都需迁移,即r0和r1都需要执行。
语句中节点IP可通过SELECT * FROM system.clusters;
获取。
INSERT INTO <目标库>.<新建的Replicated表>
SELECT *
FROM remote('<节点IP>:3003', '<源库>', '<要替换的非Replicated表>', '<username>', '<password>')
[WHERE _partition_id = '<partition_id>']
SETTINGS max_execution_time = 0, max_bytes_to_read = 0, log_query_threads = 0;
将非Replicated表和Replicated表互换名字
EXCHANGE TABLES <源库>.<要替换的非Replicated表> AND <目标库>.<新建的Replicated表> ON CLUSTER default;