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:
$ exit logout # 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.