更新时间:2025-06-10 GMT+08:00

配置ClickHouse表为只读表模式

操作场景

在数据迁移、一键均衡和退服缩容等操作中,确保表处于只读状态是非常重要的,以防止意外的写操作。ClickHouse提供了only_allow_select_statement 表级参数,可以对MergeTree系列表引擎配置该参数,以限制ALTER、RENAME、DROP和INSERT操作,仅允许SELECT操作。

约束与限制

本章节仅适用于MRS 3.2.0-LTS及之后版本。

设置表只读模式

  1. 安装客户端,具体请参考安装MRS客户端章节。
  2. 使用root用户登录安装客户端的节点,执行以下命令:

    进入客户端安装目录:

    cd 客户端安装目录

    配置环境变量:

    source bigdata_env

  3. 如果当前集群为安全模式(开启Kerberos认证),执行以下命令认证当前用户,如果当前集群为普通模式(关闭Kerberos认证),则无需执行本步骤。

    kinit 组件业务用户

    该用户需要具有ClickHouse管理员权限。

  4. 执行ClickHouse组件的客户端命令连接服务端。

    • 普通模式:
      clickhouse client --host ClickHouse的实例IP --user 用户名 --password --port 9440 --secure
      输入用户密码
    • 安全模式:
      clickhouse client --host ClickHouse的实例IP --port 9440 --secure
    • MRS 3.2.0-LTS及之前版本:普通模式的用户为默认的default用户,或者使用ClickHouse社区开源能力添加管理用户。不能使用在FusionInsight Manager页面创建的用户。
    • MRS 3.3.0-LTS及之后版本:普通模式可以使用在FusionInsight Manager页面创建的用户。
    • ClickHouse的实例IP地址可登录集群FusionInsight Manager,然后选择“集群 > 服务 > ClickHouse > 实例”,获取ClickHouseServer实例对应的业务IP地址。

  5. 执行如下语句,设置表为只读模式:

    ALTER TABLE {table_name} MODIFY SETTING only_allow_select_statement = true;

解除表只读模式

  1. 参考24登录ClickHouse客户端。
  2. 执行如下语句,解除表只读模式:

    ALTER TABLE {table_name} MODIFY SETTING only_allow_select_statement = false settings hw_internal_operation = true;