GaussDB-集群数据库变为只读模式ReadOnly(实验)`ERROR: cannot execute CREATE TABLE in a read-only transaction`

为了验证实验,先把集群的磁盘占用率改为50%

[omm@gaussdb01 ~]$ gs_guc reload -Z cmserver -N all -I all -c "datastorage_threshold_value_check=50"
The gs_guc run with the following arguments: [gs_guc -Z cmserver -N all -I all -c datastorage_threshold_value_check=50 reload ].
Begin to perform the total nodes: 3.
Popen count is 3, Popen success count is 3, Popen failure count is 0.
Begin to perform gs_guc for cm_servers.
Command count is 3, Command success count is 3, Command failure count is 0.

Total instances: 3. Failed instances: 0.
ALL: Success to perform gs_guc!

在这里插入图片描述
查询现在磁盘占用率

[root@gaussdb01 cm_server]# cat  /data/cluster/data/cm/cm_server/cm_server.conf | grep datastorage_threshold_value_check
datastorage_threshold_value_check = 50

在这里插入图片描述

1、查看集群状态
[omm@gaussdb01 ~]$ cm_ctl query -Cvipd
2、创建用户
新建用户
openGauss=# create user lily password 'qwe123QWE';
CREATE ROLE
给用户授权
openGauss=# grant all privileges to lily;
ALTER ROLE
给lily用户对数据库有登录权限
openGauss=# grant connect on database test1 to lily;
GRANT
2、创建表空间和数据库
使用新建用户进行数据库登录
[omm@gaussdb01 ~]$ gsql -d test1 -U lily -W'qwe123QWE' -p 30100 -r
gsql ((GaussDB Kernel V500R002C10 build 04860477) compiled at 2022-10-28 20:04:35 commit 3892 last mr 8894 release)
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for he
<think>好的,我现在需要解决用户遇到的DB::Exception: Cannot execute query in readonly mode错误。首先,我要理解这个问题出现的原因。根据引用[1],当数据库处于只读模式时,尝试执行写操作或需要修改数据的查询会导致这个错误。用户提到使用的是版本24.8.1.10500,这可能是指ClickHouse的版本。 接下来,我需要考虑可能的解决方案。首先,检查用户是否确实需要在只读模式下执行写操作,或者是否有配置错误导致数据库误入只读模式。常见的解决方法包括修改配置文件、调整用户权限或者临时启用写入权限。 然后,我需要参考现有的引用资料。引用[1]提到错误信息本身,但没有详细解决方案。引用[2]和[3]涉及其他数据库或编程错误,可能不直接相关,但可以借鉴排查思路,比如检查SQL语法或环境配置。 可能的解决步骤: 1. 检查配置文件,确认readonly设置是否为0或1。ClickHouse的readonly参数控制数据库的读写模式。设置为0允许写操作,1则只读。 2. 用户权限问题。确保当前用户拥有执行查询所需的权限,可能需要授予INSERT或ALTER权限。 3. 临时修改设置,如通过SET命令动态调整参数,但需注意这可能需要管理员权限。 4. 检查磁盘空间或文件系统权限,因为磁盘满或权限不足也可能触发只读模式。 5. 如果使用复制集群,检查副本状态是否正常,异常可能导致只读模式。 需要验证这些步骤是否适用于用户的具体版本,并注意不同版本间配置差异。同时,提醒用户在修改配置前备份数据,避免误操作引发其他问题。</think>### 逐步解决方案 针对 **DB::Exception: Cannot execute query in readonly mode** 的问题,以下是具体解决步骤: 1. **检查配置文件中的 `readonly` 参数** - 打开 ClickHouse 的配置文件 `config.xml`(通常位于 `/etc/clickhouse-server/config.xml`)。 - 查找 `<profiles>` 部分下的 `<default>` 配置,确保 `readonly` 参数值为 `0`: ```xml <default> <readonly>0</readonly> </default> ``` - 修改后重启服务:`systemctl restart clickhouse-server`[^1]。 2. **验证用户权限** - 确认当前用户是否拥有写权限。例如,使用以下 SQL 检查权限: ```sql SHOW GRANTS FOR current_user; ``` - 若需授权,可通过管理员账号执行: ```sql GRANT INSERT, ALTER ON database.* TO user_name; ``` 3. **临时调整运行模式(需管理员权限)** - 在会话中动态禁用只读模式: ```sql SET readonly = 0; ``` - 注意:此方法可能受限于配置文件中的约束。 4. **检查磁盘空间与文件系统权限** - 使用 `df -h` 确认磁盘未满。 - 检查 ClickHouse 数据目录(默认 `/var/lib/clickhouse/`)的权限: ```bash ls -ld /var/lib/clickhouse/ ``` - 确保目录所属用户/组为 `clickhouse:clickhouse`。 5. **副本状态检查(分布式集群场景)** - 若使用复制表,查询 `system.replicas` 表确认副本状态: ```sql SELECT * FROM system.replicas WHERE is_session_expired = 1; ``` - 异常副本可能需要手动修复或同步。 --- ### 关键配置说明 - **`readonly` 参数含义** - `0`:允许读写操作(默认值)。 - `1`:仅允许读操作和 DDL 查询(如 `CREATE TABLE`)。 - `2`:仅允许读操作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值