您的位置:首页 > 数据库

postgres使用pg_resetxlog命令重置一个数据库集群的预写日志以及其它控制内容

2016-12-23 13:36 1706 查看
情景:

今天像平常一样连接数据库,出现了一下信息,

[postgres@cqs postgresql-9.5]$ psql

psql: could not connect to server: 拒绝连接

        Is the server running on host "127.0.0.1" and accepting

        TCP/IP connections on port 5432?

这时候再看看本地的postgres是不是没打开,此环境之前设置了开机自启动pg服务,使用命令“ps -ef | grep postgres”

[postgres@cqs postgresql-9.5]$ ps -ef | grep postgres

root      1640  1630  0 03:30 pts/0    00:00:00 su postgres

postgres  1641  1640  0 03:30 pts/0    00:00:00 bash

postgres  1725  1641  7 03:40 pts/0    00:00:00 ps -ef

postgres  1726  1641  0 03:40 pts/0    00:00:00 grep postgres

发现服务真的没启动起来。。。

启动服务,

[postgres@cqs postgresql-9.5]$ pg_ctl start

server starting

[postgres@cqs postgresql-9.5]$ LOG:  redirecting log output to logging collector process

HINT:  Future log output will appear in directory "pg_log".

一直卡在这里,这时候得看一下对应的日志档查看是不是出了问题。

对应的日志档存在pg_log中

[root@cqs pg_log]# cd /home/postgres/data/pg_log

[root@cqs pg_log]# cat postgresql-2016-12-23_035509.csv

2016-12-23 03:55:09.754 CST,,,1765,,585c2f9d.6e5,1,,2016-12-23 03:55:09 CST,,0,LOG,00000,"ending log output to stderr",,"Future log output will go to log destination ""csvlog"".",,,,,,,""

2016-12-23 03:55:09.758 CST,,,1767,,585c2f9d.6e7,1,,2016-12-23 03:55:09 CST,,0,LOG,00000,"database system shutdown was interrupted; last known up at 2016-12-23 03:40:27 CST",,,,,,,,,""

2016-12-23 03:55:09.843 CST,,,1767,,585c2f9d.6e7,2,,2016-12-23 03:55:09 CST,,0,LOG,00000,"database system was not properly shut down; automatic recovery in progress",,,,,,,,,""

2016-12-23 03:55:09.847 CST,,,1767,,585c2f9d.6e7,3,,2016-12-23 03:55:09 CST,,0,LOG,00000,"redo starts at 1/F6005B20",,,,,,,,,""

2016-12-23 03:55:09.847 CST,,,1767,,585c2f9d.6e7,4,,2016-12-23 03:55:09 CST,,0,LOG,00000,"redo done at 1/F6005C00",,,,,,,,,""

2016-12-23 03:55:09.911 CST,,,1767,,585c2f9d.6e7,5,,2016-12-23 03:55:09 CST,,0,PANIC,53100,"could not write to file ""pg_xlog/xlogtemp.1767"": No space left on device",,,,,,,,,""

2016-12-23 03:55:09.911 CST,,,1765,,585c2f9d.6e5,2,,2016-12-23 03:55:09 CST,,0,LOG,00000,"startup process (PID 1767) was terminated by signal 6: Aborted",,,,,,,,,""

2016-12-23 03:55:09.911 CST,,,1765,,585c2f9d.6e5,3,,2016-12-23 03:55:09 CST,,0,LOG,00000,"aborting startup due to startup process failure",,,,,,,,,""

log提示数据库系统关闭时收到干扰,主要原因应该是由于数据库日志档出现问题了。

翻了好多资料,抱着试一试尝试了pg_resetxlog

pg_resetxlog相关用法
名称
pg_resetxlog -- 重置一个数据库集群的预写日志以及其它控制内容
语法
pg_resetxlog [-f] [-n] [-ooid ] [-x xid ] [-e xid_epoch ] [-m mxid ] [-O mxoff ] [-l timelineid, fileid, seg ] datadir
描述
pg_resetxlog 清理预写日志(WAL)并且可以有选择地重置其它一些存储在 pg_control 文件中的控制信息。有时候,如果这些文件崩溃了,就需要这个功能。一定只把它用作最后的方法,就是说只有因为这样的崩溃导致服务器无法启动的时候才使用。

[postgres@cqs bin]$ pg_resetxlog /home/postgres/data/

The database server was not shut down cleanly.

Resetting the transaction log might cause data to be lost.

If you want to proceed anyway, use -f to force reset.

[postgres@cqs bin]$ pg_resetxlog -f /home/postgres/data/

Transaction log reset

好了,完成清理预写日志命令,启动pg数据库服务器

[postgres@cqs bin]$ pg_ctl start

server starting

[postgres@cqs bin]$ LOG:  redirecting log output to logging collector process

HINT:  Future log output will appear in directory "pg_log".

[root@cqs pg_log]# ps -ef | grep postgres

root      1640  1630  0 03:30 pts/0    00:00:00 su postgres

postgres  1641  1640  0 03:30 pts/0    00:00:00 bash

postgres  1805     1  0 04:46 pts/0    00:00:00 /usr/local/postgresql-9.5/bin/postgres

postgres  1806  1805  0 04:46 ?        00:00:00 postgres: logger process              

postgres  1808  1805  0 04:46 ?        00:00:00 postgres: checkpointer process        

postgres  1809  1805  0 04:46 ?        00:00:00 postgres: writer process              

postgres  1810  1805  0 04:46 ?        00:00:00 postgres: wal writer process          

postgres  1811  1805  0 04:46 ?        00:00:00 postgres: autovacuum launcher process   

postgres  1812  1805  0 04:46 ?        00:00:00 postgres: archiver process   failed on 000000010000000000000002.00000028.backup

postgres  1813  1805  0 04:46 ?        00:00:00 postgres: stats collector process     

postgres  1819  1641  0 04:47 pts/0    00:00:00 psql

postgres  1820  1805  0 04:47 ?        00:00:00 postgres: postgres postgres 127.0.0.1(33254) idle

root      1952  1666  0 05:15 pts/1    00:00:00 grep postgres

这时候相关的postgres服务正常启动了,连接数据库

[postgres@cqs bin]$ psql

psql (9.5alpha2)

Type "help" for help.

postgres=# 

postgres=# 

成功连上数据库,又可以愉快地操作对应的数据库了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐