数据库运维
记录DBA学习成长历程

第3章:GBase 8c gsql工具

文章目录

1 课程目标

• 掌握gsql连接数据库和常用元命令的用法
• 熟悉gsql的变量特性
• 自行排查并简单定位常见连接故障、连接性能等常见的gsql问题
• 备注:课程功能分布式和单机都适用

2 gsql使用

—2.1 客户端连接工具

为用户提供的连接到数据库并进行各种操作和调试的命令行工具。
GBase 8c 客户端工具是 gsql。类似于MySQL的mysql,Oracle的sqlplus。
GBase 8c 提供的命令行下运行的数据库连接工具。gsql提供连接、元命令等功能。
可视化调试工具 DBeaver

—2.2 gsql 命令格式

gsql -d dbname -p port <-U user_name> <-h hostip>
-d 指定要连接到的数据库名称。首次连接可以指定默认数据库 postgres。 
-p 指定端口号信息。
-U 指定数据库用户名。缺省值为 gbase。
-h 指定数据库节点所在服务器IP。缺省为当前服务器。
gsql --help 查看详细参数说明。

—2.3 本地连接

直接执行gsql命令,返回如下信息:
gsql -d postgres -p 5432 <-U gbase><-h localhost>
--连接成功后显示版本信息、连接数据库名

—2.4 远程连接

分别在服务器、客户端完成如下配置,然后在客户端执行 gsql 命令。

——2.4.1 服务端

对于 GBase 8c 分布式集群,需在读写 CN 上以 gbase 用户执行如下命令:
gs_guc reload -Z coordinator -N all -I all -h "host all all 0.0.0.0/0 sha256" 
gs_guc reload -Z coordinator -N all -I all -c "password_encryption_type=1" 
gs_guc reload -Z coordinator -N all -I all -c "listen_addresses = '*'"

——2.4.2 客户端

(1)在客户端机器上,上传客户端工具包并解压
(2)拷贝数据库安装目录下的 bin 目录到客户端主机的安装目录下。
     scp -r /home/gbase/服务端安装目录/bin gbase@客户端ip:客户端安装目录
(3)设置客户端环境变量: vi ~/.bashrc 。输入如下内容,并保存退出“:wq!”
     export PATH=客户端安装目录/bin:$PATH
     export LD_LIBRARY_PATH=客户端安装目录/lib:$LD_LIBRARY_PATH 
     使环境变量配置生效:source ~/.bashrc

—2.5 执行SQL语句

支持交互式地键入并执行SQL语句。
\help [某语法]命令查看SQL语法格式。
--例如创建数据表test。输入cre之后按下tab键,展示自动补齐功能
create table test (id int);
--插入数据
insert into test values(2),(23);
--查询表数据。输入select * from后按下tab键,展示自动补齐。
select * from test;

—2.6 变量特性

gsql 提供类似linux shell命令的变量特性。
设置变量:\set varname [value]
清除变量:\unset varname
显示变量值:\echo :varname

--设置变量
\set vartest 20
--显示变量值
\echo :vartest
--清除变量
\unset vartest
--再次执行\echo,不再显示变量值
\echo :vartest

—2.7 执行元命令

登录数据库后,在gsql里任何以不带引号的反斜杠(\)开头的命令。支持查看数据库对象、查询缓存区信息、连接到新数据库等操作。
\dt --快速查看数据库信息
create user test password "Gbase,12"; \c postgres test;  --以其他用户登录postgres数据库
\timing on  --显示执行时间
\timing off --关闭显示执行时间

—2.8 命令自动补齐

支持使用 Tab 键进行关键字和命令的自动补齐。

3 常见连接故障问题

① gsql: could not connect to server: No route to host
一般是指定了不可达的地址或者端口导致的。检查-h参数与-p参数是否添加正确。

② gsql: FATAL: Invalid username/password,login denied.
由用户名和密码错误导致,请检查是否正确。

③ gsql: FATAL: permission denied for database "postgres" DETAIL: User does not
have CONNECT privilege.
该用户不具备访问该数据库的权限。使用管理员用户 gbase连接,或赋予该用户访问数据库的权限: GRANT CONNECT ON DATABASE dbname TO user_name;

④ 在客户端远程连接数据库失败

分别在服务端和客户端完成配置,再执行gsql连接命令。

4 常见连接性能问题

① 数据库内核执行初始化语句较慢导致的性能问题

解决方法
• 可以尝试使用Linux的跟踪命令strace:strace gsql -U ……
此时便会在屏幕上打印出数据库的连接过程。

• 连接上数据库后,可以通过 explain performance select version() 语句
确定初始化语句执行较慢的原因。详见《GBase 8c V5_3.0.0_开发者手册》SQL执行计划介绍。

• 由于数据库主节点所在机器的磁盘满或故障
此时SQL语句受影响,无法进行用户认证,导致连接过程挂起,表现为假死。清理数据库主节点的数据盘空间便可。

② TCP连接创建较慢问题

解决方法:
同样可以尝试使用Linux的跟踪命令strace
例如,如果长时间停留在:connect(3, {sa_family=AF_INET, sin_port=htons(61052), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EINPROGRESS (Operation now in progress), 那么说明客户端与数据库端建立物理连接过慢,此时应当检查网络是否存在不稳定、网络吞吐量 太大的问题。

赞(1)
MySQL学习笔记 » 第3章:GBase 8c gsql工具