Recovering old installation.

From: Roger Wolff <rew-googlegroups(at)BitWizard(dot)nl>
To: pgsql-general(at)lists(dot)postgresql(dot)org
Subject: Recovering old installation.
Date: 2020-11-20 10:20:43
Message-ID: 20201120102042.fhhljrtiiyh5qsqo@BitWizard.nl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hi,

I have a little problem here...

I had a hardware failure. Replaced the power supply and then the
system wouldn't boot. I eventually bought a new computer, new SSD for
a root/boot disk. Did a fresh install then moved over the storage
drives and went on my merry way....

Now... it seems after an earlier migration I had fogotten to move the
postgresql backup to the new postgresql installation.

So now I have my database in version 9.5 in /oldroot/.... somewhere
and a new instance of psql (Version 12) is running in the freshly
installed instance.

My plan-of-attack is to simply chroot to /oldroot, start the old 9.5
server run a psqldump and un-dump into the new server (have to figure
out how, but should be documented)

But the problem is: how do I start the server in the old root?

All searches for "chroot postgresql" turn up people who, for security
reasons, want to run postgresql inside a chroot environment.

All searches for "start postgresql" tell me to simply type "service
postgresql start". Great on a normal system, but not here:

abra2:/etc# service postgresql start
* Starting PostgreSQL 9.5 database server * The PostgreSQL server failed to start. Please check the log output:
2020-11-20 10:54:59 CET [2080825-1] FATAL: could not open shared memory segment "/PostgreSQL.1552904327": Function not implemented
[fail]
abra2:/etc# journalctl
No journal files were found.
-- No entries --

OK. One step further. Monted (bind) /dev onto /oldroot/dev and now the
message chages to "permission denied" as opposed to "function not
implemented".

One of the things I'd like to do is to start the server manually.

In /lib/systemd/system I find postgresql(at)(dot)service that says:

# systemd service template for PostgreSQL clusters. The actual instances will
# be called "postgresql(at)version-cluster", e.g. "postgresql(at)9(dot)3-main". The
# variable %i expands to "version-cluster", %I expands to "version/cluster".
# (%I breaks for cluster names containing dashes.)

and:

ExecStart=@/usr/bin/pg_ctlcluster postgresql(at)%i --skip-systemctl-redirect %i start

So, I figured out that my cluster is called "main" and my version
is 9.5. So now I expect that commandline to expand to:

/usr/bin/pg_ctlcluster postgresql(at)9(dot)5-main --skip-systemctl-redirect 9.5-main start

And when I try that I get:
Error: specified cluster does not exist

Now that error message is less useful than it could be. I don't know
if the postgresql(at)9(dot)5-main or the 9.5-main is what it considers the
"specified cluster". Anyway, I tried a few variations but can't
get it to recognize the "specified cluster".

abra2:/lib/systemd/system# pg_lsclusters
Ver Cluster Port Status Owner Data directory Log file
9.5 main 5432 down postgres /var/lib/postgresql/9.5/main /var/log/postgresql/postgresql-9.5-main.log
abra2:/lib/systemd/system#

Simplifying the commandline to:

/usr/bin/pg_ctlcluster 9.5-main start

it seems to do something... but then again:
FATAL: could not open shared memory segment "/PostgreSQL.964036999": Permission denied

So then running strace -f to see what failed... No EPERM returns from
any system call. Sigh.

So... Any ideas for helping me get my server up-and-running for five
minutes to run a pgdump ?

Roger.

--
** R(dot)E(dot)Wolff(at)BitWizard(dot)nl ** https://www.BitWizard.nl/ ** +31-15-2049110 **
** Delftechpark 11 2628 XJ Delft, The Netherlands. KVK: 27239233 **
f equals m times a. When your f is steady, and your m is going down
your a is going up. -- Chris Hadfield about flying up the space shuttle.

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Roger Wolff 2020-11-20 10:44:25 Re: Recovering old installation.
Previous Message Paul Förster 2020-11-20 10:04:03 Re: Determine if postgresql cluster running is primary or not