Datenbank Backup

Datenbank Backup auf snapshot Basis am Beispiel postgresql

db-backup
db-backup
db_backup.tar.bz2
4.4 KiB
773 Downloads
Details

db_backup.sh ist ein Script welches es uns erlaubt einen validen Datenbanksnapshot zu erstellen, den Inhalt des Snapshots in ein dediziertes Verzeichnis wegzukopieren und über dieses Verzeichnis eine Testdbinstanz zu starten um zu testen ob dieser Inhalt ebenfalls valide ist.

Hier sehen wir die Config, welche beispielhaft zu verstehen ist.

Das Installationsverzeichnis ist /opt/4lords/scripts/db_backup/

Im Falle dessen es ein anderes sein soll, bitte das Script db_backup.sh editieren und MY-DIR= entsprechend anpassen.

#!/bin/bash

########################################################################################### 
## DB_SNAPSHOT - SCRIPT CONFIG | DB BACKUP
## WRITTEN FOR DEBIAN!!!
##
## MAINTAINER:                 matthias.schweizer
## VERSION:                    0.0.1
## DATE:                       05.01.2010
## LICENCE:
##                                                                                     
###########################################################################################

# Hier liegt die eigentliche Quell-Datenbank drin.
# Alos jene Files die alle Schemas und Tabellen beinhalten
DB_SOURCE_DIR="/data/postgres"                              ## SOURCEPATH OF OUR DATABASE INSTALLATION

# Dies ist das Verzeichnis in welches der erzeugte Snapshot eingebunden wird.
# Dieses Verzeichnis wird automatisch angelegt
DB_SOURCE_SNAPSHOT_DIR="/data/pg_snapshot"            ## PATH WHERE SNAPSHOT WILL BE MOUNTED

# Das Device in der die Quell-Datanbank liegt
DB_SOURCE_LV="/dev/datavg/postgreslv"                       ## LOGICAL VOLUME OF OUR LOCAL DATABASE INSTALLATION

# Der name des zu erzeugenden Snapshotdevices
DB_SOURCE_SNAPSHOT_LV="/dev/datavg/postgres_snapshotlv"     ## LOGICAL SNAPSHOT VOLUME WHICH WILL BE CREATED OVER DB_SOURCE_LV

# Das Verzeichnis in welches das lokale Backup gesynct werden soll.
# Dieses Verzeichnis dient im Grund nur dazu, im Falle eines nicht korrigierbaren
# Fehlers der Quell-Datenbank auf die hier abgelegte Datenbank umschalten zu können.
# Das zugrunde leigende Device sollte ebenfalls ein LV sein und zwar mindesten so gross wie die Quell-Datanbank
DB_LOCAL_BACKUP_DIR="/data/postgres_bkp"                    ## LOCAL BACKUP DIRECTORY WE CAN USE IN CASE OF EMERGENCY AND
                                                            ## FOR RSNAPSHOT

# Hier geben wir an in welchen Unterverzechnis innerhalb des Backups die eingentliche Datenabnksturktuer liegt.
# Bei einer Standardinstallation liegt diese immer unterhalb von main.
# Handelt es sich nicht um eine Standardinstallation kann ** BKP_DATA_DIRCECTORY=DB_LOCAL_BACKUP_DIR** sein
BKP_DATA_DIRCECTORY="${DB_LOCAL_BACKUP_DIR}/9.1/main"       ## DIRECTORY OF DB_BACKUP WORKINGDIR

# Der binärfile des postgresservers. Muss hier angegeben werden,
# da es sich innherlb von PAY.ON fast nie um eine Stnadardinstallation handelt
DB_BINARY="/usr/lib/postgresql/9.1/bin/postgres"            ## POSTGRES SERVER BINARY

# Das Initscript für die Quell-Datenbank. Auch das muss hier angegeben werden,
# denn aufgrund der multiplen Installationen können mehrere Scrite dieser Art
# auf ein und dem selben Server leigen. Das richtige ist hier einzutragen
DB_INIT_SCRIPT="/etc/init.d/postgresql"                     ## INITSCRIPT CAN BE DIFFERENT IN MULTIPLE ENVIRONMENTS

# Ein beliebieges Schema der gebackupten DB. Dieses wird dazu verwendet zu prüfen,
# ob das Backup valide ist. Hierfür wir das Backup über eine Testinstanz gestartet
# und eine Tabellenliste zu diesem Scheme angefordert.
DB_SCHEMA="hostlist_db"                                     ## THE DATABASE SCHEMEA WHICH IS USED FOR TESTING IF DB IS UP OR NOT

# Ein valider DB-User den wir verwenden um die Tabellenstruktur abzufragen
DB_USER="postgres"                                          ## THE DATABASE USER USED FOR TESTING

# Der Timout bis zum Abbruch ... Es wird solange versucht die Tabellenstruktur abzufragen,
# bis wir den Timout erreichen. Danach gilt das Backup der DB als korrupt.
DB_STARTUP_TIMEOUT="120"                                    ## TIME TO WAIT WHILE STARTING DB UP BEFORE WE WILL BREAK

# Der Standardport der der Quell-Datenbank
DB_DEFAULT_PORT="5432"                                      ## STANDARD PORT OF POSTGRES

# Ein freier Port den wir für die Testinstanz der Datanbank verwenden können.
# Dieser darf auf keinen Fall anderweitig belegt sein
DB_TEST_PORT="5899"                                         ## PORT USED TO FIRE UP A TESTINSTANCE

# Die userrechte auf Filesystemebene. Normalerweise nennt sich
# der User postgres und die Gruppe ebenso
DB_BKP_PERMISSION="postgres"                                ## PERMISSIONS WE HAVE TO SET ON BACKUP DIRECTORY

# Der Timeout für das Mounten des Snapshots. Wird es innerhalb dieses Timeouts
# nicht geschafft den Snapshot zu mounten, gilt das Backup als gescheitert
UMOUNT_TIMEOUT="60"                                         ## TIMOUT USED TO TRY UMOUNT THE SNAPSHOT

# Hier wird die Größe des Snapshost angegeben. Diese Größe ist sehr sorgfältig zu wählen.
# Auf gar keine fall zu klein!!!
SNAPSHOT_SIZE="1G"                                          ## THE SIZE OF OUR SNAPSHOT. SCHOULD BE BIG ENOUGH

Wichtig:

Die Datenbank muss zwingend in einem LVM liegen.
Der Snaphsot kann nur innerhalb der selben VG wie das LVM der DB erzeugt werden

Ist dies nicht der Fall kann das Script nicht funktionieren und die Backupstrategie wurde falsch designed!

ls -l /opt/4lords/scripts/db_backup/

drwxr-xr-x 2 share 4002    0 Jan 11 08:13 config                                                                                                                                                                                             
-rwxr-xr-x 1 share 4002 7201 Jan 11 08:51 db_backup.sh                                                                                                                                                                                     
drwxr-xr-x 2 share 4002    0 Jan 11 08:50 include                                                                                                                                                                                            
-rw-r--r-- 1 share 4002  515 Jan 10 15:19 README.txt                                                                                                                                                                                         
drwxr-xr-x 2 share 4002    0 Jan 10 15:12 template

./config

lrwxrwxrwx 1 share 4002   37 Jan 11 08:13 config.inc.sh -> /etc/backup/db_backup/config.inc.sh                                                                                                                                             
-rw-r--r-- 1 share 4002 2731 Jan 10 15:04 example_config.inc.sh