2.2.?启动数据库服务器

2.2.1. 启动方法
2.2.2. 服务器启动失败
2.2.3. 客户端连接问题

2.2.1.?启动方法

在访问数据库前,必须先启动数据库服务器。数据库服务器程序名称为uxdb,它是通过-D选项来实现对目标数据的查找。因此,启动服务器最简单的方法是:

uxdb$ ./uxdb -D uxdb (本地集群)
uxdb$ ./uxdb -Z -D uxdb (分布式集群)

这样将把服务器放在前台运行。这个步骤同样必须以UXDB用户登录来做。没有-D选项,服务器将使用环境变量UXDATA命名的目录;如果这个环境变量也没有,将导致失败。

通常,最好在后台启动uxdb,使用下面的Unix shell语法:

uxdb$ ./uxdb -D uxdb >logfile 2>&1 &  (本地集群)
uxdb$ ./uxdb -Z -D uxdb >logfile 2>&1 &  (分布式集群)

把服务器的stdout和stderr输出存储到某个地方是非常重要的。这样可以帮助审计,并且可以诊断问题(更深入的有关日志文件处理的讨论请见(第?8.3?节)。

uxdb还接受其它一些命令行选项。更多的信息请见第?3?章

这些shell语法很繁琐,因此澳门游戏平台注册网站提供封装程序ux_ctl来简化一些任务。例如:

uxdb$ ./ux_ctl start -D uxdb -l logfile (本地集群)
uxdb$ ./ux_ctl start -Z -D uxdb -l logfile (分布式集群)

将在后台启动服务器并且把输出放到指定的日志文件中。-D选项和uxdb中的一样。ux_ctl还可以用于停止服务器。

2.2.2.?服务器启动失败

通过检查服务器日志或者使用手动启动的方法(不做标准输出或标准错误的重定向),可以看到几个会导致服务器启动失败的常见错误消息。

LOG:  could not bind IPv4 address "127.0.0.1": Address already in use
HINT:  Is another uxmaster already running on port 5432? If not, wait a few seconds and retry.
FATAL:  could not create any TCP/IP sockets

提示:在已经存在的一个服务器运行着的端口上再运行一个服务器。如果内核的错误消息不是Address already in use,可能是别的问题。例如,在一个保留的端口上运行服务器会收到如下信息:

$ uxdb -p 666
LOG:  could not bind IPv4 address "127.0.0.1": Permission denied
HINT:  Is another uxmaster already running on port 666? If not, wait a few seconds and retry.
FATAL:  could not create any TCP/IP sockets

例如:

FATAL:  could not create shared memory segment: Invalid argument
DETAIL:  Failed system call was shmget(key=5440001, size=4011376640, 03600).

可能表示内核对共享内存区的限制小于UXDB尝试分配的缓冲区大小(本例中是4011376640字节)。或者可能表示内核没有配置System-V风格的共享内存。一个临时的解决办法,可以试着以小于正常数量的缓冲区数(shared_buffers)启动服务器。最终还是会重新配置内核,以增加共享内存的尺寸。如果尝试在同一台机器上启动多个服务器,而且它们所需的总空间超过内核的限制,也会报这个错。

例如:

FATAL:  could not create semaphores: No space left on device
DETAIL:  Failed system call was semget(5440126, 17, 03600).

表示磁盘空间被用光,是指内核System V信号量的限制小于UXDB想创建的数量。和上面一样,可以通过减少允许的连接数(max_connections)来避免,但最好的办法是修改内核的限制。

如果收到一个illegal system call错误,有可能是内核根本不支持共享内存或者信号量。如果是这样,应该重新配置内核并把共享内存或者信号量打开。

关于配置System V IPC功能的细节请见第?2.3.1?节

2.2.3.?客户端连接问题

客户端可能会出现多种与应用相关的错误,但有几种错误与服务器的启动方式直接相关。

uxsql: could not connect to server: Connection refused
        Is the server running on host "server.joe.com" and accepting
        TCP/IP connections on port 5432?

这是常见的连接被拒绝,请检查服务器是否启动,是否可以远程连接,或者端口号是否为正确失败。上面的情况看起来是发生在尝试TCP/IP通信时。常见的错误是忘记把服务器配置成允许 TCP/IP 连接。

另外,当试图通过Unix域套接字与本地服务器通信时,会出现:

uxsql: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/tmp/.s.UXSQL.5432"?

最后一行验证客户端连接的端口是否正确。如果实际上没有服务器在那里运行,典型的错误有:Connection refused或者No such file or directory,都会出现连接失败。在这些情况中,要注意的是Connection refused是一开始就连接失败,并非先连接上,然后断开并拒绝连接的。那种情况会产生一个不同的消息,如第?4.4?节中所示)。如果连接失败并打印Connection timed out,则是一些比较基本的错误,如网络不通等。

XML 地图 | Sitemap 地图