FATAL: the database system is starting up

详细的报错信息如下:

LOG:  database system is ready to accept connections
LOG:  database system was interrupted;
LOG:  database system was not properly shut down; automatic recovery in progress
LOG:  invalid record length at 0/2EA3830: wanted 24, got 0
LOG:  redo is not required
LOG:  MultiXact member wraparound protections are now enabled
LOG:  database system is ready to accept connections
LOG:  autovacuum launcher started
LOG:  database system was interrupted; last known up at 2017-03-02 00:32:34 UTC
LOG:  received smart shutdown request

因为项目集成了docker,docker里又有postgresql数据库,所以在调试程序的时候,经常会有重启项目的时候(一般修改代码,会自动重启服务的,特殊情况除外),因为是刚结束服务,有立马启动服务,所以会经常启动不了,报错如上。

网上也查了一下,最后确定问题的原因:
postgresql数据库里有一个文件“postmaster.pid”,它是记录postgresql启动时的pid信息的,理论上在停止服务的时候,此文件会被删除掉的,但由于我操作频繁,导致它还没有被删除,在启动postgresql服务的时候,postgresql查询到pid文件的存在,以为服务已经启动起来了,为了不重新加载就不再启动服务了…
所以就直接 把那个pid文件删除掉…之后再启动服务,果然就正常咯

sorry, 我又反复测试了几次后还是有问题的,我出现这个问题是因为项目里使用的docker,在启动项目是,数据库的服务有可能还没有启动,这个时候项目的服务就要去访问数据库,导致无法连接(我目前猜测的最有可能的原因),所以呢,我现在的处理是,先后台启动数据库服务,然后,在启动项目,这样就没有问题了

# 以下 "ss" 代表项目名称
# 后台启动所有服务
docker-compose up -d

# 查看服务运行情况
docker-compose ps
ss_celery_1   bash -c celery worker -A S ...   Up                             
ss_db_1       /docker-entrypoint.sh postgres   Up      5432/tcp               
ss_redis_1    docker-entrypoint.sh redis ...   Up      6379/tcp               
ss_ss_1    bash -c python manage.py m ...   Exit      0.0.0.0:8501->8501/tcp 

# 这是可以看到 项目的服务 ss_ss_1 并没有启动起来,那么单独启动项目服务
docker-compose start ss

# 再查看各个服务情况
ss_celery_1   bash -c celery worker -A S ...   Up                             
ss_db_1       /docker-entrypoint.sh postgres   Up      5432/tcp               
ss_redis_1    docker-entrypoint.sh redis ...   Up      6379/tcp               
ss_ss_1    bash -c python manage.py m ...   Up      0.0.0.0:8501->8501/tcp

# 已经全起来了,查看项目的实时日志
docker-compose logs -f ss

所以,这个问题的解决 就是先启动数据库服务,然后在启动项目,这时就可以连接数据库了,问题分解来搞,就解决了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值