Saya telah mengerjakan cadangan panas untuk Postgres 9.1 untuk sementara dan mengalami masalah yang konsisten. Setelah memulai kembali Postgres di server slave, file log pgstartup dan file log harian di bawah direktori pg_log dibaca tanpa kesalahan. Namun, ketika saya mencoba masuk ke database menggunakan perintah psql, saya mendapatkan kesalahan:
FATAL: sistem database mulai dinyalakan.
File recovery.conf juga tidak beralih ke recovery.done. Saya telah meneliti secara ekstensif kesalahan ini dan secara konsisten menemukan respons yang sama: database belum ditutup dengan benar sebelum saya mencoba me-restart Postgres. Satu-satunya cara saya me-restart Postgres adalah melalui perintah service postgresql-9.1 restart
atau /etc/init.d/postgresql-9.1 restart
. Setelah saya menerima kesalahan ini, saya membunuh semua proses dan mencoba lagi untuk me-restart database dan masih menerima kesalahan yang sama. Saya bingung harus ke mana dari sini dan bagaimana memperbaiki masalah ini. Di bawah ini adalah proses tepat yang telah saya lakukan untuk menyelesaikan cadangan panas.
Konfigurasi Master Server:
pg_hba.conf, menambahkan baris:
host replikasi postgres kepercayaan IPAddressOfSlaveServer
postgresql.conf:
wal_level = hot_standby max_wal_senders = 5 listen_address = '*' port = 5432 max_wal_senders = 5 wal_keep_segments = 32
Konfigurasi Server Slave:
postgresql.conf:
hot_standby = aktif
recovery.conf:
standby_mode = aktif primary_conninfo = host = IPAddressOfMasterServer port = 5432 user = postgres restore_command = 'cp /var/lib/pgsql/9.1/data/pg_xlog/%f "% p"'
Setelah mengkonfigurasi kedua server
Saya mengubah ke pengguna postgres di server master dan menjalankan perintah:
psql -c "Pilih pg_start_backup ('label', true);"; rsync -a -v -e ssh /var/lib/pgsql/9.1/data slave: /var/lib/pgsql/9.1/data \ --exclude postmaster.pid pgsql -c "pilih pg_stop_backup ();";
Setelah menyinkronkan database dengan server slave
Saya me-restart server slave dan memulai tidak gagal. Pgstartup.log berbunyi:
Keberhasilan. Anda sekarang dapat memulai server database menggunakan: /usr/pgsql-9.1/bin/postgres -D /var/lib/pgsql/9.1/data atau /usr/pgsql/9.1/bin/pg_ctl -D /var/lib/pgsql/9.1/data -l mulai logfile
file log hari ini, postgresql-Thu.log, membaca:
Log: mematikan Log: Sistem basis data dimatikan Log: sistem basis data dimatikan dalam pemulihan pada 2012-4-10 Log: memasuki mode siaga Log: file log yang dipulihkan "logFileName" dari arsip Log: kondisi pemulihan konsisten mencapai pada 0 / BF0000B0 Log: ulang dimulai pada 0 / BF000020 Log: file log yang dipulihkan "logFileName" dari arsip Log: halamanaddr tak terduga 0/85000000 dalam file log 0, segmen 192, offset 0 Log: halamanaddr tak terduga 0/85000000 dalam file log 0, segmen 192, offset 0 Log: replikasi streaming berhasil terhubung ke primer
Saya meneliti pageaddr yang tidak terduga dan dari arsip postgres, adalah pemahaman saya bahwa itu cukup normal dan salah satu cara yang diharapkan untuk mendeteksi akhir-WAL.
Saran apa pun akan sangat dihargai.
sumber
Menariknya saya memecahkan ini dengan cara yang berlawanan dengan yang dilakukan Paulus.
Saya tambahkan:
hot_standby = on
atau, lebih tepatnya, diubah
#hot_standby = off
ke atas. (Ini menggunakan 9.5)sumber
Saya mendapatkan ini dalam log:
Untuk memperbaiki mulai server yang tak terbatas lakukan ini: Hentikan layanan (jika ada), matikan proses 'postgres' (biasanya ada). Jalankan ini di konsol:
Ussue ini muncul karena direktori xLog memiliki data, yang tidak ditulis sebelum layanan ditutup. Dan kemudian pada startup layanan dia mencoba memperbaiki data itu. Kadang-kadang membekukan startup dan tidak pernah berakhir .. Perintah di atas membersihkan data yang tidak tetap ini, yang menerapkan layanan untuk memulai dengan data tetap saja. Mungkin beberapa bagian dari data yang tidak tetap akan hilang, tetapi server database akan berjalan secara normal dan dapat diakses oleh aplikasi.
sumber