Database Backup and Restoration » History » Version 3
Giulio Di Anastasio, 03/05/2021 11:46
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 | 2 | Giulio Di Anastasio | This documentation assumes that the Postgis package has been installed (see [[CSR Geomatics Server Setup#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 | 3 | 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> |