Postgres: Dump / Restore Datenbank

Problem: Datenbanktabelle hat Schwierigkeiten bei VACUUM (Postgres 8.3)

Auswirkung: Tabelle und Indezies wachsen, Abfragen werden langsamer, da ständig Autovacuum läuft.

Lösung: Dump und restore der DB-Tabelle (hier wurde ganze DB gedumpt).

Um zu vermeiden, dass während des Dump/Restores die DB belastet wird, sollten auch wiederkehrende Scripte auf dem Server (crontab) bedacht werden, die auf die Tabelle/DB zugreifen.

Danach muss verhindert werden, dass von aussen auf die DB zugegriffen wird, während DUMP/RESTORE stattfindet.

vim /etc/postgresql/8.3/main/postgresql.conf

Die Zeile mit „listen_address = ‚*'“ auskommentieren (mit Raute #)

Postgres muss restartet werden, damit Einstellung greift.

/etc/init.d/postgresql-8.3 restart

Datenbank dumpen:

su - postgres
pg_dump -c meine_db | gzip > /tmp/meine_db.sql.gz

Vorsichtshalber wird die bestehende DB umbenannt, damit sie im Falle eines Problems wieder verwendet werden kann.

psql
ALTER DATABASE meine_db RENAME TO meine_db_backup;

Neue Datenbank anlegen:

CREATE DATABASE meine_db;

Dump zurückspielen:

zcat /tmp/meine_db.sql.gz | psql meine_db

Postgres wieder nach aussen öffnen:

vim /etc/postgresql/8.3/main/postgresql.conf

und Kommentar vor der listen_address Zeile entfernen.

Postgres restarten:

/etc/init.d/postgresql-8.3 restart

Testen, ob die Aktion erfolgreich war, danach kann die kopierte/umbannante Datenbank meine_db_backup gelöscht werden.

 

 

 

Schreibe einen Kommentar