czwartek, 2 marca 2017

PostgreSQL ozyskanie miejsca po updacie

W wyniku updejtu postgresa zjadło miejscie go nie oddało. Baza nagle zajmuje jeszcze raz tyle ile zajmowała. Na full vacuum nie mamy miejsca co robić, jak z tym żyć? Sposobem na odzyskanie miejsca jest poniższa procedura

1. Backup wszystkich baz na serwerze postgresql

Upewnij się, że posiadasz odpowiednią ilość miejsca na serwerze, jeśli nie podmapuj zasób sieciowy, dysk usb, itp. 

su - postgres
pg_dumpall | gzip -9 > /some/partition/all.dbs.out.gz

2. Backup plików konfiguracyjnych

Sprawdzamy nasz data_directory
 
sudo -u postgres psql
 
postgres=# SHOW data_directory;
 
Output
       data_directory       
------------------------------
/var/lib/postgresql/9.x/main
(1 row)

Kopiujemy pliki konfiguracyjne (mogą także być w /etc/postgesql)

cp /path/to/postgresql/data_directory/*.conf /some/partition/

3. Stop Postgresql

pg_ctl -D /path/to/postgresql/data_directory stop

lub

/etc/init.d/postgresql stop

W tym miejscu warto sobie zrobić wcześniej backup plików w katalogu data_directory na wszelkie zaś:

tar -zcfv  /path/to/destination/data_dierctory.tar.gz /path/to/postgresql/data_directory

4. Wymazanie zawartości data directory

rm -Rf /path/to/postgresql/data_directory/*

5. Uruchomienie initdb to reinicjowania data directory

su - postgres

/usr/lib/postgresql/9.x/bin/initdb -D /path/to/postgresql/data_directory

6. Przywrócenie plików konfiguracyjnych

(jeśli wcześniej  były w /etc/postgresql to wystarczy)
cp /some/partition/*.conf /path/to/postgresql/data_directory/*.conf

7. Start Postgresql

pg_ctl -D /path/to/postgresql/data_directory start

lub

/etc/init.d/postgresql start

8. Przywrócenie bazy danych z backupu

su - postgres
gunzip /some/partition/all.dbs.out.gz
psql -f /some/partition/all.dbs.out


Jeśli mamy problem i nie chce przyjąć hasła dla użytkownika postgres robimy tak:
Kopiujemy plik pg_hba.conf

cp pg_hba.conf pg_hba.conf-backup

Umieszczamy/odhaszowujemy poniższą linie jako pierwszą nie zahaszowaną
local all all trust

restart  PostgreSQL server
/etc/init.d/postgresql restart

Łączymy się jako użytkownik postgres:

psql -U postgres

Resetujemy hasło:
ALTER USER postgres with password 'my_secure_password';


Przywracamy pg_hba.conf:

cp pg_hba.conf-backup pg_hba.conf

Restartujemy PostgreSQL

sudo /etc/init.d/postgresql restart



Sprawdzamy czy baza zajmuje tyle co powinna i koniec tematu.

Brak komentarzy:

Prześlij komentarz