GBase 8c 学习笔记 004 —— GBase 8c gsql工具
客户端连接工具
为用户提供的连接到数据库并进行各种操作和调试的命令行工具。
GBase 8c 客户端工具是 gsql。类似于MySQL的mysql,Oracle的sqlplus。
gsql
GBase 8c 提供的命令行下运行的数据库连接工具。gsql提供连接、元命令等功能。
DBeaver
可视化调试工具
gsql使用
gsql 命令格式
gsql -d dbname -p port <-U user_name> <-h hostip>
# -d 指定要连接到的数据库名称。首次连接可以指定默认数据库 postgres。
# -p 指定端口号信息。
# -U 指定数据库用户名。缺省值为 gbase。
# -h 指定数据库节点所在服务器IP。缺省为当前服务器。
# gsql --help 查看详细参数说明。
本地连接
直接执行gsql命令
[gbase@gbase8c_5_142 ~]$ gsql -d postgres -p 5432 gsql ((multiple_nodes GBase8cV5 3.0.0B76 build 47948f99) compiled at 2023-02-27 16:04:20 commit 0 last mr 1232 ) Non-SSL connection (SSL connection is recommended when requiring high-security) Type "help" for help. postgres=#
[gbase@gbase8c_5_141 ~]$ gsql -d postgres -p 5432 failed to connect /home/gbase/gbase_db/tmp:5432.
远程连接
分别在服务器、客户端完成如下配置,然后在客户端执行 gsql 命令。
- 服务端
对于 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 = '*'"
- 客户端
- 在客户端机器上,上传客户端工具包并解压
- 拷贝数据库安装目录下的 bin 目录到客户端主机的安装目录下。
- scp -r /home/gbase/服务端安装目录/bin gbase@客户端ip:客户端安装目录
- 设置客户端环境变量: vi ~/.bashrc 。输入如下内容,并保存退出“:wq!”
- export PATH=客户端安装目录/bin:$PATH
- export LD_LIBRARY_PATH=客户端安装目录/lib:$LD_LIBRARY_PATH
- 使环境变量配置生效,source ~/.bashrc
执行SQL语句
支持交互式地键入并执行SQL语句。\help [某语法]命令查看SQL语法格式。
-- 创建数据表
postgres=# create table test(id int);
CREATE TABLE
-- 插入数据
postgres=# insert into test values(2),(23);
INSERT 0 2
-- 查询数据
postgres=# select * from test;
id
----
2
23
(2 rows)
postgres=#
变量特性
gsql 提供类似linux shell命令的变量特性。
- 设置变量:\set varname [value]
- 清除变量:\unset varname
- 显示变量值:\echo :varname
-- 设置变量
postgres-# \set vartest 2023
-- 显示变量值
postgres-# \echo :vartest
2023
-- 清除变量
postgres-# \unset vartest
-- 再次显示变量值
postgres-# \echo :vartest
:vartest
postgres-#
执行元命令
- 登录数据库后,在gsql里任何以不带引号的反斜杠(\)开头的命令。支持查看数据库对象、查询缓存区信息、连接到新数据库等操作。
- \q 退出当前数据库登录
- 命令自动补齐,支持使用Tab键进行关键字和命令的自动补齐
postgres=# \d
List of relations
Schema | Name | Type | Owner | Storage
--------+------+-------+-------+----------------------------------
public | dual | view | gbase |
public | test | table | gbase | {orientation=row,compression=no}
(2 rows)
postgres=# \dt
List of relations
Schema | Name | Type | Owner | Storage
--------+------+-------+-------+----------------------------------
public | test | table | gbase | {orientation=row,compression=no}
(1 row)
postgres=# \dv
List of relations
Schema | Name | Type | Owner | Storage
--------+------+------+-------+---------
public | dual | view | gbase |
(1 row)
postgres=# \timing on
Timing is on.
postgres=# select * from test;
id
----
2
23
(2 rows)
Time: 1.872 ms
postgres=# \timing off
Timing is off.
postgres=# select * from test;
id
----
2
23
(2 rows)
常见问题
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连接命令。
数据库内核执行初始化语句较慢导致的性能问题
- 可以尝试使用Linux的跟踪命令strace:strace gsql -U ……
- 此时便会在屏幕上打印出数据库的连接过程。
- 连接上数据库后,可以通过 explain performance select version() 语句,确定初始化语句执行较慢的原因。
- 由于数据库主节点所在机器的磁盘满或故障
- 此时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),那么说明客户端与数据库端建立物理连接过慢,此时应当检查网络是否存在不稳定、网络吞吐量太大的问题。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。