Обсуждение: How to move a 11.4 cluster to another Linux host, but empty?
Hello,
I've a 11.4 cluster on a Linux host with 3 production database, all
below /data/postgresql11.4/ (i.e. the cluster itself is
/data/postgresql11.4/data) fully configured an running fine. I want to
move it "cold" (i.e. when it is shutdown) by tar to another host, BUT
without the database (due to PII and GDPR relevant data). Between the
source and target host there is no network.
Of course I could, after moving all the PostgreSQL software (all is below a top
level directory /usr/local/sisis-pap/pgsql, compiled by me) and setup the
cluster from scratch on the other host, but I wanted to have it all in one shoot by tar.
Is there a way to exclude the databases from the move by tar, or by some
sophisticated pg_* command?
Thanks
matthias
--
Matthias Apitz, ✉ guru@unixarea.de, http://www.unixarea.de/ +49-176-38902045
Public GnuPG key: http://www.unixarea.de/key.pub
Hi Matthias, > On 01. May, 2020, at 10:10, Matthias Apitz <guru@unixarea.de> wrote: > > > Hello, > > I've a 11.4 cluster on a Linux host with 3 production database, all > below /data/postgresql11.4/ (i.e. the cluster itself is > /data/postgresql11.4/data) fully configured an running fine. I want to > move it "cold" (i.e. when it is shutdown) by tar to another host, BUT > without the database (due to PII and GDPR relevant data). Between the > source and target host there is no network. > > Of course I could, after moving all the PostgreSQL software (all is below a top > level directory /usr/local/sisis-pap/pgsql, compiled by me) and setup the > cluster from scratch on the other host, but I wanted to have it all in one shoot by tar. > > Is there a way to exclude the databases from the move by tar, or by some > sophisticated pg_* command? > > Thanks > > matthias you may have a look at the tar man page. tar in Linux has the --exclude=PATTERN option. You may specify the PGDATA directorythere. Alternatively you may specify each directory inside the software directory without explicitly specifying subdirectories toinclude: tar cvf postgresql11.4.tar /data/postgresql11.4/bin /data/postgresql11.4/share ... Also, why do you have the PGDATA directory inside the software home directory? That makes no sense and only leads to problemswhen updating or, in your case, moving. We use: /data/postgres/xx.x <= with xx.x as PostgreSQL version /data/<some-prefix>/<cluster_name> <= as PGDATA This way, we never have any trouble doing something with the software or database cluster independently from each other. Hope, this helps. Cheers, Paul
Hi Paul,
El día viernes, mayo 01, 2020 a las 10:23:37a. m. +0200, Paul Förster escribió:
>
> you may have a look at the tar man page. tar in Linux has the --exclude=PATTERN option.
I do know the man page(s) of tar ant the --exclude=PATTERN.
> You may specify the PGDATA directory there.
This is, what I wanted to know: that the cluster can be moved without
the PGDATA dir and still works fine.
> Also, why do you have the PGDATA directory inside the software home directory? That makes no sense and only leads to
problemswhen updating or, in your case, moving.
>
I don't. The software is below
/usr/local/sisis-pap/pgsql
and the cluster is below
/data/postgres11.4/data.
Thanks
matthias
--
Matthias Apitz, ✉ guru@unixarea.de, http://www.unixarea.de/ +49-176-38902045
Public GnuPG key: http://www.unixarea.de/key.pub
Hi Matthias, > On 01. May, 2020, at 10:31, Matthias Apitz <guru@unixarea.de> wrote: > > I don't. The software is below > > /usr/local/sisis-pap/pgsql > > and the cluster is below > > /data/postgres11.4/data. in this case, all you'd have to do is: tar cvf software.tar /usr/local/sisis-pap/pgsql to only copy the software. You don't even need to stop the database cluster for this because nothing is ever changed insidethe software tree by a running database cluster. Changes are only done in PGDATA. Cheers, Paul
El día viernes, mayo 01, 2020 a las 10:31:48a. m. +0200, Matthias Apitz escribió:
> Hi Paul,
>
> El día viernes, mayo 01, 2020 a las 10:23:37a. m. +0200, Paul Förster escribió:
>
> >
> > you may have a look at the tar man page. tar in Linux has the --exclude=PATTERN option.
>
> I do know the man page(s) of tar ant the --exclude=PATTERN.
>
> > You may specify the PGDATA directory there.
>
> This is, what I wanted to know: that the cluster can be moved without
> the PGDATA dir and still works fine.
>
This will not work! The cluster was created with:
$ /usr/local/sisis-pap/pgsql/bin/pg_ctl -D /data/prosgresql11/data initdb
and consequently, PGDATA is /data/prosgresql11/data. This directory contains a
lot of subirs and config files:
srap32dxr1:/home/sisis/guru # du -s /data/postgresql11/data/* | sort -n
4 /data/postgresql11/data/PG_VERSION
4 /data/postgresql11/data/pg_commit_ts
4 /data/postgresql11/data/pg_dynshmem
4 /data/postgresql11/data/pg_ident.conf
4 /data/postgresql11/data/pg_replslot
4 /data/postgresql11/data/pg_serial
4 /data/postgresql11/data/pg_snapshots
4 /data/postgresql11/data/pg_stat
4 /data/postgresql11/data/pg_tblspc
4 /data/postgresql11/data/pg_twophase
4 /data/postgresql11/data/postgresql.auto.conf
4 /data/postgresql11/data/postmaster.opts
4 /data/postgresql11/data/postmaster.pid
8 /data/postgresql11/data/pg_hba.conf
12 /data/postgresql11/data/pg_notify
16 /data/postgresql11/data/pg_logical
24 /data/postgresql11/data/postgresql.conf
28 /data/postgresql11/data/pg_multixact
196 /data/postgresql11/data/pg_subtrans
732 /data/postgresql11/data/pg_stat_tmp
940 /data/postgresql11/data/global
1328 /data/postgresql11/data/pg_xact
76076 /data/postgresql11/data/serverlog.20200414
81988 /data/postgresql11/data/pg_wal
90268 /data/postgresql11/data/serverlog
16672568 /data/postgresql11/data/base
The databases (or it least their content) are below /data/postgresql11/data/base
(because of the size of ~81 GByte).
So the question remains: What I have to move by tar to get the cluster
setup on the new host, but without the databases in it?
If this is not possible, I will only copy over the software from /usr/local/sisis-pap/pgsql/
and create the cluster from scratch.
Thanks
matthias
--
Matthias Apitz, ✉ guru@unixarea.de, http://www.unixarea.de/ +49-176-38902045
Public GnuPG key: http://www.unixarea.de/key.pub
Hi Matthias, > On 02. May, 2020, at 12:23, Matthias Apitz <guru@unixarea.de> wrote: > $ /usr/local/sisis-pap/pgsql/bin/pg_ctl -D /data/prosgresql11/data initdb I don't get it. Is the setup now as follows /data/postgresql11 <= software with bin, lib64, share, etc... /data/postgresql11/data <= PGDATA or /usr/local/sisis-pap/pgsql <= software with bin, lib64, share, etc... /data/postgresql11/data <= PGDATA ? In the first case, your tar command would be: tar cvf /tmp/postgresql11.tar --exclude=/data/postgresql11/data /data/postgresql11 Note that the --exclude option must appear BEFORE the directory tree to archive in the command line! => man tar In the second case, your tar command would be: tar cvf /tmp/postgresql11.tar /usr/local/sisis-pap/pgsql to package the software only without the database. Cheers, Paul
El día sábado, mayo 02, 2020 a las 03:23:52p. m. +0200, Paul Förster escribió:
> /usr/local/sisis-pap/pgsql <= software with bin, lib64, share, etc...
> /data/postgresql11/data <= PGDATA
Exactly, his is the setup above.
I will move /usr/local/sisis-pap/pgsql by tar; and I want to move some parts(!)
of the cluster /data/postgresql11/data (configuration etc.), but not the databases
included in /data/postgresql11/data, like the cluster(!) in PGDATA was before having
created any database(!) in it.
As I said from the beginning: moving the cluster but without the
databases in it.
Thanks
matthias
--
Matthias Apitz, ✉ guru@unixarea.de, http://www.unixarea.de/ +49-176-38902045
Public GnuPG key: http://www.unixarea.de/key.pub
Hi Matthias, > On 02. May, 2020, at 16:30, Matthias Apitz <guru@unixarea.de> wrote: > > El día sábado, mayo 02, 2020 a las 03:23:52p. m. +0200, Paul Förster escribió: > >> /usr/local/sisis-pap/pgsql <= software with bin, lib64, share, etc... >> /data/postgresql11/data <= PGDATA > > Exactly, his is the setup above. > > I will move /usr/local/sisis-pap/pgsql by tar; and I want to move some parts(!) > of the cluster /data/postgresql11/data (configuration etc.), but not the databases > included in /data/postgresql11/data, like the cluster(!) in PGDATA was before having > created any database(!) in it. > > As I said from the beginning: moving the cluster but without the > databases in it. you don't want to move the database cluster in this case! Add the database cluster's config files postgresql.conf, pg_hba.conf, pg_ident.conf or whatever to the tar file. Then, onthe new host, do an initdb and after that, copy the old config files into the new PGDATA. Then start the new (empty andfree of databases) database cluster. So: tar cvf /tmp/postgresql11.tar /usr/local/sisis-pap/pgsql /data/postgresql11/*.conf Cheers, Paul
On 5/2/20 7:30 AM, Matthias Apitz wrote: > El día sábado, mayo 02, 2020 a las 03:23:52p. m. +0200, Paul Förster escribió: > >> /usr/local/sisis-pap/pgsql <= software with bin, lib64, share, etc... >> /data/postgresql11/data <= PGDATA > > Exactly, his is the setup above. > > I will move /usr/local/sisis-pap/pgsql by tar; and I want to move some parts(!) > of the cluster /data/postgresql11/data (configuration etc.), but not the databases > included in /data/postgresql11/data, like the cluster(!) in PGDATA was before having > created any database(!) in it. That won't work for the following reasons: 1) A lot of the files/dirs included in /data/postgresql11/data are specific to the files in /data/postgresql11/data/base as they where created over time. They will fail when you try to merge them with new data. More importantly see 2) below. 2) To create a new base/ you will need to initdb data/ and that is not possible as initdb will not work on a populated data/. > > As I said from the beginning: moving the cluster but without the > databases in it. > > Thanks > > matthias > -- Adrian Klaver adrian.klaver@aklaver.com
Hi Adrian, > On 02. May, 2020, at 16:59, Adrian Klaver <adrian.klaver@aklaver.com> wrote: > 2) To create a new base/ you will need to initdb data/ and that is not possible as initdb will not work on a populateddata/. you do the initdb and then copy the *.conf files from the tar over the newly created ones. After that, launch the cluster. Cheers, Paul
On 5/2/20 8:02 AM, Paul Förster wrote: > Hi Adrian, > >> On 02. May, 2020, at 16:59, Adrian Klaver <adrian.klaver@aklaver.com> wrote: >> 2) To create a new base/ you will need to initdb data/ and that is not possible as initdb will not work on a populateddata/. > > you do the initdb and then copy the *.conf files from the tar over the newly created ones. After that, launch the cluster. Yeah I know, I do that on a fairly regular basis. The intent was to let the OP know that ripping base/ out of cluster and transplanting a new one in is not possible. > > Cheers, > Paul > -- Adrian Klaver adrian.klaver@aklaver.com
El día sábado, mayo 02, 2020 a las 08:23:52a. m. -0700, Adrian Klaver escribió:
> On 5/2/20 8:02 AM, Paul Förster wrote:
> > Hi Adrian,
> >
> >> On 02. May, 2020, at 16:59, Adrian Klaver <adrian.klaver@aklaver.com> wrote:
> >> 2) To create a new base/ you will need to initdb data/ and that is not possible as initdb will not work on a
populateddata/.
> >
> > you do the initdb and then copy the *.conf files from the tar over the newly created ones. After that, launch the
cluster.
>
> Yeah I know, I do that on a fairly regular basis. The intent was to let
> the OP know that ripping base/ out of cluster and transplanting a new
> one in is not possible.
OK, lesson learned: Next time I will do a tar backup of PGDATA after
the configuration of the cluster and before creating any database in it.
Thanks
matthias
--
Matthias Apitz, ✉ guru@unixarea.de, http://www.unixarea.de/ +49-176-38902045
Public GnuPG key: http://www.unixarea.de/key.pub
Hi Matthias, > On 02. May, 2020, at 20:58, Matthias Apitz <guru@unixarea.de> wrote: > OK, lesson learned: Next time I will do a tar backup of PGDATA after > the configuration of the cluster and before creating any database in it. that tar would still contain too much. :-) You really only need the config files. All else is created by initdb. Cheers, Paul
On 5/2/20 11:58 AM, Matthias Apitz wrote: > El día sábado, mayo 02, 2020 a las 08:23:52a. m. -0700, Adrian Klaver escribió: > >> On 5/2/20 8:02 AM, Paul Förster wrote: >>> Hi Adrian, >>> >>>> On 02. May, 2020, at 16:59, Adrian Klaver <adrian.klaver@aklaver.com> wrote: >>>> 2) To create a new base/ you will need to initdb data/ and that is not possible as initdb will not work on a populateddata/. >>> >>> you do the initdb and then copy the *.conf files from the tar over the newly created ones. After that, launch the cluster. >> >> Yeah I know, I do that on a fairly regular basis. The intent was to let >> the OP know that ripping base/ out of cluster and transplanting a new >> one in is not possible. > > OK, lesson learned: Next time I will do a tar backup of PGDATA after > the configuration of the cluster and before creating any database in it. As Paul said this is probably more then you want to do. If for no other reason then that the env(in particular locale) where you untar the PGDATA may be different from where you tar(ed) it. This will leave you with cluster that is out of sync with its environment. > > Thanks > > matthias > -- Adrian Klaver adrian.klaver@aklaver.com
On 2020-05-02 12:23:29 +0200, Matthias Apitz wrote:
> So the question remains: What I have to move by tar to get the cluster
> setup on the new host, but without the databases in it?
What exactly do you mean by "the cluster [setup], but without the
databases in it"? What do you want to preserve that a simple initdb
doesn't recreate? Configuration? Users and passwords? Other stuff?
If you can answer this question, the solution will probably be
simple.
hp
--
_ | Peter J. Holzer | Story must make more sense than reality.
|_|_) | |
| | | hjp@hjp.at | -- Charles Stross, "Creative writing
__/ | http://www.hjp.at/ | challenge!"