gaussdb
背景信息
gaussdb是openGauss数据库的主进程,也是一个可执行的命令,能够通过其启动一个数据库进程。
语法
gaussdb [OPTION]...
描述
客户端应用程序为了访问数据库,将连接(通过网络或本地)到一个正在运行的gaussdb进程。然后该进程实例会启动一个独立的线程来处理这个连接。
须知:
通过gaussdb启动数据库时,需要再开一个窗口来连接到数据库,也可以使用&符号使程序在后台执行。
一个gaussdb进程总是管理来自同一个数据库的数据。一个系统上可以同时运行多个gaussdb进程,只要使用不同的数据目录和不同的端口号。gaussdb启动时需要知道数据目录的位置,该位置必须通过-D指定。通常,-D直接指向由gs_initdb创建的数据库目录。
缺省时gaussdb在前台启动并将日志信息输出到标准错误。但在实际应用中,gaussdb应当作为后台进程启动,而且多数是在系统启动时自动启动。
gaussdb还能以单用户模式运行,这种用法主要用于gs_initdb的初始化过程中,有时候也被用于调试灾难性恢复。不过,单用户模式运行的服务器并不适合于调试,因为没有实际的进程间通讯和锁动作发生。当从shell上以单用户模式调用时,用户可以输入查询,然后结果会在屏幕上以一种更适合开发者阅读(不适合普通用户)的格式显示出来。在单用户模式下,将把会话用户ID设为1并赋予系统管理员权限。该用户不必实际存在,因此单用户模式运行的服务器可以用于对某些意外损坏的系统表进行手工恢复。
选项
gaussdb接受表1中所示的命令行参数。
表 1 参数说明
设置服务器接受的客户端连接的最大数。缺省时由gs_initdb自动选择。声明这个选项等价于声明max_connections配置参数。 | ||
| ||
指定gaussdb侦听客户端连接的TCP/IP端口或本地Unix domain socket文件的扩展。默认端口号为5432。 | ||
表2中的参数主要是便于开发人员调试使用,有时也用于帮助恢复严重损坏的数据库。在应用程序使用数据库提供服务时,请不要使用这些参数进行调试。
表 2 开发者选项
下面的选项表3仅在单用户模式下可用。
表 3 单用户模式选项
表 4 自启动模式选项
启动自启动模式。必须是命令行中的第一个选项。该参数是对数据库中的参数变量及相关配置初始化,常用在数据库安装的流程中,直接使用该参数,无明显行为感知。 | ||
指定一个新的服务器线程的类型。在初始化数据库时,会用到自启动模式,通过设置这个参数,启动不同线程来执行一些逻辑,正常情况下,不会用到,因为自启动模式很少会用到。 |
表 5 升级模式选项
除以上参数外,出现在postgres.conf中的所有参数,均可以用–guc_name=guc_value的方式在gaussdb启动时传给gaussdb。例如,–enable_fast_query_shipping=off
环境变量
- PGLINETENCODING:客户端使用的缺省字符编码。客户端可以独立地覆盖它。这个值也可以在配置文件里设置。
- PGDATESTYLE:运行时参数DateStyle的缺省值。现在反对使用该环境变量。
- TZ:服务器的时区。
错误处理
一个提到了semget或shmget的错误信息可能意味着需要重新配置内核,提供足够的共享内存和信号灯。可以通过降低shared_buffers值以减少openGauss的共享内存的消耗,或者降低max_connections值减少openGauss的信号灯的消耗。
如果发现类似“另外一个服务器正在运行”的错误信息,可以根据系统使用不同的命令:
ps ax | grep gaussdb
或
ps -ef | grep gaussdb
如果确信没有冲突的服务器正在运行,可以删除消息里提到的锁文件然后再次运行。
无法绑定端口的错误信息可能表明该端口已经被其他非openGauss进程使用。如果终止gaussdb后又马上用同一端口号运行它,也可能得到错误信息。这时,必须多等几秒,等操作系统关闭了该端口再试。最后,如果使用了一个操作系统认为是保留的端口,也可能导致这个错误信息。例如:Unix版本认为低于1024的端口号是“可信任的”,因而只有Unix系统管理员可以使用它们。
须知:
- 如果有可能,不要使用SIGKILL杀死主进程。这样会阻止gaussdb在退出前释放它持有的系统资源(例如共享内存和信号灯)。这样可能会影响到将来启动新的进程。
- 可以使用SIGTERM,SIGINT,SIGQUIT信号正常结束服务器进程。第一个信号将等待所有的客户端退出后才退出。第二个将强制断开所有客户端,而第三个将不停止立刻退出,导致在重启时的恢复运行。
- 信号SIGHUP将会重新加载服务器配置文件。它也可能给单个服务器进程发送SIGHUP信号,但是这通常是不明显的。
- 要取消一个正在执行的查询,向正在运行的进程发送SIGINT信号。
- 主服务器进程向子进程发送SIGTERM信号让它们正常退出;发送SIGQUIT信号立即退出且不做清理工作。用户有三种信号不能用。同时,发送SIGKILL信号也是不明智的:主进程将把这个信号当作崩溃信号,然后会强制其他兄弟进程作为标准的崩溃回复过程退出。
用法
启动一个单用户模式的服务器:
gaussdb --single -D /usr/local/pgsql/data other-options my_database
用-D给服务器提供正确的数据库目录的路径。同时还要声名已存在的特定数据库名称。
须知:
- 通常,独立运行的服务器把换行符当做命令输入完成字符;要想把一行分成多行写,必需在除最后一个换行符以外的每个换行符前面敲一个反斜杠。
- 如果使用了-j命令行选项,新行将不被当作命令结束符。此时服务器将从标准输入一直读取到EOF标志为止,然后把所有读到的内容当作一个完整的命令字符串看待,并且反斜杠与换行符也被当作普通字符来看待。
- 输入EOF(Control+D)即可退出会话。如果已经使用了-j则必须连续使用两个EOF才行。
- 单用户模式运行的服务器不会提供复杂的行编辑功能(比如没有命令历史)。单用户模式也不会做任何后台处理,像自动检查点。
示例
用缺省值在后台启动gaussdb:
nohup gaussdb >logfile 2>&1 </dev/null &
在指定端口启动gaussdb,如1234:
gaussdb --singlenode -p -D data_dir
使用gsql与服务器连接,用-p指定端口号:
gsql -d postgres -p 1234