How to Back Up and Restore a Matrix Synapse PostgreSQL Database

A dependable Synapse recovery starts with a PostgreSQL dump that can be read, a clean destination database, and the matching homeserver files. For a typical single-database installation, Synapse’s own backup guide recommends PostgreSQL’s custom dump format and excludes the contents of e2e_one_time_keys_json. Restore into a newly created, empty database; do not layer a dump over tables left by an earlier install. Then confirm Synapse starts against the restored database and that local media and signing keys are present.

This walkthrough assumes a Linux host, a PostgreSQL database named synapse, and a database role named synapse_user. Substitute the database, role, backup path, service name, and configuration paths used by your deployment. Docker Compose, Kubernetes, managed PostgreSQL, and multi-database Synapse deployments need equivalent commands for their environment.

What a database dump does—and does not—protect

pg_dump captures one PostgreSQL database in a consistent snapshot, so PostgreSQL and Synapse can remain online while the dump runs. A custom-format archive (-Fc) can be inspected and restored with pg_restore. The Synapse guide specifically recommends excluding one-time-key table data: restoring older used keys may cause clients to receive keys again and can lead to message decryption errors. The table definition can still appear in the archive; when checking the archive list, look for table-data entries rather than assuming a listed table contains rows.

A database dump alone is not a complete homeserver backup. Also retain homeserver.yaml and any files it references, the server signing key, and the media store directory. Synapse’s backup guide identifies locally uploaded media as important because the homeserver may hold the only copy. If your configuration uses more than one database entry, plan a dump for every database Synapse uses.

Before you begin

  • Confirm the configured database name, user, host, port, and whether Synapse uses one database or several.
  • Check that PostgreSQL client utilities pg_dump, pg_restore, createdb, and psql are installed and compatible with your PostgreSQL server.
  • Choose a protected backup destination with enough free space. Dumps can contain private messages and account data; restrict access and encrypt backups at rest and in transit.
  • Record the Synapse configuration directory, signing-key path, and media_store_path. Back up secrets without exposing them in shell history, chat, or logs.
  • Decide how you will test recovery. A test restore on an isolated host or staging database is stronger evidence than a successful dump command alone.

Create and check the PostgreSQL backup

1. Confirm the target database and role

On a self-managed PostgreSQL host, connect as a PostgreSQL administrator and inspect the database list and relations. Do not rely on an assumed name copied from a sample configuration. If your homeserver uses a remote or managed database, use its approved connection method and verify that the dump account has the required read access.

Terminal PostgreSQL wyświetlający relacje bazy danych Synapse i właściciela synapse_user.
A terminal view of Synapse relations and their owner helps confirm that the backup command will target the intended database.

2. Make a custom-format dump

Create a directory that only the backup account or administrators can read. The example below runs pg_dump as the local PostgreSQL operating-system account and writes to a protected path. Change the path to one that exists and is writable in your setup.

sudo -u postgres pg_dump -Fc \
  --exclude-table-data e2e_one_time_keys_json \
  synapse -f /var/backups/synapse/synapse.dump

If your database is remote, supply connection settings with the method approved in your environment, such as a protected .pgpass file or libpq environment variables. Avoid putting a password directly in the command line. Keep the exclusion option unless you have a deliberate, documented reason to handle the one-time-key table differently.

Terminal uruchamiający pg_dump w niestandardowym formacie z wykluczonymi danymi e2e_one_time_keys_json, po którym następuje lista plików.
The backup command excludes one-time-key data and writes a custom-format archive for later inspection with pg_restore.

3. Check the archive and preserve a checksum

Confirm the dump file exists, is nonzero, and is readable as a PostgreSQL archive. A successful listing is a useful first check, but it does not prove that a restore will finish or that the full homeserver can serve users.

sudo -u postgres pg_restore --list /var/backups/synapse/synapse.dump
sha256sum /var/backups/synapse/synapse.dump

Store the checksum beside the backup record, then copy the dump to a separate system or backup service. Recalculate the checksum after copying and compare the values. For production recovery objectives, schedule regular backups, retain multiple generations, encrypt them, and run periodic restore drills.

Restore into a clean database

4. Stop Synapse and prepare an empty destination

For a restore, stop Synapse first so it cannot reconnect while the database is being replaced or tested. The service name below is common on some package installations, but it varies; Docker users should stop the Synapse service through their Compose project, and orchestrated deployments should use their normal maintenance procedure. PostgreSQL itself does not need to be stopped.

Terminal Linux pokazujący zatrzymanie usługi Synapse przed przywróceniem bazy danych.
Stop the Synapse application before switching its database to a restored copy; use the service name configured on your host.

Use a new, empty database for the restore. Do not restore over an existing Synapse database or one that already contains tables. If you need to preserve the current database for rollback, leave it intact and restore under a temporary database name, then validate before changing Synapse configuration.

sudo -u postgres createdb \
  --encoding=UTF8 --locale=C --template=template0 \
  --owner=synapse_user synapse

Właściciel bazy danych i ustawienia regionalne powinny być zgodne z wymaganiami konfiguracji Synapse. Jeśli nazwa docelowa już istnieje, zatrzymaj się i potwierdź, której bazy danych zamierzasz użyć; nie zakładaj, że jej usunięcie jest bezpieczne. Najpierw utwórz wszystkie wymagane role PostgreSQL. Pojedyncza baza danych pg_dumpnie obejmuje ról obejmujących cały klaster, więc administrator przechodzący do nowego klastra PostgreSQL może również potrzebować oddzielnej, chronionej kopii zapasowej globalnych danych utworzonej za pomocą pg_dumpall --globals-only.

Terminal tworzący pustą bazę danych PostgreSQL UTF8 z ustawieniami regionalnymi C, template0 i właścicielem synapse_user.
Utwórz miejsce docelowe jako pustą bazę danych z kodowaniem, ustawieniami regionalnymi i właścicielem oczekiwanymi przez Synapse.

5. Przywróć archiwum i obsługuj klucze jednorazowe

Załaduj archiwum niestandardowe do tego pustego miejsca docelowego. Opcja jawnego błędu powoduje, że przywracanie zatrzymuje się po napotkaniu błędu, zamiast kontynuować i pozostawić niekompletny wynik, który łatwo przeoczyć.

sudo -u postgres pg_restore --exit-on-error \
  --dbname=synapse /var/backups/synapse/synapse.dump

Jeśli zrzut nie wykluczył e2e_one_time_keys_json, połącz się z przywróconą bazą danych i usuń tę tabelę przed uruchomieniem Synapse. Jest to udokumentowane przez Synapse zabezpieczenie odzyskiwania dla kopii zapasowych zawierających te wiersze. Nie uruchamiaj tego polecenia w aktywnej bazie danych przypadkowo: usunie ono wszystkie wiersze z tej tabeli.

Terminal PostgreSQL uruchamiający pg_restore w celu załadowania archiwum Synapse w niestandardowym formacie do bazy danych Synapse.
Przywróć archiwum dopiero po utworzeniu nowej, pustej bazy danych docelowej i przejrzyj wszelkie komunikaty o błędach przed kontynuacją.
Terminal psql połączony z Synapse i wyświetlający TRUNCATE e2e_one_time_keys_json.
Użyj tej opcji tylko wtedy, gdy przywrócony zrzut zawierał wiersze klucza jednorazowego; program Synapse powinien pozostać zatrzymany do momentu wyczyszczenia tabeli.
sudo -u postgres psql -d synapse \
  -c 'TRUNCATE e2e_one_time_keys_json;'

Jeśli użyto zalecanego wykluczenia, przywrócenie nie zawiera starych wierszy klucza jednorazowego, a ten krok obcinania jest zbędny. Wpis tabeli w pg_restore --listmoże reprezentować definicję tabeli bez jej danych. Sprawdź TABLE DATAwpisy podczas przeglądania zawartości archiwum; najbezpieczniejszym rekordem operacyjnym jest dokładnie to samo polecenie zrzutu (dump).

Przywróć Synapse i sprawdź odzyskiwanie

6. Przywróć pliki towarzyszące i uruchom Synapse

Przed ponownym uruchomieniem upewnij się, że przywrócona konfiguracja wskazuje na docelową bazę danych, a oczekiwany klucz podpisu i magazyn nośników są dostępne dla procesu Synapse. Jeśli przywróciłeś bazę danych pod tymczasową nazwą, zaktualizuj ustawienia bazy danych w bezpieczny sposób, zweryfikuj plik i użyj standardowego procesu wdrażania, aby je aktywować. Zachowaj starą bazę danych i poprzednią konfigurację, dopóki nowa instancja nie przejdzie pomyślnie kontroli.

Uruchom usługę za pomocą polecenia odpowiedniego dla wdrożenia. Na hoście systemd sprawdź status usługi i ostatnie logi. W kontenerach sprawdź stan kontenera i logi. Uruchomiony proces to początkowy sygnał, a nie dowód, że użytkownicy mogą odczytywać pokoje, wysyłać wiadomości lub pobierać załączniki.

Terminal przeglądający listę archiwum PostgreSQL i pokazujący polecenia uruchamiania Synapse oraz statusu usług.
Po przywróceniu sprawdź archiwum i dzienniki usług, a następnie zweryfikuj rzeczywiste operacje klienta przed uznaniem odzyskiwania za zakończone.

7. Funkcje testowe, od których zależą użytkownicy

  • Upewnij się, że Synapse uruchamia się bez migracji bazy danych, uprawnień, ustawień regionalnych lub błędów połączenia.
  • Zaloguj się na konto testowe i przeczytaj istniejące pokoje. Wyślij wiadomość testową, jeśli Twój plan konserwacji na to pozwala.
  • Sprawdź zachowanie federacji i usługi aplikacji, jeśli te funkcje są częścią wdrożenia.
  • Otwórz znany lokalnie przesłany załącznik lub awatar, aby sprawdzić, czy magazyn multimediów jest zgodny z przywróconą bazą danych.
  • Sprawdź logi Synapse i PostgreSQL pod kątem powtarzających się błędów po uruchomieniu, a nie tylko po pierwszej pomyślnej kontroli stanu.

Przywracanie może być technicznie skuteczne, nawet jeśli brakuje plików multimedialnych, konfiguracji, do której się odwołuje, lub ról. Jeśli użytkownicy widzą brakujące załączniki, należy zweryfikować skonfigurowany magazyn multimediów i przywrócić odpowiednią lokalną kopię zapasową multimediów. Jeśli Synapse nie może nawiązać połączenia, należy porównać właściciela przywróconej bazy danych, dane uwierzytelniające, hosta, nazwę bazy danych, ustawienia regionalne i aktywny plik konfiguracyjny.

Typowe sygnały awarii i kiedy należy zmienić metodę

SygnałCo sprawdzić dalej
pg_restoreraportuje istniejące relacje lub błędy własnościoweSprawdź, czy miejsce docelowe jest puste i czy istnieją wymagane role. Przywróć do nowej bazy danych; nie używaj jej --cleanjako skrótu do bazy danych, której zawartość chcesz zachować.
Polecenie dump kończy się wartością różną od zera lub generuje plik niemożliwy do odczytaniaSprawdź zgodność klienta/serwera, uprawnienia, miejsce na dysku, uprawnienia docelowe i logi PostgreSQL. Utwórz nowy zrzut i sprawdź jego poprawność przed użyciem.
Synapse uruchamia się, ale uwzględniono stare, jednorazowe kluczeZatrzymaj aplikację Synapse i wykonaj udokumentowaną procedurę obcinania, zanim zezwolisz jej na obsługę klientów.
Pokoje działają, ale brakuje lokalnych załącznikówPrzywróć odpowiedni lokalny magazyn multimediów i konfigurację; zrzut PostgreSQL nie zawiera przesłanych plików multimedialnych.
Czas odzyskiwania lub rozmiar bazy danych przekracza akceptowalny przedział czasuOceń inne podejścia do tworzenia kopii zapasowych PostgreSQL, takie jak kopie zapasowe bazowe i odzyskiwanie z określonego punktu w czasie z wykorzystaniem archiwizacji WAL, w kontekście Twoich celów dotyczących punktu odzyskiwania i czasu odzyskiwania.

Zrzuty logiczne są przenośne i proste w obsłudze w przypadku wielu małych i średnich wdrożeń, ale ich przywrócenie wraz z rozwojem bazy danych może zająć trochę czasu. W przypadku usługi dużej lub o wysokiej dostępności należy zapoznać się z aktualną dokumentacją dotyczącą tworzenia kopii zapasowych PostgreSQL i zaplanować przetestowaną kopię fizyczną lub projekt odzyskiwania danych z określonego punktu w czasie. Należy zachować niezależny zrzut logiczny, jeśli służy on oddzielnej przenośności lub potrzebie audytu. Żadna z tych metod nie chroni plików przechowywanych poza bazą danych PostgreSQL, chyba że są one osobno archiwizowane.

Terminal obliczający sumę kontrolną SHA-256 dla pliku synapse.dump i umieszczający jego kopię w osobnej lokalizacji kopii zapasowej.
Porównaj sumę kontrolną po skopiowaniu archiwum z hosta Synapse, aby wykryć zmiany w transferze lub pamięci masowej.

Lista kontrolna odzyskiwania

  • Zrzut można odczytać za pomocą programu pg_restore --list, a jego suma kontrolna zgadza się z kopią znajdującą się poza hostem.
  • Przywrócenie nastąpiło do nowej, pustej bazy danych z oczekiwanym kodowaniem, ustawieniami regionalnymi, właścicielem i rolami.
  • Wykluczono wiersze z kluczami jednorazowymi lub tabela została obcięta przed ponownym uruchomieniem programu Synapse.
  • Pliki konfiguracyjne, klucz podpisu i wymagane nośniki lokalne zostały przywrócone z kompatybilnych kopii zapasowych.
  • Logi Synapse są wystarczająco czyste, aby umożliwić korzystanie z usługi, a kontrole na poziomie klienta dotyczące pokoi i multimediów przebiegają pomyślnie.
  • Ćwiczenia przywracania danych potwierdziły udokumentowane kroki odzyskiwania i zmierzyły rzeczywisty czas przywracania.

Oficjalne referencje

Dokumentacja sprawdzona 6 października 2026 r. Nazwy poleceń i zarządzanie usługami różnią się w zależności od systemu operacyjnego, obrazu kontenera, wersji PostgreSQL i wdrożenia Synapse. Sprawdź zgodność instrukcji z dokumentacją dla uruchamianych wersji i metod pakowania.

Zostaw komentarz

Naprawianie udostępniania ekranu w Jitsi Meet na macOS Sonoma: sprawdzanie uprawnień i przeglądarki

Naprawianie udostępniania ekranu w Jitsi Meet na macOS Sonoma: sprawdzanie uprawnień i przeglądarki

Napraw udostępnianie ekranu w Jitsi Meet na macOS Sonoma: włącz odpowiednie uprawnienia przeglądarki, uruchom ją ponownie i zdiagnozuj problemy z selektorem lub spotkaniem.

Koniec cyklu życia Kopano Core: najlepsze alternatywy open source dla przedsiębiorstw

Koniec cyklu życia Kopano Core: najlepsze alternatywy open source dla przedsiębiorstw

Porównaj praktyczne alternatywy typu open source dla Kopano Core w zakresie poczty e-mail dla przedsiębiorstw i oprogramowania do pracy grupowej, w tym grommunio, SOGo, Zimbra, Nextcloud i Open-Xchange.

Rozwiązywanie problemów z dźwiękiem w pokojach przejściowych BigBlueButton: niezawodna ścieżka rozwiązywania problemów

Rozwiązywanie problemów z dźwiękiem w pokojach przejściowych BigBlueButton: niezawodna ścieżka rozwiązywania problemów

Napraw problem z dźwiękiem w pokoju przejściowym BigBlueButton, który się zawiesza lub nie łączy. Zdiagnozuj problemy z uprawnieniami przeglądarki, WebRTC, TURN, NAT, zaporą sieciową i mostem audio.

Napraw błąd logowania Zimbra „Konto jest zablokowane”: kroki dla użytkownika i administratora

Napraw błąd logowania Zimbra „Konto jest zablokowane”: kroki dla użytkownika i administratora

Rozwiąż błąd Zimbra „Konto jest zablokowane”: sprawdź status konta, odblokuj potwierdzoną blokadę, znajdź nieaktualne dane uwierzytelniające i zweryfikuj poprawkę.

Napraw wysokie zużycie pamięci bazy danych Matrix Synapse w PostgreSQL

Napraw wysokie zużycie pamięci bazy danych Matrix Synapse w PostgreSQL

Rozwiąż problem dużego wykorzystania pamięci przez PostgreSQL za pomocą Matrix Synapse, sprawdzając połączenia, dostrajając ustawienia puli i pamięci, odkurzając tabele i weryfikując wyniki.

Jak skonfigurować Nextcloud Office z CODE Docker w 10 minut

Jak skonfigurować Nextcloud Office z CODE Docker w 10 minut

Skonfiguruj zewnętrzny serwer Collabora CODE Docker dla Nextcloud w około 10 minut, korzystając z serwera proxy HTTPS, sprawdzania WOPI, wskazówek dotyczących bezpieczeństwa i rozwiązywania problemów.

Bezpiecznie napraw ostrzeżenie „AllowOverride All” w usłudze ownCloud Apache

Bezpiecznie napraw ostrzeżenie „AllowOverride All” w usłudze ownCloud Apache

Napraw ostrzeżenie ownCloud Apache AllowOverride All poprzez skonfigurowanie prawidłowego katalogu, przetestowanie Apache, bezpieczne ponowne załadowanie i sprawdzenie ochrony .htaccess.

Jak zamontować udział Samba/CIFS na serwerze ownCloud

Jak zamontować udział Samba/CIFS na serwerze ownCloud

Zamontuj udział Samba lub CIFS na serwerze ownCloud z obsługą pamięci zewnętrznej. Skonfiguruj poświadczenia SMB, ogranicz dostęp i zweryfikuj montaż.

Fix “App Couldn’t Be Installed Because Server Has No Internet” on Android

Fix “App Couldn’t Be Installed Because Server Has No Internet” on Android

Fix the Android app installation error by checking connectivity, Play Store cache, storage, device compatibility, and emulator DNS or proxy settings.

How to Back Up and Restore a Matrix Synapse PostgreSQL Database

How to Back Up and Restore a Matrix Synapse PostgreSQL Database

Back up and restore a Matrix Synapse PostgreSQL database with pg_dump and pg_restore. Protect one-time keys, create a clean target, and verify recovery.