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 help.

test1=> 
创建表空间2
test1=> create tablespace hr_data relative location 'tablespace2/tablespace_2';
CREATE TABLESPACE
创建数据库
test1=> create database db_hr with tablespace = hr_data encoding 'gbk';
CREATE DATABASE
test1=> 

注意事项:

本次创建的表空间为默认地址下的,一般不建议用户使用自定义的表空间。用户自定义表空间通常配合主存(即默认表空间所在的存储设备,如磁盘)以外的其它存储介质使用,以隔离不同业务可以使用的IO资源,存储设备都是采用标准化的配置,无其它可用的存储介质,自定义表空间使用不当不利于系统长稳运行以及影响整体性能,因此建议使用默认表空间即可。

relative是默认表空间
如需要其他地址,是集群的话,必须在每台机器上创建目录,并授予相应权限

4、查看表空间

登录进去
[omm@gaussdb01 tablespace_1]$ gsql -d db_hr -U lily -W'*******' -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 help.

db_hr=> select * from pg_tablespace;
查询表空间名称

在这里插入图片描述
使用元命令进行查询表空间名称

openGauss=# \db

在这里插入图片描述

5、创建表

创建schema:

db_hr=> create schema lily ;
CREATE SCHEMA

授权:

db_hr=> grant all privileges on schema lily to lily;
GRANT

创建表:

db_hr=> CREATE TABLE lily.COUNTRIES (
db_hr(>   COUNTRY_ID CHAR(2) NOT NULL ,
db_hr(>   COUNTRY_NAME VARCHAR2(40) ,
db_hr(>   REGION_ID NUMBER 
db_hr(> ) tablespace user_data;
CREATE TABLE

在这里插入图片描述
在表空间下创建表(以下方法为借鉴)
方法1:

openGauss=# create table test(id int) tablespace user_data;
CREATE TABLE

*方法2:

openGauss=# set default_tablespace = user_data;
SET
openGauss=# create table test2(id int);
CREATE TABLE
openGauss=# 

查看表:
在这里插入图片描述

查询表空间大小

openGauss=# select pg_tablespace_size('user_data');
 pg_tablespace_size 
--------------------
                 16506
(1 row)

在这里插入图片描述
插入数据:

INSERT INTO lily.COUNTRIES VALUES ('AR', 'Argentina', '2');
INSERT INTO lily.COUNTRIES VALUES ('AU', 'Australia', '3');
INSERT INTO lily.COUNTRIES VALUES ('BE', 'Belgium', '1');
INSERT INTO lily.COUNTRIES VALUES ('BR', 'Brazil', '2');
INSERT INTO lily.COUNTRIES VALUES ('CA', 'Canada', '2');
INSERT INTO lily.COUNTRIES VALUES ('CH', 'Switzerland', '1');
INSERT INTO lily.COUNTRIES VALUES ('CN', 'China', '3');
INSERT INTO lily.COUNTRIES VALUES ('DE', 'Germany', '1');
INSERT INTO lily.COUNTRIES VALUES ('DK', 'Denmark', '1');
INSERT INTO lily.COUNTRIES VALUES ('EG', 'Egypt', '4');
INSERT INTO lily.COUNTRIES VALUES ('FR', 'France', '1');
INSERT INTO lily.COUNTRIES VALUES ('IL', 'Israel', '4');
INSERT INTO lily.COUNTRIES VALUES ('IN', 'India', '3');
INSERT INTO lily.COUNTRIES VALUES ('IT', 'Italy', '1');
INSERT INTO lily.COUNTRIES VALUES ('JP', 'Japan', '3');
INSERT INTO lily.COUNTRIES VALUES ('KW', 'Kuwait', '4');
INSERT INTO lily.COUNTRIES VALUES ('ML', 'Malaysia', '3');
INSERT INTO lily.COUNTRIES VALUES ('MX', 'Mexico', '2');
INSERT INTO lily.COUNTRIES VALUES ('NG', 'Nigeria', '4');
INSERT INTO lily.COUNTRIES VALUES ('NL', 'Netherlands', '1');
INSERT INTO lily.COUNTRIES VALUES ('SG', 'Singapore', '3');
INSERT INTO lily.COUNTRIES VALUES ('UK', 'United Kingdom', '1');
INSERT INTO lily.COUNTRIES VALUES ('US', 'United States of America', '2');
INSERT INTO lily.COUNTRIES VALUES ('ZM', 'Zambia', '4');
INSERT INTO lily.COUNTRIES VALUES ('ZW', 'Zimbabwe', '4');

在这里插入图片描述
接下来就造数据就可以了,一直造造造,从别的数据库备份下来恢复的
在这里插入图片描述

然后数据库磁盘超过了50%!!!数据库变为只读模式。
在这里插入图片描述ERROR: cannot execute CREATE TABLE in a read-only transaction

在这里插入图片描述
报错内容:

db_hr=> INSERT INTO lily.COUNTRIES VALUES ('BR', 'Brazil', '2');
ERROR:  cannot execute INSERT in a read-only transaction

在这里插入图片描述

解决办法:

直接修改阈值:

gs_guc reload -Z cmserver -N all -I all -c "datastorage_threshold_value_check=95"

查看使用率:
在这里插入图片描述
集群变为正常
在这里插入图片描述
插入正常

db_hr=> select count(1) from ea_cust.fundacc_item;
  count  
---------
 7792161
(1 row)

db_hr=> INSERT INTO lily.COUNTRIES VALUES ('BR', 'Brazil', '2');
INSERT 0 1
db_hr=> 

在这里插入图片描述
实验结束。
官方给出的提示

处理办法:*
步骤 1 使用maintenance模式连接数据库,以下两种方法均可。


方式一:
gsql -d postgres -p 8000 -r -m
方式二:
gsql -d postgres -p 8000 -r

连接成功后,执行如下命令:
set xc_maintenance_mode=on;此命令不建议使用,可以跳过,最后实在不行再做这一步

步骤 2 使用DROP/TRUNCATE语句删除当前不再使用的用户表,直至磁盘空间使用率小于设定的阈值。删除大文件,基本上只需要操作这步即可,把磁盘使用率降下来,数据库自动恢复状态
删除用户表只能暂时缓解磁盘空间不足的问题,建议尽早通过扩容解决磁盘空间不足的问题。
步骤 3 使用系统用户omm设置数据库只读模式关闭。
gs_guc reload -D /gaussdb/data/dbnode -c “default_transaction_read_only=off”

猜你喜欢

转载自blog.csdn.net/m0_46400195/article/details/127996194