ClickHouse 常见错误码


1. 介绍

ClickHouse 是一种高性能列式数据库管理系统,专为在线分析处理(OLAP)场景设计。它具有高查询性能、水平可扩展性和实时数据更新等优点,广泛应用于大数据分析领域。在使用 ClickHouse 时,用户可能会遇到各种错误。为了帮助用户更好地理解和解决问题,ClickHouse 提供了一系列错误码。

ClickHouse 的错误码是一个数字,表示特定类型的错误。每个错误码对应一个描述性的错误消息,以帮助用户快速定位问题。这些错误码涵盖了各种可能的问题,包括语法错误、权限问题、数据类型不匹配、网络问题等。当用户在查询或操作数据库时遇到问题时,ClickHouse 会返回相应的错误码和错误消息。

要解决 ClickHouse 返回的错误,用户需要根据错误码和错误消息找出问题所在,并采取相应的措施进行修复。有时,解决问题可能需要修改 SQL 语句、调整权限设置、更改数据类型或检查网络设置等。了解 ClickHouse 错误码有助于用户更快地定位问题,提高数据库使用效率。

2. 常见错误码

错误码 原因
53 数据类型不匹配。当用户试图将不兼容的数据类型插入表中或执行类型转换时,会返回此错误码。用户需要确保数据类型与表结构相符。
62 语法错误。当用户提交的 SQL 语句存在语法错误时,会返回此错误码。此时,用户需要检查 SQL 语句的语法是否正确。
164 权限问题。当用户试图执行需要特定权限的操作(如创建表、删除表等)时,如果没有足够的权限,会返回此错误码。用户需要检查自己的权限设置,或联系管理员进行授权。
210 网络问题。当用户与 ClickHouse 服务器之间的网络连接出现问题时,会返回此错误码。用户需要检查网络连接状况和服务器设置。

2.1 Code: 32

Clickhouse code 32 DB::Exception: Attempt to read after eof
  • 原因:

错误码 32 对应的错误消息是 “DB::Exception: Attempt to read after eof”。这表明在尝试从文件或流中读取数据时,已经到达了文件末尾(EOF, End of File),但仍然尝试继续读取。这通常是由于查询中的某些操作导致的,例如尝试读取文件中不存在的数据。

  • 解决:
  1. 检查查询:仔细检查查询,确保正在访问存在的数据。如果查询中的某些操作依赖于文件的特定部分,但该部分不存在,则可能会导致此问题。尝试修改查询以避免读取不存在的数据。
  2. 检查数据文件:检查与查询相关的数据文件,确保它们没有损坏或不完整。如果文件损坏或丢失部分数据,可能需要从备份恢复数据,或者重新生成数据。
  3. 检查表结构:确保表结构与查询中使用的数据类型和列相匹配。如果表结构与查询不匹配,可能会导致读取文件时出现问题。可以使用 DESCRIBE TABLE 语句查看表结构。

通过检查查询、确保数据文件完整且未损坏以及检查表结构,可以解决错误码 32 相关的问题。这将有助于确保能够顺利地从文件或流中读取数据,从而提高查询性能和可靠性。

2.2 Code: 48

Received exception from server (version 21.1.2.15):

Code: 48. DB::Exception: Received from localhost:9000, ::1. 
DB::Exception: Mutations are not supported by storage Distributed.
  • 原因:

错误码 48 对应的错误消息是 “DB::Exception: Received from localhost:9000, ::1. DB::Exception: Mutations are not supported by storage Distributed.”。这表示尝试在 ClickHouse 的 Distributed 存储引擎上执行一种不支持的操作(即,Mutation)。Mutation 是一种用于对已存在的数据进行修改的操作,例如 ALTER TABLE … UPDATE 或 ALTER TABLE … DELETE。

  • 解决:

需要在 Distributed 表的底层本地表上执行 Mutation 操作,而不是直接在 Distributed 表上进行。Distributed 表本质上是一个代理,它将查询路由到一个或多个底层的本地表。因此,要对 Distributed 表的数据进行修改,需要分别在每个底层本地表上执行相应的 Mutation 操作。

例如,如果有一个名为 distributed_table 的 Distributed 表,该表分布在名为 local_table 的本地表上,可以执行以下操作:

  1. 在每个本地表上执行 UPDATE 操作:
ALTER TABLE local_table ON CLUSTER your_cluster UPDATE column1 = value1 WHERE condition;
  1. 在每个本地表上执行 DELETE 操作:
ALTER TABLE local_table ON CLUSTER your_cluster DELETE WHERE condition;

通过在底层本地表上执行 Mutation 操作,可以解决错误码 48 相关的问题。这将有助于确保能够成功地修改 Distributed 表的数据,从而提高查询性能和可靠性。

2.3 Code: 62

ERROR ApplicationMaster: 
User class threw exception: ru.yandex.clickhouse.except.ClickHouseException: 
ClickHouse exception, code: 62, host: 127.0.0.1, port: 8123; Code: 62, 
e.displayText() = DB::Exception: Syntax error: failed at position 1432 (end of query): . 
Expected one of: ENGINE, storage definition 
(version 20.8.3.18)ru.yandex.clickhouse.except.ClickHouseException: 
ClickHouse exception, code: 62, host: 127.0.0.1, port: 8123; Code: 62, 
e.displayText() = DB::Exception: Syntax error: 
failed at position 1432 (end of query): . 
Expected one of: ENGINE, storage definition (version 20.8.3.18)
  • 原因:

错误码 62 表示遇到了一个语法错误。根据错误消息 “Syntax error: failed at position 1432 (end of query): . Expected one of: ENGINE, storage definition”,在执行 ClickHouse 查询或操作时,遇到了一个语法错误。问题出现在查询的第 1432 个字符位置,可能与存储引擎(ENGINE)或存储定义相关。

  • 解决:

请仔细检查 SQL 查询或操作,并找出语法错误。以下是一些建议:

  1. 检查 CREATE TABLE 语句中是否正确定义了存储引擎。在 ClickHouse 中,需要为每个表指定一个存储引擎。例如,对于 MergeTree 存储引擎,需要这样定义:
CREATE TABLE table_name
(
    column1 String,
    column2 Int32,
    ...
) ENGINE = MergeTree()
ORDER BY (column1, column2);
  1. 确保 SQL 查询中没有遗漏或错误的括号、逗号或其他符号。这些小错误可能导致语法错误。
  2. 如果正在使用一些高级特性或函数,请确保正确使用它们。参考 ClickHouse 官方文档以获取正确的语法和示例。

检查并修正 SQL 查询或操作中的语法错误有助于解决错误码 62 相关的问题。正确编写 SQL 查询或操作可以确保 ClickHouse 正常工作,并避免因语法错误导致的问题。

2.4 Code 62

Max query size exceeded
  • 原因:Select 语句中使用 in 方式查询报错。这是由于查询语句特别大造成的,默认的 max_query_size 最大是256。

  • 解决:

打开 /etc/clickhouse-server/users.xml(只配置了一些常用的用户)。max_query_size 这种配置,就需要在 profiles 部分中配置修改。

注意这里的单位是 bytes(字节), 我这里设置了102410241024=1,073,741,824,就解决问题了。如果是 sql 创建的用户,需要通过 sql 修改配额,修改方式参考 https://www.cnblogs.com/MrYang-11-GetKnow/p/15896355.html。

2.5 Code: 117

Code: 117, e.displayText() = 
DB::Exception: Unexpected NULL value of not Nullable type String (version 20.8.3.18)
  • 原因:

错误码 117 对应的错误消息为 “Unexpected NULL value of not Nullable type String”。这表明在执行某个操作时,向一个不允许为空(non-nullable)的 String 类型字段中插入了 NULL 值。ClickHouse 不允许在 non-nullable 字段中存储 NULL 值。

  • 解决

检查 SQL 查询或操作,确保不向不允许为空的字段中插入 NULL 值。可以采取以下措施之一:

  1. 确保插入的数据中不包含 NULL 值。在插入数据之前,可以对数据进行清洗,以确保不包含 NULL 值。如果数据源可能包含 NULL 值,可以使用适当的默认值替换它们。
  2. 修改表结构,将 non-nullable 字段更改为 nullable 字段。这将允许字段存储 NULL 值。可以使用 ALTER TABLE 语句更改表结构。但请注意,这可能会影响查询性能和存储空间。
ALTER TABLE table_name MODIFY COLUMN column_name Nullable(String);
  1. 使用 coalesceifNull 函数为可能为空的字段提供默认值。这可以确保在插入数据时,空值将被默认值替换。
INSERT INTO table_name (column1, column2, non_nullable_column)
VALUES ('value1', 'value2', coalesce(NULL, 'default_value'));

通过采取这些措施,应该能够解决错误码 117 相关的问题。确保不向 non-nullable 字段中插入 NULL 值,有助于维护数据库的数据完整性和查询性能。

2.6 Code: 159,read timeout

  • 原因:查询超时导致报错。
  • 解决:执行某些SQL很耗时导致最后报错读超时,这是因为 clickhouse 执行单次 SQ L的默认最大等待时间是30s,如果有比较耗时的SQL, 可以通过将 JdbcURL 的 socket_timeout 参数值设置的大一点来解决这个问题(注意这个参数的时间单位是毫秒,默认是30000)。

2.7 Code: 159

Code: 159. DB::Exception: 
Received from localhost:9000. DB::Exception: 
Watching task /clickhouse/task_queue/ddl/query-0000000002 is executing longer than distributed_ddl_task_timeout (=180) seconds. 
There are 3 unfinished hosts (0 of them are currently active), they are going to execute the query in background.
  • 原因:

错误码 159 表示遇到了一个分布式 DDL(Data Definition Language)任务超时的问题。根据错误消息,任务执行时间超过了分布式 DDL 任务的超时时间(distributed_ddl_task_timeout),默认值为 180 秒。此时,尚有 3 个未完成的主机(其中 0 个处于活跃状态),它们将在后台继续执行查询。

  • 解决
  1. 增加分布式 DDL 任务的超时时间:可以通过修改 distributed_ddl_task_timeout 配置参数来增加超时时间。例如,将其设置为 300 秒:
<!-- 在 config.xml 文件中 -->
<distributed_ddl_task_timeout>300</distributed_ddl_task_timeout>

然后重启 ClickHouse 服务器以使更改生效。这将为分布式 DDL 任务提供更多的执行时间。

  1. 检查未完成主机的状态:由于有 3 个未完成的主机,可能需要检查这些主机的状态。可能有网络问题、资源瓶颈或其他问题导致它们无法在规定时间内完成任务。解决这些问题可以提高分布式 DDL 任务的执行效率。

  2. 优化 DDL 操作:如果正在执行大型或复杂的 DDL 操作(例如,更改表结构或删除大量数据),可能需要考虑优化这些操作以减少执行时间。例如,可以将大型操作分解为较小的任务,或者优化表结构以提高执行效率。

通过调整超时设置、检查主机状态和优化 DDL 操作,可以解决错误码 159 相关的问题。这将有助于确保分布式 DDL 任务能够在规定时间内完成,提高 ClickHouse 集群的整体性能。

2.8 Code: 168,AST is too big,Maximum: 50000

  • 原因:

错误码 168 对应的错误消息是 “AST is too big,Maximum: 50000”。这表明在执行某个查询或操作时,生成的抽象语法树(Abstract Syntax Tree,AST)太大,超过了 ClickHouse 允许的最大限制(默认为 50,000)。

抽象语法树是一种树形数据结构,用于表示源代码的结构。在执行查询或操作时,ClickHouse 首先将 SQL 语句解析为 AST,然后对 AST 进行进一步的分析和处理。如果生成的 AST 过大,可能导致内存消耗过高,影响系统性能。

  • 解决:

要解决这个问题,需要优化 SQL 查询或操作,以减小生成的 AST 大小。以下是一些建议:

  1. 分解复杂查询:将复杂的查询分解为多个较简单的查询,并逐步执行。这可以减小每个查询生成的 AST 大小,降低内存消耗。
  2. 避免过度嵌套:减少子查询、连接和嵌套函数的使用,以降低 AST 的复杂性。尽可能使用简单的查询结构和表达式。
  3. 优化表结构:优化表结构以减少查询中需要处理的字段数量。这可以降低 AST 大小,并提高查询性能。

另外,可以尝试增加 ClickHouse 配置中的 max_ast_elements 参数值。但请注意,过高的值可能导致更高的内存消耗和系统性能问题。

<!-- 在 config.xml 文件中 -->
<max_ast_elements>100000</max_ast_elements>

然后重启 ClickHouse 服务器以使更改生效。请谨慎调整此值,以免对系统性能产生负面影响。

通过优化 SQL 查询或操作、分解复杂查询以及合理调整 ClickHouse 配置,可以解决错误码 168 相关的问题。这将有助于确保 AST 大小在可接受范围内,提高 ClickHouse 的查询性能和稳定性。

2.9 Code: 202

ClickHouse exception, code: 202, 
host: xxxxx, port: 8123; Code: 202, e.displayText() = 
DB::Exception: Too many simultaneous queries. Maximum: 100
  • 原因:

错误码 202 对应的错误消息是 “Too many simultaneous queries. Maximum: 100”。这表明正在尝试在 ClickHouse 中执行过多的并行查询,超过了允许的最大限制(默认为 100)。

  • 解决:
  1. 限制并发查询:尝试减少应用程序或服务中同时执行的查询数量。可以考虑使用连接池、队列或其他方法来限制并发查询数,避免超过 ClickHouse 允许的最大限制。
  2. 优化查询性能:检查查询,看是否可以进行优化以提高查询性能。执行更快的查询可以减少并发查询数,从而降低对 ClickHouse 的压力。可以考虑使用索引、分区或其他优化方法来提高查询性能。
  3. 调整 ClickHouse 配置:可以尝试增加 ClickHouse 配置中的 max_concurrent_queries 参数值,以允许更多的并发查询。但请注意,过高的值可能导致更高的资源消耗和系统性能问题。
<!-- 在 config.xml 文件中 -->
<max_concurrent_queries>150</max_concurrent_queries>

然后重启 ClickHouse 服务器以使更改生效。请谨慎调整此值,以免对系统性能产生负面影响。

通过限制并发查询、优化查询性能以及合理调整 ClickHouse 配置,可以解决错误码 202 相关的问题。这将有助于确保 ClickHouse 能够在可接受的范围内处理并发查询,提高系统的整体性能和稳定性。

2.10 Code: 210

Code: 210, e.displayText() = 
DB::NetException: Connection refused: (10.121.21.33:9000), 
e.what() = DB::NetException ConnectionPoolWithFailover: Connection failed at try ..

错误码 210 对应的错误消息是 “Connection refused”。这表明在尝试连接到 ClickHouse 服务器(IP 地址为 10.121.21.33,端口为 9000)时,连接被拒绝。这可能是由于网络问题、服务器未启动或服务器配置不正确导致的。

为了解决这个问题,可以尝试以下方法:

  1. 检查网络连接:确保客户端和 ClickHouse 服务器之间的网络连接正常。可以尝试使用 pingtelnet 命令测试网络连接。
ping 10.121.21.33
telnet 10.121.21.33 9000
  1. 确保 ClickHouse 服务器正在运行:登录到目标服务器(IP 地址为 10.121.21.33),检查 ClickHouse 服务是否正在运行。如果没有运行,需要启动 ClickHouse 服务。
# 对于 Systemd 系统,使用以下命令:
sudo systemctl start clickhouse-server

# 对于 SysVinit 系统,使用以下命令:
sudo service clickhouse-server start
  1. 检查 ClickHouse 配置:确保 ClickHouse 配置文件(通常位于 /etc/clickhouse-server/config.xml)正确配置了监听地址和端口。例如,要确保 ClickHouse 服务器监听所有网络接口,可以将 listen_host 参数设置为 0.0.0.0
<!-- 在 config.xml 文件中 -->
<listen_host>0.0.0.0</listen_host>

然后重启 ClickHouse 服务器以使更改生效。

通过检查网络连接、确保 ClickHouse 服务器正在运行以及检查并更新 ClickHouse 配置,可以解决错误码 210 相关的问题。这将有助于确保客户端能够成功连接到 ClickHouse 服务器,从而进行正常的查询和操作。

2.11 Code: 241

Code: 241. DB::Exception: 
Received from localhost:9000. 
DB::Exception: Memory limit (for query) exceeded: 
would use 9.31 GiB (attempt to allocate chunk of 4223048 bytes), 
maximum: 9.31 GiB: While executing MergeTreeThread: While executing CreatingSetsTransform.
  • 原因:

错误码 241 对应的错误消息是 “Memory limit (for query) exceeded: would use 9.31 GiB (attempt to allocate chunk of 4223048 bytes), maximum: 9.31 GiB: While executing MergeTreeThread: While executing CreatingSetsTransform”。这表明在执行某个查询时,内存使用量超过了 ClickHouse 允许的最大限制(默认为 9.31 GiB)。

  • 解决:
  1. 优化查询:检查查询,看是否可以进行优化以降低内存使用量。可以考虑减少查询中的子查询、连接和嵌套函数,以降低内存消耗。此外,通过选择合适的表结构和索引,还可以提高查询性能。
  2. 分解复杂查询:将复杂的查询分解为多个较简单的查询,并逐步执行。这可以降低每个查询的内存消耗,从而降低对 ClickHouse 的压力。
  3. 调整 ClickHouse 配置:可以尝试增加 ClickHouse 配置中的 max_memory_usage 参数值,以允许使用更多内存。但请注意,过高的值可能导致更高的资源消耗和系统性能问题。
<!-- 在 config.xml 文件中 -->
<max_memory_usage>16106127360</max_memory_usage>

上面的例子将最大内存使用限制提高到 15 GiB。然后重启 ClickHouse 服务器以使更改生效。请谨慎调整此值,以免对系统性能产生负面影响。

通过优化查询、分解复杂查询以及合理调整 ClickHouse 配置,可以解决错误码 241 相关的问题。这将有助于确保内存使用量在可接受范围内,提高 ClickHouse 的查询性能和稳定性。

2.12 Code: 252

ru.yandex.clickhouse.except.ClickHouseException: 
ClickHouse exception, code: 252, host: xxxx, port: 8123; Code: 252, 
e.displayText() = DB::Exception: Too many parts (308). 
Merges are processing significantly slower than inserts. (version 20.8.3.18)
  • 原因:

这个错误表示 ClickHouse 中的表分区有太多的数据部分(parts),导致合并操作(merges)处理速度远低于插入操作(inserts)。错误消息是 “ClickHouse exception, code: 252, e.displayText() = DB::Exception: Too many parts (308). Merges are processing significantly slower than inserts.”。

  • 解决:
  1. 优化表的分区策略:检查的表分区策略,看是否可以进行优化以减少数据部分的数量。合理的分区策略可以确保数据更有效地存储在表中,从而提高合并操作的性能。
  2. 调整合并操作的设置:可以调整 ClickHouse 配置文件中与合并操作相关的参数,以提高合并操作的性能。例如,可以调整 background_pool_sizebackground_schedule_pool_size 参数,以便 ClickHouse 使用更多的线程来执行合并操作。
<!-- 在 config.xml 文件中 -->
<background_pool_size>16</background_pool_size>
<background_schedule_pool_size>16</background_schedule_pool_size>

完成更改后,重启 ClickHouse 服务器以使更改生效。

  1. 手动触发合并操作:可以尝试手动触发合并操作,以减少表中的数据部分。使用 OPTIMIZE TABLE 语句可以手动触发合并操作:
OPTIMIZE TABLE your_table_name FINAL;

这将尝试将表中的所有数据部分合并为一个部分。请注意,此操作可能会消耗大量资源并影响查询性能,因此谨慎使用。

通过优化表的分区策略、调整合并操作的设置以及手动触发合并操作,可以解决错误码 252 相关的问题。这将有助于确保表中的数据部分数量保持在合理范围内,从而提高合并操作和查询性能。

2.13 Code: 252

Code: 252, e.displayText() = 
DB::Exception: Too many partitions ,
for single INSERT block (more than 100).
  • 原因:

错误码 252 对应的错误消息是 “DB::Exception: Too many partitions for single INSERT block (more than 100)”。这表示尝试执行的 INSERT 操作涉及到过多的分区(超过 100 个),导致 ClickHouse 拒绝执行该操作。ClickHouse 限制了单个 INSERT 块中涉及的分区数量,以防止由于插入数据导致的性能问题。

  • 解决:
  1. 拆分 INSERT 操作:将涉及大量分区的 INSERT 操作拆分为多个较小的操作。每个操作应仅涉及较少的分区,以确保它们在 ClickHouse 中能够成功执行。例如,可以将数据分批插入,每次插入涉及的分区数量不超过 100。
  2. 优化分区策略:检查的表分区策略,看是否可以进行优化以减少 INSERT 操作涉及的分区数量。合理的分区策略可以确保数据在表中更有效地存储,从而提高插入操作的性能。
  3. 调整插入的数据量:如果可能,请尝试减少单个 INSERT 操作中插入的数据量。这样可以降低插入操作涉及的分区数量,从而提高插入操作的成功率。

通过拆分 INSERT 操作、优化分区策略以及调整插入的数据量,可以解决错误码 252 相关的问题。这将有助于确保能够顺利地向 ClickHouse 表中插入数据,从而提高查询性能和可靠性。

2.14 Code: 253

Code: 253, Replica /clickhouse/tables/XXX/XXX/replicas/dba07 already exists
  • 原因:

错误码 253 对应的错误消息是 “Replica /clickhouse/tables/XXX/XXX/replicas/dba07 already exists”。这意味着尝试创建一个已经存在的副本(Replica)。在 ClickHouse 的 ReplicatedMergeTree 引擎中,副本用于在多个服务器之间同步数据,以提供冗余和故障转移。每个副本都必须具有唯一的名称。

  • 解决:
  1. 检查副本名称:确保在创建副本时使用了正确且唯一的名称。如果已经存在具有相同名称的副本,请为新副本选择不同的名称。例如,如果当前尝试创建的副本名称为 dba07,则可以尝试使用 dba08 或其他唯一名称。
  2. 删除现有副本:如果确实需要创建一个具有相同名称的副本,可以先删除现有副本。然而,请注意,在删除副本之前,确保它不再需要,以防止数据丢失。要删除副本,可以使用 DROP TABLE 语句:
DROP TABLE your_table_name ON CLUSTER your_cluster_name;

然后,可以使用 CREATE TABLE 语句创建新的副本。

通过检查副本名称以及在需要时删除现有副本,可以解决错误码 253 相关的问题。这将有助于确保能够成功地创建和管理 ClickHouse 中的副本,从而提高数据同步和故障转移能力。

2.15 Code: 253

Code: 253, Exception: Replica /clickhouse/tables/[...] already exists (version 21.8.10.19 Docker)
  • 原因:

错误码 253 对应的错误消息是 “Exception: Replica /clickhouse/tables/[…] already exists (version 21.8.10.19 Docker)”。这表示尝试创建一个已经存在的副本。在 ClickHouse 的 ReplicatedMergeTree 引擎中,副本用于在多个服务器之间同步数据,以提供冗余和故障转移。每个副本都必须具有唯一的名称。

  • 解决:
  1. 检查副本名称:确保在创建副本时使用了正确且唯一的名称。如果已经存在具有相同名称的副本,请为新副本选择不同的名称。例如,如果当前尝试创建的副本名称为 replica01,则可以尝试使用 replica02 或其他唯一名称。
  2. 删除现有副本:如果确实需要创建一个具有相同名称的副本,可以先删除现有副本。然而,请注意,在删除副本之前,确保它不再需要,以防止数据丢失。要删除副本,可以使用 DROP TABLE 语句:
DROP TABLE your_table_name ON CLUSTER your_cluster_name;

然后,可以使用 CREATE TABLE 语句创建新的副本。

通过检查副本名称以及在需要时删除现有副本,可以解决错误码 253 相关的问题。这将有助于确保能够成功地创建和管理 ClickHouse 中的副本,从而提高数据同步和故障转移能力。

2.16 Code: 253

Code: 253, Exception: Replica /clickhouse/tables/[...] already exists (version 21.8.10.19 Docker)
  • 原因:

错误码 253 对应的错误消息是 “Exception: Replica /clickhouse/tables/[…] already exists (version 21.8.10.19 Docker)”。这表示尝试创建一个已经存在的副本。在 ClickHouse 的 ReplicatedMergeTree 引擎中,副本用于在多个服务器之间同步数据,以提供冗余和故障转移。每个副本都必须具有唯一的名称。

  • 解决:
  1. 检查副本名称:确保在创建副本时使用了正确且唯一的名称。如果已经存在具有相同名称的副本,请为新副本选择不同的名称。例如,如果当前尝试创建的副本名称为 replica01,则可以尝试使用 replica02 或其他唯一名称。
  2. 删除现有副本:如果确实需要创建一个具有相同名称的副本,可以先删除现有副本。然而,请注意,在删除副本之前,确保它不再需要,以防止数据丢失。要删除副本,可以使用 DROP TABLE 语句:
DROP TABLE your_table_name ON CLUSTER your_cluster_name;

然后,可以使用 CREATE TABLE 语句创建新的副本。

通过检查副本名称以及在需要时删除现有副本,可以解决错误码 253 相关的问题。这将有助于确保能够成功地创建和管理 ClickHouse 中的副本,从而提高数据同步和故障转移能力。

2.17 Code: 359

Code: 359,e.displayText()=DB::Exception: Table or Partition in xxx was not dropped.

Reason:
1. Size (158.40 GB) is greater than max_[table/partition]_size_to_drop (50.00 GB)
2. File '/data/clickhouse/clickhouse-server/flags/force_drop_table' intended to force DROP doesn't exist
  • 原因:

错误码 359 对应的错误消息是 “DB::Exception: Table or Partition in xxx was not dropped. Reason: \1. Size (158.40 GB) is greater than max_[table/partition]_size_to_drop (50.00 GB) \2. File ‘/data/clickhouse/clickhouse-server/flags/force_drop_table’ intended to force DROP doesn’t exist”。这表示尝试删除一个表或分区,但由于其大小(158.40 GB)超过了允许删除的最大表或分区大小(50.00 GB),因此未能成功删除。

  • 解决:
  1. 增加 max_table_size_to_drop 或 max_partition_size_to_drop 的值:可以通过修改 ClickHouse 配置文件(通常为 /etc/clickhouse-server/config.xml)中的 max_table_size_to_drop 或 max_partition_size_to_drop 参数来增加允许删除的最大表或分区大小。例如,可以将其设置为 200 GB 或更高。请注意,在修改配置文件后,需要重启 ClickHouse 服务器以使更改生效。
  2. 强制删除表或分区:如果确实需要删除较大的表或分区,可以通过创建一个名为 ‘force_drop_table’ 的文件来强制删除它。此文件应位于 ‘/data/clickhouse/clickhouse-server/flags/‘ 目录中。可以使用以下命令创建该文件:
touch /data/clickhouse/clickhouse-server/flags/force_drop_table

然后,再次尝试删除表或分区。请注意,在完成删除操作后,建议删除 ‘force_drop_table’ 文件,以免误删其他表或分区。

通过增加允许删除的最大表或分区大小,或者强制删除表或分区,可以解决错误码 359 相关的问题。这将有助于确保能够有效地管理 ClickHouse 中的表和分区,从而提高数据库性能和可靠性。

2.18 Code: 516

Code: 516. 
DB::Exception: Received from localhost:9000. 
DB::Exception: Received from chi-repl-05-replicated-0-0:9000. 
DB::Exception: default: Authentication failed: password is incorrect or there is no user with such name.
  • 原因:

错误码 516 对应的错误消息是 “DB::Exception: Received from localhost:9000. DB::Exception: Received from chi-repl-05-replicated-0-0:9000. DB::Exception: default: Authentication failed: password is incorrect or there is no user with such name.”。这表示尝试连接到 ClickHouse 服务器时遇到了身份验证问题。可能的原因是提供的密码不正确,或者不存在具有所提供名称的用户。

  • 解决:
  1. 检查用户名和密码:确保在尝试连接到 ClickHouse 服务器时使用了正确的用户名和密码。如果不确定用户名和密码,请查看 ClickHouse 配置文件(通常为 /etc/clickhouse-server/users.xml),在该文件中,可以找到用户的详细信息和加密后的密码。
  2. 重置用户密码:如果无法找到正确的密码,可以重置用户密码。要做到这一点,打开 ClickHouse 配置文件(通常为 /etc/clickhouse-server/users.xml),找到要重置密码的用户,并将其 <password> 标签替换为新的加密密码。要生成加密密码,可以使用 clickhouse-client 命令行工具:
clickhouse-client --password 'your_new_password'

运行此命令后,它将提示输入当前密码,然后生成加密后的新密码。将此加密密码复制并粘贴到 users.xml 文件中的相应用户的 <password> 标签中。完成更改后,请确保保存文件并重启 ClickHouse 服务器以使更改生效。

通过检查用户名和密码以及在需要时重置用户密码,可以解决错误码 516 相关的问题。这将确保能够成功连接到 ClickHouse 服务器,从而进行查询和数据操作。

2.19 Code: 1000

db::exception: no interserver io endpoint named…
# 复制副本数据时报错导致无法同步数据,直接在err.log日志文件看到的报错是:auto 
DB::StorageReplicatedMergeTree::processQueueEntry(ReplicatedMergeTreeQueue::SelectedEntryPtr)::
(anonymous class)::operator()(DB::StorageReplicatedMergeTree::LogEntryPtr &) const: Poco::
Exception. Code: 1000, e.code() = 111, Connection refused
  • 原因:

这个错误表明在 ClickHouse 分布式副本之间进行数据同步时遇到了问题。错误消息 “DB::Exception: No interserver IO endpoint named” 和 “Poco::Exception. Code: 1000, e.code() = 111, Connection refused” 表示在尝试将数据从一个副本传输到另一个副本时,连接被拒绝。

  • 解决:
  1. 检查 ClickHouse 集群中所有节点的网络连接:确保所有节点之间的网络连接正常。可以使用 ping 命令检查网络连接。
  2. 检查 ClickHouse 配置文件:确保所有节点的 ClickHouse 配置文件(通常位于 /etc/clickhouse-server/config.xml)中的 interserver_http_hostinterserver_http_port 参数正确配置。这两个参数定义了节点间数据传输所使用的地址和端口。

例如:

<!-- 在 config.xml 文件中 -->
<interserver_http_host>your_server_ip_or_hostname</interserver_http_host>
<interserver_http_port>9009</interserver_http_port>

请确保所有节点都使用相同的端口,并将 interserver_http_host 设置为每个节点的 IP 地址或主机名。完成更改后,重启 ClickHouse 服务器以使更改生效。

  1. 检查防火墙和安全组规则:确保所有节点上的防火墙和安全组规则允许节点之间的数据传输。可能需要打开 interserver_http_port(默认为 9009)之间的通信。

  2. 确保所有 ClickHouse 节点正在运行:登录到每个节点,检查 ClickHouse 服务是否正在运行。如果没有运行,需要启动 ClickHouse 服务。

通过检查网络连接、确保 ClickHouse 配置正确以及检查并更新防火墙和安全组规则,可以解决这个问题。这将有助于确保 ClickHouse 集群中的副本能够顺利同步数据,从而提高分布式查询的性能和可靠性。

2.20 Code:1002

ERROR [main] execute clickhouse Query Error
ru.yandex.clickhouse.except.ClickHouseUnknownException: 
ClickHouse exception, code: 1002, host: xxxx, port: 8123; xxxx:8123 failed to respond
  • 原因

此错误表示在尝试执行 ClickHouse 查询时遇到了问题。错误消息为 “ClickHouse exception, code: 1002, host: xxxx, port: 8123; xxxx:8123 failed to respond”。这意味着连接到 ClickHouse 服务器的过程中出现了问题,服务器没有响应。

  • 解决
  1. 检查 ClickHouse 服务器是否正在运行:确保的 ClickHouse 服务器已启动并正在运行。可以使用以下命令检查 ClickHouse 服务器的状态:
sudo systemctl status clickhouse-server

如果服务器未运行,请使用以下命令启动它:

sudo systemctl start clickhouse-server
  1. 检查网络连接:确保的客户端和 ClickHouse 服务器之间的网络连接没有问题。请检查防火墙设置以确保 8123 端口未被阻止。此外,请检查服务器的 IP 地址和端口号是否正确。

  2. 检查 ClickHouse 配置:查看 ClickHouse 配置文件(通常为 /etc/clickhouse-server/config.xml),以确保其中的设置正确。特别是,确保 <listen_host><listen_port> 设置正确。如果需要对配置文件进行任何更改,请保存更改并重新启动 ClickHouse 服务器以使更改生效。

通过检查服务器状态、网络连接以及 ClickHouse 配置,可以解决与错误码 1002 相关的问题。这将确保能够成功连接到 ClickHouse 服务器并执行查询。


文章作者: hnbian
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 hnbian !
评论
 上一篇
ARM 服务器编译部署 GreenPlum 6.9 ARM 服务器编译部署 GreenPlum 6.9
Greenplum是一款全球领先的开源大数据平台,为全球各行各业提供具备实时处理、弹性扩容、弹性计算、混合负载、云原生和集成数据分析能力的强大的大数据引擎,目前广泛的应用于包括金融、保险、证券、通信、航空、物流、零售、媒体、政府、医疗、制造
2022-02-17
下一篇 
ClickHouse 数据备份与恢复 ClickHouse 数据备份与恢复
官网:https://clickhouse.tech/docs/en/operations/backup/ 1. 手动备份与恢复数据 ClickHouse 允许使用 ALTER TABLE … FREEZE PARTITION … 查询以创
2022-01-03
  目录