Przenoszenie danych postgresql na inny dysk

20

Używam AWS jako mojego środowiska chmurowego. Zainstalowałem PostgreSQL na tym samym dysku, co mój wolumin instancji root. Podłączyłem i zamontowałem drugi dysk do mojej instancji. Teraz chcę przenieść wszystkie moje dane PostgreSQL na inny dysk. Nadal jestem w trybie programowania, więc mogę usunąć stare dane, jeśli w tym momencie ułatwia to transfer. Jak najlepiej to zrobić?

Czy obszar tabel PostgreSQL powinien być czymś, na co powinienem spojrzeć?

codecool
źródło
1
Przestrzenie tabel byłyby dobrym rozwiązaniem, jeśli chcesz przenieść część bazy danych na osobny dysk.
Erwin Brandstetter,
Ta odpowiedź sugeruje, że NIEtablespaces należy używać zewnętrznego dysku twardego: dba.stackexchange.com/a/62037/41823 Nie wiesz, czy rozumiem ryzyko, jeśli już umieszczasz dane na zewnętrznym dysku ?
Statwonk

Odpowiedzi:

19

Powinny to zrobić:

  1. Zamknij PostgreSQL
  2. Upewnij się, że PostgreSQL już nie działa
  3. Sprawdź, czy PostgreSQL jest naprawdę zatrzymany
  4. Skopiuj stary katalog danych na nowy dysk.
    Jest to zwykle definiowane za pomocą parametru wiersza polecenia ( -D) dla usługi lub PGDATAzmiennej środowiskowej.
  5. Zaktualizuj konfigurację PostgreSQL (usługa, środowisko var), aby wskazywała nowy katalog danych.
  6. Jeśli skopiowałeś dane, zmień nazwę starego katalogu danych, aby upewnić się, że PostgreSQL nie może go już znaleźć. W ten sposób otrzymasz komunikat o błędzie, jeśli konfiguracja nie przebiegła prawidłowo.
  7. Uruchom usługę
  8. Jeśli wszystko działa poprawnie, możesz usunąć stary katalog.
koń bez imienia
źródło
W czwartym punkcie, co rozumiesz przez „To jest zwykle definiowane za pomocą parametru wiersza poleceń ...”?
codecool
@codecool: można to zdefiniować na kilka różnych sposobów. Zwykle jest to część definicji usługi. Ale to zależy od systemu operacyjnego, dystrybucji i zmian personalnych.
a_horse_w_no_name
To działało, ale użyłem regedit zamiast wiersza poleceń w systemie Windows. Uff Na moim dysku zabrakło miejsca, ale teraz mam go bezpiecznie działającego gdzie indziej z wystarczającą ilością miejsca.
wykop
Oto miły krok po kroku blogu z konkretnych szczegółów, up-to-date dla typowego ubuntu i wersji 9.5 DB: digitalocean.com/community/tutorials/...
JaakL
4
  1. Zatrzymaj usługę postgresql
  2. cp -a katalog_źródłowych katalog_docelowy danych
  3. chown -R postgres_user / destination_data_directory
  4. eksport PGDATA = katalog_danych_docelowych
  5. Zmienianie katalogu danych na katalog_danych_docelowych w pliku postgresql.conf
  6. pg_ctl start
adi
źródło
Cieszę się, że pamiętasz chownpolecenie nowego folderu.
RolandoMySQLDBA
0

Oto opis, jak przenieść istniejącą bazę danych PostgreSQL do nowej lokalizacji (folderu, partycji) na Arch Linux (procedura ta powinna być podobna dla innych dystrybucji Linuksa).

pg_dumpallto narzędzie do zapisywania (zrzutu) wszystkich baz danych PostgreSQL klastra w jednym pliku skryptu. ... Robi to poprzez wywołanie pg_dumpkażdej bazy danych w klastrze. ...

Na przykład:

## To dump all databases:
$ pg_dumpall > /tmp/db.out               ## backup all postgres databases to file
$ pg_dumpall -Fc dbname > /tmp/outfile   ## backup a database

## To reload database(s) from that file:
$ psql -f /tmp/db.out postgres

TL / DR

Musisz:

  • pg_dumpallbaza danych export ( )
  • utwórz nowy katalog PUSTY
  • edytuj plik postgresql.conf
  • zrestartuj usługę serwera Postgres
  • załaduj stare dane z pliku zrzutu do nowej bazy danych

Podsumowanie poleceń

Zostawiam monity powłoki (nazwa hosta ...), aby wyjaśnić, w jakiej powłoce jestem w trakcie pracy.

[victoria@victoria ~]$ postgres --version     ## postgres (PostgreSQL) 11.2
[victoria@victoria claws]$ sudo -u postgres -i
[postgres@victoria ~]$ pg_dumpall > /tmp/db.out
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;              ## /var/lib/postgres/data
[postgres]# exit
[victoria@victoria postgres]$ mkdir /mnt/Vancouver/programming/rdb/postgres/postgresdb
## IMPORTANT: dir must be empty:
[victoria@victoria postgres]$ l postgresdb/   ## total 0
[victoria@victoria postgres]$ sudo chown postgres:root /mnt/Vancouver/programming/rdb/postgres/postgresdb/
[victoria@victoria postgres]$ sudo systemctl status postgresql
  ...
  May 02 19:55:21 victoria systemd[1]: Started PostgreSQL database server.
[postgres@victoria ~]$ initdb --locale en_US.UTF-8 -E UTF8 -D '/mnt/Vancouver/programming/rdb/postgres/postgresdb/data'
[postgres@victoria ~]$ exit
[victoria@victoria postgres]$ sudo vim /var/lib/postgres/data/postgresql.conf
  ## added line:
  data_directory = '/mnt/Vancouver/programming/rdb/postgres/postgresdb/data'
[victoria@victoria postgres]$ sudo -u postgres -i
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;
  ## /var/lib/postgres/data   ## << Old dir; need to restart postgresql service
[postgres]# \q
[victoria@victoria postgres]$ sudo systemctl restart postgresql
[victoria@victoria postgres]$ sudo -u postgres -i
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;
  ## /mnt/Vancouver/programming/rdb/postgres/postgresdb/data
[postgres]# \q
[postgres@victoria ~]$ psql -f /tmp/db.out postgres
  SET
  SET
  SET
  CREATE ROLE
  ALTER ROLE
  [ ... SNIP! ... ]
[postgres@victoria ~]$ exit
## Done!  :-D

Przykład

Zobacz mój komentarz na blogu, jak przenieść istniejącą bazę danych PostgreSQL na Arch Linux , aby uzyskać komentarz i kod wyjściowy. ---


Bibliografia

Victoria Stuart
źródło