Centos Postgres 启动失败

Centos Postgres 启动失败

我的服务器上安装了 CentOs 6.7:

bash-4.1# uname -r
2.6.32-573.18.1.el6.x86_64

服务器重启后,我的 PostgreSQL 9.6 服务器由于区域设置问题而无法启动。

这是日志错误消息:pgstartup.log

< 2017-01-26 16:33:08.115 IST > LOG:  invalid value for parameter "lc_messages": "en_US.UTF-8"
< 2017-01-26 16:33:08.123 IST > LOG:  invalid value for parameter "lc_monetary": "en_US.UTF-8"
< 2017-01-26 16:33:08.123 IST > LOG:  invalid value for parameter "lc_numeric": "en_US.UTF-8"
< 2017-01-26 16:33:08.123 IST > LOG:  invalid value for parameter "lc_time": "en_US.UTF-8"
< 2017-01-26 16:33:08.123 IST > FATAL:  configuration file "/var/lib/pgsql/9.6/data/postgresql.conf" contains errors

系统要求语言环境“en_US.UTF-8”可用。我已检查,确实可用。

bash-4.1# locale -a | grep en_US
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_COLLATE to default locale: No such file or directory
en_US
en_US.UTF-8
en_US.iso88591
en_US.iso885915
en_US.utf8

因此,我从 postgresql.conf 文件中注释了以下几行:

#lc_messages = 'en_US.UTF-8'                    # locale for system error message
                                        # strings
#lc_monetary = 'en_US.UTF-8'                    # locale for monetary formatting
#lc_numeric = 'en_US.UTF-8'                     # locale for number formatting
#lc_time = 'en_US.UTF-8'                                # locale for time formatting

按照上述方法注释掉几行之后,服务器开始启动,但是无法登录到服务器,并且出现以下错误:

bash-4.1$ psql
psql: FATAL:  database locale is incompatible with operating system
DETAIL:  The database was initialized with LC_COLLATE "en_US.UTF-8",  which is not recognized by setlocale().
HINT:  Recreate the database with another locale or install the missing locale.

现在我在系统中有了 postgres 所需的区域设置,但问题也出现了。不知道问题到底出在哪里。

注意:此问题在服务器重启后产生。

答案1

我已经找到解决这个问题的方法。

实际上,locale 是由 Glibc 库提供的。在服务器中,Glibc 版本是 2.12。

由于某种原因,我们需要 2.14 版本,但无法通过 yum 将 2.12 升级到 2.14,因为 yum 说的是最新版本。

因此我们手动编译了 2.14 源代码并创建了二进制文件。

并将 2.12 的链接更改为 2.14,从而造成了混乱。

解决方案:将符号链接恢复为原始 2.12 版本。

寓意:永远不要弄乱 glibc,不要通过将符号链接指向不同的版本来这样做。

相关内容