Postgres 12 在容器中文件损坏问题
如何把阿里云RDS的自动备份恢复到本地呢?
从阿里云上下载的自动备份文件默认情况下是tar包
hins15183099_data_20220927032925.tar
先解压一次,产生一个新文件:
hins15183099_data_20220927032925
追加扩展名为 .zip
hins15183099_data_20220927032925.zip
再解压一次,产生数据目录,会非常大,需要耐心。
如果是linux下,则直接tar命令即可:
tar -zxvf hins15183099_data_20220927032925.tar -C /YourPGdataDir
先利用docker初始化一个默认配置文件
docker run -d --name pgsql_temp postgres:9.4
docker cp pgsql_temp:/var/lib/postgresql/data/pgdata/postgresql.conf /YourPGdataDir/postgresql.conf
使用 docker 快速实践恢复
docker run -d \
-e POSTGRES_PASSWORD=YourPass \
-e PGDATA=/var/lib/postgresql/data/pgdata \
-v /YourPGdataDir:/var/lib/postgresql/data/pgdata \
-p 5432:5432 \
--privileged \
--sysctl kernel.sem="50100 128256000 50100 2560" \
postgres:9.4 bash
这时在容器的bash环境
su - postgres
/usr/lib/postgresql/9.4/bin/pg_ctl start -D "/var/lib/postgresql/data/pgdata"
可能出现的问题:
docker 启动参数 –sysctl kernel.sem=”50100 128256000 50100 2560”
It occurs when either the system limit for the maximum number of semaphore sets (SEMMNI)
尝试使用默认配置文件
Either set wal_level to “hot_standby” on the master, or turn off hot_standby here
删除 recovery.conf 文件
could not connect to the primary server socket PGSQL.XXXX
当服务器由于损坏而无法启动时,这只应该被用作最后的手段。
rm /var/lib/postgresql/data/pgdata/postmaster.pid
su - postgres
/usr/lib/postgresql/9.4/bin/pg_resetxlog -f /var/lib/postgresql/data/pgdata
Postgres 12 在测试环境的容器上容易因为POD的无故重启导致文件损坏;
日志一直出现:
the database system is starting up
解决办法:
快速进入容器,执行以下命令:
rm /var/lib/postgresql/data/postmaster.pid
su - postgres -c "/usr/lib/postgresql/12/bin/pg_resetwal -D /var/lib/postgresql/data -f"
可能会丢一些测试数据,生产数据不要虚拟化。