Wenn du das Datenverzeichnis angelegt hast, wirst nur du allein wissen, wo das ist. Das musst du da eintragen.
Überhaupt frage ich mich, wieso das Skript überhaupt das Datenverzeichnis braucht ... das ist zum Dumpen nicht notwendig.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
Jetzt bekomme ich wieder eine Fehlermeldung.
Von diesem Beispiel: http://erics-notes.blogspot.com/2008_02_01_archive.html
Hier die Ausgaben im backup-Ordner. Mit dem letzen Schema hat er Probleme.Code:pg_dump: SQL command failed pg_dump: Error message from server: FEHLER: ungültiger regulärer Ausdruck: parentheses () not balanced pg_dump: The command was: SELECT oid FROM pg_catalog.pg_namespace n WHERE n.nspname ~ '^((5)$'
Code:backup.20091214_185936.datenbank.tar.bz2 backup.20091214_185938.datenbank.information_schema.tar.bz2 backup.20091214_185939.datenbank.pg_catalog.tar.bz2 backup.20091214_185941.datenbank.pg_toast.tar.bz2 backup.20091214_185941.datenbank.pg_toast_temp_1.tar.bz2 backup.20091214_185941.datenbank.public.tar.bz2 backup.20091214_185943.datenbank.(5.tar.bz2
Geändert von karl_ha (15.12.2009 um 10:32 Uhr)
Ich habe das Script jetzt umgeschrieben, es werden nur die public-Schemas der DBs gesichert.
Ein Fehler kommt aber immer noch:PHP-Code:# #!/bin/bash
#
# # setup environment
PG_PORT=5432
PG_HOME=/usr/lib/postgresql/8.3
PG_VAR=/backup
PG_DATA=/backup/data
PG_BACKUPS=/backup/backup
PG_LOGS=/backup/logs
PG_BIN=/usr/lib/postgresql/8.3/bin
PG_DUMPALL=/usr/lib/postgresql/8.3/bin/pg_dumpall
PG_DUMP=/usr/lib/postgresql/8.3/bin/pg_dump
PG_PSQL=/usr/lib/postgresql/8.3/bin/psql
PG_VACUUMDB=/usr/lib/postgresql/8.3/bin/vacuumdb
PG_BACKUP=/backup/backup/17122009_1400
PG_LOG_FILE=/backup/logs/backup_17122009_1400.log
COMPRESS="bzip2 -9"
DUMPALL_ARGS="-p 5432 -c -g -o -U postgres"
DUMP_ARGS="-p 5432 -c -o -F t -U postgres"
VACUUM_ARGS="-z -p 5432 -d -U postgres"
PSQL_ARGS="-p 5432 -U postgres -q -c"
echo "`date`: Script $0 starting" >> backup_17122009_1400.log 2>&1
# Make the backup directory
mkdir -p /backup/backup/17122009_1400 >> backup_17122009_1400.log 2>&1
# Iterate over all databases
databases=`/usr/lib/postgresql/8.3/bin/psql -p 5432 -U postgres -q -c "\l" 2>> /backup/logs/backup_17122009_1400.log | sed -n 4,/\eof/p | grep -v rows\) | awk {'print $1'}`
for database in $databases
do
# echo "`date`: Vacuuming database '$database'" >> /backup/logs/backup_17122009_1400.log 2>&1
# /usr/lib/postgresql/8.3/bin/vacuumdb -z -p 5432 -d -U postgres $database >> /backup/logs/backup_17122009_1400.log 2>&1
# echo "`date`: Vacuuming of database '$database' complete" >> /backup/logs/backup_17122009_1400.log 2>&1
PG_DUMP_DB_FILE=/backup/backup/17122009_1400/backup.17122009_1400.$database.tar.bz2
echo "`date`: Backing up database '$database' to '$PG_DUMP_DB_FILE'" >> /backup/logs/backup_17122009_1400.log 2>&1
/usr/lib/postgresql/8.3/bin/pg_dump -p 5432 -c -o -F t -U postgres $database 2>> /backup/logs/backup_17122009_1400.log | bzip2 -9 > $PG_DUMP_DB_FILE 2>> /backup/logs/backup_17122009_1400.log
echo "`date`: Backing up database '$database' to '$PG_DUMP_DB_FILE' complete" >> /backup/logs/backup_17122009_1400.log 2>&1
# iterate over all schemas in this database
schemas=`/usr/lib/postgresql/8.3/bin/psql -p 5432 -U postgres -q -c "\dn public" -d $database 2>> /backup/logs/backup_17122009_1400.log | sed -n 4,/\eof/p | grep -v rows\) | awk {'print $1'}`
for schema in $schemas
do
PG_DUMP_SCHM_FILE=/backup/backup/17122009_1400/backup.17122009_1400.$database.$schema.tar.bz2
echo "`date`: Backing up schema '$schema' of database '$database' to '$PG_DUMP_SCHM_FILE'" >> /backup/logs/backup_17122009_1400.log 2>&1
/usr/lib/postgresql/8.3/bin/pg_dump -p 5432 -c -o -F t -U postgres -n $schema $database 2>> /backup/logs/backup_17122009_1400.log | bzip2 -9 > $PG_DUMP_SCHM_FILE 2>> /backup/backup/logs/backup_17122009_1400.log
echo "`date`: Backing up schema '$schema' of database '$database' to '$PG_DUMP_SCHM_FILE' complete" >> /backup/logs/backup_17122009_1400.log 2>&1
done
done
Kennt jemand hier ein Forum, bei dem shell-Probleme gepostet werden können?PHP-Code:Do 17. Dez 15:33:23 CET 2009: Backing up schema '(1' of database 'alktemplate' to '/backup/backup/17122009_1400/backup.17122009_1400.alktemplate.(1.tar.bz2' complete
Do 17. Dez 15:33:23 CET 2009: Backing up database 'augsburg_doms' to '/backup/backup/17122009_1400/backup.17122009_1400.augsburg_doms.tar.bz2'
Do 17. Dez 15:33:25 CET 2009: Backing up database 'augsburg_doms' to '/backup/backup/17122009_1400/backup.17122009_1400.augsburg_doms.tar.bz2' complete
Do 17. Dez 15:33:25 CET 2009: Backing up schema 'public' of database 'augsburg_doms' to '/backup/backup/17122009_1400/backup.17122009_1400.augsburg_doms.public.tar.bz2'
Do 17. Dez 15:33:27 CET 2009: Backing up schema 'public' of database 'augsburg_doms' to '/backup/backup/17122009_1400/backup.17122009_1400.augsburg_doms.public.tar.bz2' complete
Do 17. Dez 15:33:27 CET 2009: Backing up schema '(1' of database 'augsburg_doms' to '/backup/backup/17122009_1400/backup.17122009_1400.augsburg_doms.(1.tar.bz2'
pg_dump: SQL command failed
pg_dump: Error message from server: FEHLER: ungültiger regulärer Ausdruck: parentheses () not balanced
pg_dump: The command was: SELECT oid FROM pg_catalog.pg_namespace n
WHERE n.nspname ~ '^((1)$'
Was macht awk genau? Wenn ich das Script ohne awk in der Konsole ausgebe erscheint eine Liste mit allen DBs. Mit ist die Ausgabe ein ">" (ohne user#)PHP-Code:for db in `$PG_BIN/psql $PG_CON -lt | sed /\eof/p | grep -v rows\) | awk {'print $1'}`
awk ist ein äusserst mächtiger Textprozessor, in etwa ähnlich sed. Damit kannst du eine Datei zeilenweise in ihre Bestandteile zerlegen und neu zusammensetzen. Hier gibt er dir allerdings nur das erste Wort einer Zeile, den Namen der Datenbank zurück.
Hast du den Befehl mit copy/paste in der Konsole eingefügt? Wenn ja, dann schreib den awk-Part mal von Hand, bei mir gings dann.
Gruß Uwe
Have a lot of fun!
bei mir hat es geklappt. kann ein praktischer Befehl sein.
PHP-Code:
#!/bin/bash
DIR="/backup"
PG_BIN="/usr/lib/postgresql/8.4/bin/"
PG_USER="postgres"
#[ ! $DIR ] && mkdir -p $DIR || :
LIST=$($PG_BIN/psql -U $PG_USER -l | awk '{ print $1}' | grep -vE '^-|^List|^Name|template[0|1]')
for d in $LIST
do
$PG_BIN/pg_dump -U $PG_USER $d | gzip -c > $DIR/$d.out.gz
done
Warum benötigt es die DB postgres?PHP-Code:psql: FATAL: Datenbank >>postgres<< existiert nicht
Geändert von karl_ha (02.08.2010 um 18:39 Uhr)
Weil Dein awk-Dingens dies liefert. Bei mir liefert psql -l z.B. u.a.:
Dein awk macht daraus:Code:template0 | postgres | UTF8 | de_DE.UTF-8 | de_DE.UTF-8 | =c/postgres : postgres=CTc/postgres template1 | postgres | UTF8 | de_DE.UTF-8 | de_DE.UTF-8 | =c/postgres : postgres=CTc/postgres
Da solltest Du nachbessern ...Code:: :
Davon abgesehen, daß 8.4 eine DB mit diesem Namen normalerweise hat.
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Vielleicht willst du dir auch noch die "-t" Option von psql anschauen. Wenn es schon wildes Parsen in der Shell sein soll ...
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
Hier hattest du schon mal was ähnliches gefragt, das dort gepostete Skript müsstest du nur um die Archivier-Funktion am Ende erweitern.
Gruß Uwe
Have a lot of fun!
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen