Project

General

Profile

Database Backup and Restoration » History » Version 1

Giulio Di Anastasio, 03/05/2021 11:37

1 1 Giulio Di Anastasio
h1. %{color:BLUE}  Database - Backup and Restoration%
2 1 Giulio Di Anastasio
3 1 Giulio Di Anastasio
4 1 Giulio Di Anastasio
h1. %{color:BLUE}  Database%
5 1 Giulio Di Anastasio
6 1 Giulio Di Anastasio
h2. %{color:BLUE}  Troubleshooting%
7 1 Giulio Di Anastasio
8 1 Giulio Di Anastasio
h3. %{color:BLUE}  Layers missing in the map's tree%
9 1 Giulio Di Anastasio
10 1 Giulio Di Anastasio
Gisaf relies on counting features through Postgres statistics collector subsystem.
11 1 Giulio Di Anastasio
12 1 Giulio Di Anastasio
In case the server is restarted *dirty* (eg. without clean shutdown), then the count of the tables might be wrong or just 0, leaving the layers apparently empty and thus not even appearing.
13 1 Giulio Di Anastasio
14 1 Giulio Di Anastasio
The fix is as easy as:
15 1 Giulio Di Anastasio
16 1 Giulio Di Anastasio
<pre>
17 1 Giulio Di Anastasio
sudo -u postgres psql avgis -c VACUUM
18 1 Giulio Di Anastasio
</pre>
19 1 Giulio Di Anastasio
20 1 Giulio Di Anastasio
h2. %{color:BLUE}  Installation%
21 1 Giulio Di Anastasio
22 1 Giulio Di Anastasio
This documentation assumes that the Postgis package has been installed (see [[CSR_server#Database]]).
23 1 Giulio Di Anastasio
24 1 Giulio Di Anastasio
h1. %{color:BLUE}  Configure the server%
25 1 Giulio Di Anastasio
26 1 Giulio Di Anastasio
h4. %{color:BLUE}  Allow connections from other hosts in the local network%
27 1 Giulio Di Anastasio
28 1 Giulio Di Anastasio
Set the server to listen to addresses, set listen_addresses to @*@ in @/etc/postgresql/9.6/main/postgresql.conf@.
29 1 Giulio Di Anastasio
30 1 Giulio Di Anastasio
31 1 Giulio Di Anastasio
Allow the connections, add in @/etc/postgresql/9.6/main/pg_hba.conf@:
32 1 Giulio Di Anastasio
33 1 Giulio Di Anastasio
<pre>
34 1 Giulio Di Anastasio
host all all 192.168.0.0/24 md5
35 1 Giulio Di Anastasio
</pre>
36 1 Giulio Di Anastasio
37 1 Giulio Di Anastasio
h2. %{color:BLUE}  Creation of the database%
38 1 Giulio Di Anastasio
39 1 Giulio Di Anastasio
As @postgres@ user:
40 1 Giulio Di Anastasio
41 1 Giulio Di Anastasio
<pre>
42 1 Giulio Di Anastasio
createdb -E utf8 -T template0 avgis
43 1 Giulio Di Anastasio
</pre>
44 1 Giulio Di Anastasio
45 1 Giulio Di Anastasio
h2. %{color:BLUE}  Backups%
46 1 Giulio Di Anastasio
47 1 Giulio Di Anastasio
h3. %{color:BLUE}  Primary%
48 1 Giulio Di Anastasio
49 1 Giulio Di Anastasio
The database is backed up every day at midnight. The dump file is located in @/var/backups/postgres/@.
50 1 Giulio Di Anastasio
51 1 Giulio Di Anastasio
h3.%{color:BLUE}   Secondary%
52 1 Giulio Di Anastasio
53 1 Giulio Di Anastasio
There are other backups (daily, weekly, monthly) thanks to Debian package @autopostgresqlbackup@), located (default) in @/var/lib/autopostgresqlbackup@.
54 1 Giulio Di Anastasio
55 1 Giulio Di Anastasio
h3. %{color:BLUE}  Tertiary (dom0)%
56 1 Giulio Di Anastasio
57 1 Giulio Di Anastasio
The whole virtual machine is backed up by BackupNinja on the "dom0" controller, using:
58 1 Giulio Di Anastasio
- rdiff backups every day
59 1 Giulio Di Anastasio
- tar files on Saturdays.
60 1 Giulio Di Anastasio
61 1 Giulio Di Anastasio
See @/etc/backups.d@ on the dom0 (192.168.0.12).
62 1 Giulio Di Anastasio
63 1 Giulio Di Anastasio
h1. %{color:BLUE}  Remote%
64 1 Giulio Di Anastasio
65 1 Giulio Di Anastasio
*%{color:RED} TODO: remote backup to be written%*
66 1 Giulio Di Anastasio
67 1 Giulio Di Anastasio
h1. %{color:BLUE}  Restoration%
68 1 Giulio Di Anastasio
69 1 Giulio Di Anastasio
If the VM is not shutdown properly, there's a chance that the database is corrupt, and needs to be restored from one of the backups.
70 1 Giulio Di Anastasio
71 1 Giulio Di Anastasio
h2. %{color:BLUE}  After the restoration, restart gisaf:%
72 1 Giulio Di Anastasio
<pre>
73 1 Giulio Di Anastasio
systemctl restart uwsgi.service
74 1 Giulio Di Anastasio
</pre>
75 1 Giulio Di Anastasio
76 1 Giulio Di Anastasio
h1. %{color:BLUE}  From primary backup%
77 1 Giulio Di Anastasio
78 1 Giulio Di Anastasio
*Note*: the roles aren't restored with this method.
79 1 Giulio Di Anastasio
80 1 Giulio Di Anastasio
With user @postgres@:
81 1 Giulio Di Anastasio
<pre>
82 1 Giulio Di Anastasio
# Optionally, rename the corrupt database (selecting a name for a database like "avgis_c2")...
83 1 Giulio Di Anastasio
psql -c "ALTER DATABASE avgis RENAME TO avgis_c2;"
84 1 Giulio Di Anastasio
# ... or drop the existing database
85 1 Giulio Di Anastasio
psql -c "drop database avgis;"
86 1 Giulio Di Anastasio
# Create a new database:
87 1 Giulio Di Anastasio
createdb -E utf8 -T template0 avgis
88 1 Giulio Di Anastasio
# Restore the database
89 1 Giulio Di Anastasio
pg_restore -d avgis /var/backups/postgres/avgis.pg_dump
90 1 Giulio Di Anastasio
</pre>
91 1 Giulio Di Anastasio
92 1 Giulio Di Anastasio
h3. %{color:BLUE}  From secondary backup%
93 1 Giulio Di Anastasio
94 1 Giulio Di Anastasio
@autopostgresqlbackup@ backs up the roles in @postgres_globals@.
95 1 Giulio Di Anastasio
96 1 Giulio Di Anastasio
<pre>
97 1 Giulio Di Anastasio
zcat /var/lib/autopostgresqlbackup/daily/postgres_globals/postgres_globals_2018-10-24_06h25m.Wednesday.sql.gz | psql
98 1 Giulio Di Anastasio
zcat /var/lib/autopostgresqlbackup/daily/avgis/avgis_2018-10-24_06h25m.Wednesday.sql.gz | psql
99 1 Giulio Di Anastasio
</pre>