Skocz do zawartości
northwest

Automatyczna kopia PostgreSQL

Polecane posty

Witam serdecznie,

PostgreSQLWie ktos może jak zrobić jakiś "automat" który będzie każdego dnia o godzinie 23.00 robił kopię bazy danych do pliku (najlepiej w formacie : 2009.01.22.sql)? Jakby się to dało jeszcze spakować, to już wogóle byłoby super... :D

 

 

Northwest

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Do backupowania baz PostgreSQL służy pg_dump. Dołóż do tego lekki skrypt w bashu lub perlu, który w pętli będzie backupował wszystkie bazy.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Jako root:

 

mkdir -p /backup/psql
chown root.postgres /backup/psql
chmod 775 /backup/psql

 

Skrypt:

 

#!/bin/bash

DIR=/backup/psql
DATA=`date '+%d-%m-%Y'`

[ ! $DIR ] && mkdir -p $DIR || :
LIST=$(psql -l | awk '{ print $1}' | grep -vE '^-|^List|^Name|template[0|1]')
for d in $LIST
do
 pg_dump $d | gzip -c >  $DIR/$d.$DATA.gz
done

 

Skrypt dopisz do cron'a user'a postgres.

 

Format zapisu: nazwabazy.27.03.2009.gz

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

tak powinien wyglądać ten cron tab:

crontab -u root -e

 

00 23 * * * /home/pgbackup.sh >/dev/null 2>&1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Do pg_dump proponuję dodać opcję

pg_dump -F t

wówczas jeśli jest dużo insertów odzyskiwanie backupu trwa niewspółmiernie krócej niż z tradycyjnej postaci pg_dumpa, gdzie każdy insert jest wykonywany w osobnej transakcji.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

A cron się w ogóle odpalił ?

Będąc zalogoanym na usera postgres wpisz

echo $PATH

następnie zwróconą linię wrzuć na początek skryptu zaraz po #!/bin/bash

export PATH=tu podstaw to co zwrocil echo $PATH

Upewnił się, że postgres pracuje na prawach usera postgres.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
niestety nie zadziałało... :P miałem to ustawione na 23 i kopi bazy nie zrobiło :P

 

Skrypt działa, bo testowałem gp przed podaniem. Coś zrobiłeś źle.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

qurcze, mam taki skrypt (home/pgbackup.sh):

#!/bin/bash

 

DIR=/backup/psql

DATA=`date '+%d-%m-%Y'`

 

[ ! $DIR ] && mkdir -p $DIR || :

LIST=$(psql -F -t -l | awk '{ print $1}' | grep -vE '^-|^List|^Name|template[0|1]')

for d in $LIST

do

pg_dump $d | gzip -c > $DIR/$d.$DATA.gz

done

 

crontab -u postgres -e zapisałem:

00 23 * * * /home/pgbackup.sh >/dev/null 2>&1

 

 

 

to nie zadziałało :P

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

A nadałeś skryptowi odpowiedni chmod?

 

chmod +x /home/pgbackup.sh

 

Zrób su postgres i spróbuj odpalić ten skrypt z ręki, user postgres powinien mieć prawa do wykonania tego skryptu.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

ja:~# chmod +x /home/pgbackup.sh

ja:~# /home/pgbackup.sh

psql: KATASTROFALNY: Ident authentication failed for user "root"

 

To było z roota.

hmmm... a jak to uruchomić jako postgres?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

postgres@spycar:/root$ /home/pgbackup.sh

could not change directory to "/root"

could not change directory to "/root"

could not change directory to "/root"

could not change directory to "/root"

could not change directory to "/root"

could not change directory to "/root"

pg_dump: [archiver (db)] connection to database "(6" failed: KATASTROFALNY: baza "(6" nie istnieje

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Na początek wykonaj to, co @lukaschemp ci podał:

 

mkdir -p /backup/psql
chown root.postgres /backup/psql
chmod 775 /backup/psql

 

Następnie przejdź do tego katalogu

cd /backup/psql

 

I z tego katalogu uruchom skrypt.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
psql -U postgres

 

Odpalając skrypt jako user postgres w skrypcie nie trzeba podawać loginu ani hasła dlatego podałem taką opcję.

 

@northwest - gdybyś wykonał polecenia tak jak ja Ci podałem, bez zmiany ścieżek to wszystko by działało. Wrzuć sobie skrypt do katalogu domowego postgres'a (grep postgres /etc/passwd) lub nadaj mu odpowiednie prawa.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Mam teraz taki rezultat:

 

north:~# mkdir -p /backup/psql

north:~# chown root.postgres /backup/psql

north:~# chmod 775 /backup/psql

north:~# cd /backup/psql

north:/backup/psql# su postgres

postgres@north:/backup/psql$ /home/pgbackup.sh

pg_dump: [archiver (db)] connection to database "(6" failed: KATASTROFALNY: baza "(6" nie istnieje

postgres@north:/back

 

 

Na początek wykonaj to, co @lukaschemp ci podał:

 

mkdir -p /backup/psql
chown root.postgres /backup/psql
chmod 775 /backup/psql

 

Następnie przejdź do tego katalogu

cd /backup/psql

 

I z tego katalogu uruchom skrypt.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się


×