Adatbázis nélkül nem élet az élet… telepítsük fel a PostgreSQL szervert… 🙂
# yum install postgresql.x86_64 postgresql-contrib.x86_64 postgresql-server.x86_64
[...]
# chkconfig --list | grep postgres
postgresql 0:off 1:off 2:off 3:off 4:off 5:off 6:off
# chkconfig postgresql on
# chkconfig --list | grep postgres
postgresql 0:off 1:off 2:on 3:on 4:on 5:on 6:off
# service postgresql initdb
Initializing database: [ OK ]
# service postgresql start
Starting postgresql service: [ OK ]
# su - postgres
$ psql -l
List of databases
Name | Owner | Encoding | Collation | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres
: postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres
: postgres=CTc/postgres
(3 rows)
A telepítéssel készen is vagyunk, de néhány beállítást meg kell még ejtenünk, kezdjük a pg_hba.conf állomány tartalmával:
# IPv4 local connections:
host all all 127.0.0.1/32 password
# IPv6 local connections:
host all all ::1/128 password
A fenti sort a meglévő IPv4/IPv6 kezdetű megjegyzés után. Ha a PostgreSQL szervert el szeretnénk érni TCP/IP alapon, akkor módosítanunk kell a postgresql.conf állományon is:
listen_addresses = 'localhost'
Tulajdonképpen nem kell mást tennünk, mint a fenti sorok elől kivenni a # jelet. Ezek után indítsuk újra a szolgáltatást és ellenőrizzük, hogy figyel-e az adott porton:
# service postgresql restart
Stopping postgresql service: [ OK ]
Starting postgresql service: [ OK ]
# nmap -p 5432 localhost
Starting Nmap 5.21 ( http://nmap.org ) at 2012-06-16 11:37 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000059s latency).
Hostname localhost resolves to 2 IPs. Only scanned 127.0.0.1
PORT STATE SERVICE
5432/tcp open postgresql
Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds
S kész is vagyunk… 🙂
Mentés
Adatbázisok esetén nem célszerű a bináris állományokat lementeni, mivel a fájlok tömörítése közben a tartalom bárhol megváltozhat, és visszatöltve nem feltétlen lesz konzisztens állapotban az adatbázisunk, így egy adatbázis dump tömörítését kell ütemezve megoldanunk. Ez nem olyan nehéz feladat, mint amilyennek hangzik…
Első körben határozzuk meg azokat az adatbázisokat, amelyeket menteni akarunk, a script lehetőleg automatikusan derítse fel, ha új adatbázist adunk hozzá a rendszerünkhöz:
# su - postgres
$ psql -l | grep "^ [a-z]" | sed s/"^ "//g | awk {'print $1'} | grep -v "^template"
confluence425
crowd242
fisheye2714
jira506
postgres
sonar
svnadmin
Ha az adatbázisok megvannak, akkor már csak végig kell lépkedni rajtuk és kiírni a tartalmukat tömörítve, írjuk meg a pg_backup.sh script-et:
#!/bin/bash
for i in `psql -l | grep "^ [a-z]" | sed s/"^ "//g | awk {'print $1'} | grep -v "^template"`
do
echo "$i started"
pg_dump $i | bzip2 -c >/home/backup/postgresql/$i.bz2
echo "$i done"
done
Futtassuk le “kézzel”, hogy lássuk a működését:
$ chmod +x /home/backup/postgresql/pg_backup.sh
$ /home/backup/postgresql/pg_backup.sh
confluence425 started
confluence425 done
crowd242 started
crowd242 done
fisheye2714 started
fisheye2714 done
jira506 started
jira506 done
postgres started
postgres done
sonar started
sonar done
svnadmin started
svnadmin done
$ ls -l /home/backup/postgresql/
összesen 51948
-rw-r--r--. 1 postgres postgres 50640073 jún 29 14.53 confluence425.bz2
-rw-r--r--. 1 postgres postgres 234513 jún 29 14.53 crowd242.bz2
-rw-r--r--. 1 postgres postgres 6975 jún 29 14.53 fisheye2714.bz2
-rw-r--r--. 1 postgres postgres 1138428 jún 29 14.53 jira506.bz2
-rwxr-xr-x. 1 postgres postgres 207 jún 29 14.52 pg_backup.sh
-rw-r--r--. 1 postgres postgres 325 jún 29 14.53 postgres.bz2
-rw-r--r--. 1 postgres postgres 1142004 jún 29 14.53 sonar.bz2
-rw-r--r--. 1 postgres postgres 4187 jún 29 14.53 svnadmin.bz2
Már csak a cron script hiányzik, hozzuk létre a `crontab -e` parancs használatával egy olyan időpontban, amikor viszonlag kicsi a szerverünk terhelése, illetve kerüljük a kerek számokat, mivel sok rendszerfelügyeleti script 5-10-15 percenként fut, ezért a 4 óra 13 perc megfelelő lehet erre a célra:
MAILTO=root
13 4 * * * /home/backup/postgresql/pg_backup.sh
Másnap ellenőrizzük vissza, hogy valóban lefutott a mentés, illetve nézzük meg, hogy a mentésből adott esetben vissza tudjuk-e állítani az adatbázist! Kevés haszna van egy rendszeres mentésnek, amely alkalmatlan a visszaállításra.