Odo.lv » Recipes » Datu bāzes » PostgreSQL datubāzes kopēšana

PostgreSQL datubāzes kopēšana


Priekšnoteikumi: PostgreSQL datu bāze

Rezerves kopēšana failu līmenī datu bāzes failiem ir nedroša, jo faila kopēšanas brīdi datu bāze var tikt modificēta, un kopētais fails var saturēt nesaskaņotus datus. Tāpēc datu bāzu kopijas jāveido ar datu bāzes līdzekļiem.

Ar šo skriptu tiek veikta regulāra pilna datu bāzu kopēšana izmantojot pg_dump komandu. pg_dump izveido failu, kas apraksta datu bāzi, kuru izpildot tiek izveidoti visi datu bāzes objekti un tabulas tiek uzpildītas ar vajadzīgajiem datiem.

Binārs vai vienkāršs teksta fails

pg_restore var veidot gan tīra teksta SQL pieprasījumu failu, gan bināru failu, kurā ievietojamie dati ir iekļauti kā bināri apgabali. Binārā faila kopiju var izveidot un atjaunot ātrāk, bet to var izdarīt tikai vienas postgres versijas ietvaros un vienas datu bāzes ietvaros, jo binārajā kopijā nav iekļauti visi metadati).

Tīra (teksta) SQL vaicājumu faila izveide un atjaunošana notiek lēnāk, bet to var izmantot dažādās postgres datu bāzu versijās un pārvietot datus, veidojot bāzi no nulles.

Teksta rezerves kopija

Izveide

  1. Datu bāzes kopiju izveido, ar kā postgres lietotājs izpildot komandu:
    su - postgres
    pg_dump -i -F p -b -v -f openbravo.sql openbravo
    exit
Atjaunošana

  1. postgres lietotājs ielādē rezerves kopijas datus datu bāzē:
    su - postgres
    psql -q openbravo < openbravo.sql
    exit

Bināra rezerves kopija

Izveide

  1. Datu bāzes kopiju izveido, ar kā postgres lietotājs izpildot komandu:
    su - postgres
    pg_dump -i -F c -b -v -f openbravo.dmp openbravo
    exit
Atjaunošana

  1. Kā postgres lietotājs ielādē rezerves kopijas datus datu bāzē:
    su - postgres
    pg_restore -i -d openbravo -l openbravo.dmp
    exit
    Warning: Slēdzis -i nozīmē ignorēt kopijas versiju, bet tā darbojas tikai būvējumu ietvaros, bet versijas pirmajiem 2 cipariem (8.3.... vai 8.4...) ir jāsakrīt!

Automātiska rezerves kopijas veidošana

  1. Katalogā /home/bin izveido failu postgres_backup.
  2. Failā ieraksta sekojošu saturu:
    #!/bin/bash
    user="postgres"
    backup_dir="/home/backup"
    date=`date -I`
    prefix="pgsql"

    # List of databases, delimited by spaces DBS="openbravo"

    # sleep for random time to minimize load on server farms max=1800 seconds=$RANDOM let "seconds %= $max" sleep $seconds

    if [ ! -d $backup_dir ]; then mkdir $backup_dir chown root:postgres $backup_dir chmod 770 $backup_dir fi

    cd $backup_dir find $backup_dir/ -name "$prefix.*.tgz" -mtime +7 | xargs rm -f

    printf "*** PostgreSQL backup ***\t\tstarted\t\t`date`\n">>log for cdb in $DBS do printf " - PostgreSQL backup for $cdb -\t\t\t`date`\n">>log su - $user -c "pg_dump -i -F p -b -f "$backup_dir/$prefix.$cdb.$date.sql" $cdb 2>>$backup_dir/err_log" done tar -zcvf $prefix.`date -I`.tgz $prefix.*.sql rm $prefix.*.sql

    printf "
    *** PostgreSQL backup ***\t\t finished\t`date`\n">>log
  3. Padara failu izpildāmu, un, tā kā failā ir norādīta root parole, nodrošināmies, ka citi šī faila saturu nevar redzēt:
    chown root:root postgres_backup
    chmod 770 postgres_backup
  4. Nomaina rezerves kopiju kataloga tiesības, lai postgres lietotājam varētu tajā rakstīt:
    chown root:postgres /home/backup
    chmod 770 /home/backup
  5. Pēc noklusēšanas Postgres datubāzes faili atrodas /var/lib/postgresql/8.3/main/base katalogā kur katrai bāzei ir savs apakškatalogs.
Ja datu bāzu apjoms kļūst liels, šo apakškatalogu kopēšanu failu līmenī var izslēgt norādot papildus parametru -P /var/lib/postgresql/8.3/main/base … u.t.t. dar komandai dar_home_full un dar_home_diff skriptos.

  1. Ieplāno Postgres datu bāzu kopēšanu. "Tīrā" komandrindas logā kā root ievada komandu:
    crontab -e
  2. Esošās rindas papildina ar parauga pēdējo rindu (veidot kopiju katru dienu pēc plkst. 24:00):
    # m h  dom mon dow   command
    0 1 * * *   /home/bin/postgres_backup
  3. Saglabā plānotāja uzdevumus ar komandām Ctrl+o Enter un +Ctrl+x
  4. Pārliecinās, ka plānotājs uzdevumi ir ierakstīti ar komandu:
    crontab -l
    Rezerves kopēšanas skriptu statuss tiek rakstīts tajos pašos žurnāla failos, kur failu sistēmas kopēšanai: /home/backup/log un /home/backup/err_log.


Saites

Created by Valdis Vītoliņš on 2009/09/29 22:05
Last modified by Valdis Vītoliņš on 2011/06/21 13:08

XWiki Enterprise 2.7.33656 - Documentation
Creative Commons Attribution 3.0 Unported License