Memulai server PostgreSQL setelah HDD menyebabkan NEGARA GAGAL

10

Saya menggunakan Fedora 15dengan PostgreSQL 9.1.4. Fedora jatuh baru-baru ini setelah itu:

Upaya untuk memulai server PostgreSQL:

service postgresql-9.1 start

memberi

Starting postgresql-9.1 (via systemctl):  Job failed. See system logs and 'systemctl status' for details.
                                                       [FAILED]

Meskipun, server mulai normal ketika saya memulai server untuk pertama kalinya setelah sistem reboot .
Namun, upaya untuk menggunakan psqlmemberikan kesalahan ini:

psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

.s.PGSQL.5432file tidak ada dimanapun di sistem. A locate .s.PGSQL.5432tidak menghasilkan apa-apa.


Log sistem memiliki ini:

Aug 14 17:31:58 localhost systemd[1]: postgresql-9.1.service: control process exited, code=exited status=1
Aug 14 17:31:58 localhost systemd[1]: Unit postgresql-9.1.service entered failed state.

SEBUAH

systemctl status postgresql-9.1.service

memberi

postgresql-9.1.service - SYSV: PostgreSQL database server.
          Loaded: loaded (/etc/rc.d/init.d/postgresql-9.1)
      Active: failed since Tue, 14 Aug 2012 17:31:58 +0530; 58s ago
     Process: 2811 ExecStop=/etc/rc.d/init.d/postgresql-9.1 stop (code=exited, status=1/FAILURE)
     Process: 12423 ExecStart=/etc/rc.d/init.d/postgresql-9.1 start (code=exited, status=1/FAILURE)
    Main PID: 2551 (code=exited, status=1/FAILURE)
      CGroup: name=systemd:/system/postgresql-9.1.service

Saya belum mengubah pengaturan default fsync jadi saya kira, sudah diatur untuk on. Saya menggunakan HDD. HDD jatuh.

HDD rusak

Kecelakaan HDD mengakibatkan menjalankan manual fsckpada prompt dan tidak berbasis gui. Dengan itu memperbaiki gazillion inode dll. Setelah itu saya me-restart sistem dengan Ctrl+ Alt+ Delete.

Log PostgreSQL memiliki ini:

LOG:  database system was interrupted; last known up at 2012-08-14 17:31:57 IST
LOG:  database system was not properly shut down; automatic recovery in progress
LOG:  record with zero length at 0/41A4E58
LOG:  redo is not required
FATAL:  could not access status of transaction 1
DETAIL:  Could not open file "pg_multixact/offsets/0000": No such file or directory.
LOG:  startup process (PID 13016) exited with exit code 1
LOG:  aborting startup due to startup process failure

Memperbarui

Mencoba memulai server setelah mengambil salinan level sistem file dari /var/lib/pgsqldirektori, dan berjalan ./pg_resetxlog -f /var/lib/pgsql/9.1/data/dengan hasilnya xlog -f /var/lib/pgsql/9.1/data/masih menghasilkan:

LOG:  database system was interrupted; last known up at 2012-08-14 18:46:36 IST
LOG:  database system was not properly shut down; automatic recovery in progress
LOG:  record with zero length at 0/6000078
LOG:  redo is not required
FATAL:  could not access status of transaction 1
DETAIL:  Could not open file "pg_multixact/offsets/0000": No such file or directory.
LOG:  startup process (PID 13766) exited with exit code 1
LOG:  aborting startup due to startup process failure
ThinkingMonkey
sumber
Dan log Postgres?
Milen A. Radev
@ MilenA.Radev Telah memperbarui pertanyaan dengan postgres 'log ..
ThinkingMonkey
pg_resetxlogtidak ada gunanya, jadi Anda ke wilayah yang menyenangkan. Apakah Anda memiliki cadangan dari database ini sebelum crash?
Craig Ringer
@CraigRinger Ya saya memiliki cadangan. Saya sebenarnya menikmati perjalanan ini.
ThinkingMonkey
@PikirMonkey Luar Biasa! Anda adalah salah satu dari sedikit yang dipilih dengan cadangan yang bagus :-). Sejujurnya, kemungkinan DB Anda dapat diperbaiki, tetapi karena sistem file Anda merusak file-file penting Anda mungkin perlu seseorang yang tahu nyali Pg dengan sangat baik untuk menghabiskan waktu mengeluarkan data Anda. Layanan tersedia di sini: postgresql.org/support/professional_support. Mungkin jika Anda dapat membuat konten palsu untuk hal pg_multixact/offsets/0000yang akan diterima Pg ...
Craig Ringer

Jawaban:

15

Jawaban sebenarnya ada di log PostgreSQL, di /var/lib/pgsql/data/pg_log.

Namun, sebelum Anda mengambil tindakan apa pun: Sangat penting bahwa Anda mengambil salinan tingkat sistem file dari database Anda sebelum mencoba memperbaiki jika ada data Anda yang berharga bagi Anda . Lihat http://wiki.postgresql.org/wiki/Corruption . Anda harus menyalin seluruh direktori data. Pada Fedora itu /var/lib/pgsql/datasecara default, tetapi verifikasi itu benar untuk instalasi Anda.

Berdasarkan log yang Anda posting Anda pasti memiliki beberapa tingkat korupsi basis data. Penyimpanan yang menjadi basis data (hard drive atau sistem file) kemungkinan besar rusak. Ambil salinan SEKARANG, dan letakkan di hard drive atau sistem yang berbeda .

Hanya sekali Anda telah membuat salinan level sistem file lengkap dari direktori data Anda, coba gunakan pg_resetxlog untuk menghapus log transaksi yang rusak dan mulai database Anda. Sekalipun dimulai, sangat mungkin korup; Anda harus pg_dumpkemudian ulang initdbitu dan mengembalikan dump ke instance segar.

Jika Anda masih tidak dapat memulainya setelah pg_resetxlogmemposting log yang diperbarui dari upaya startup setelah resetxlog. Mungkin saja Anda harus memulai Pg dalam mode mandiri dengan:

sudo -u postgres postgres --single -D /var/lib/pgsql/data -P -f i postgres

Jika itu berhasil, memberi Anda backend>prompt, coba lagi setelah mengganti "postgres" terakhir dengan nama DB yang ingin Anda sambungkan. Anda harus bisa SELECT, COPYdata dari tabel, dll.

Jika itu tidak berhasil, yaitu Anda tidak dapat memulai backend mandiri, maka mungkin saatnya untuk memulihkan dari cadangan - karena Anda cukup masuk akal untuk memilikinya. Jika ada orang lain yang membaca ini di posisi yang sama, hubungi konsultan PostgreSQL yang berpengalaman untuk melihat apakah mereka dapat memulihkan data dari database Anda. Bersiaplah untuk membayar waktu dan keahlian mereka.

Sistem file Anda mungkin rusak

Tingkat keparahan kerusakan pada instalasi PostgreSQL menunjukkan bahwa seluruh sistem file Anda mungkin rusak. Anda mungkin ingin mempertimbangkan memulihkan seluruh sistem dari cadangan atau menginstalnya kembali.

Saya tidak akan mempercayai sistem file ini, fsckatau tidak fsck.

SMART-test drive Anda

Saya juga merekomendasikan Anda menjalankan SMARTpemeriksaan pada hard drive Anda dengan smartctldari smartmontools; dengan asumsi itu /dev/hdaakan terjadi smartctl -d ata -a /dev/sda | less. Cari tes kesehatan yang gagal uncorrectable_sectors,, tingkat kesalahan baca yang tinggi, reallocated_sector_count lebih dari 2 atau 3, atau current_pending_sector yang tidak nol. Jalankan smartctl -d ata -t long /dev/sdauntuk menjalankan tes mandiri yang tidak merusak pada HDD Anda; itu tidak akan mengganggu fungsi normal sistem. Ketika perkiraan waktu telah berlalu, jalankan smartctl -d ata /dev/sdalagi dan lihat log uji diri untuk melihat apakah sudah lulus.

Jika ada yang terlihat kurang sempurna, ganti drive.

Di masa mendatang, pertimbangkan untuk mengotomatisasi pengujian ini melalui smartdperingatan dini kegagalan drive.

(Konten dalam posting ini sudah usang oleh pembaruan pertanyaan. Jika Anda memecahkan masalah yang sama, lihat riwayat edit jawaban ini).

Craig Ringer
sumber
Saya telah menambahkan log postgres dalam pertanyaan. Saya belum mengubah pengaturan default fsyncjadi saya kira, itu diatur ke on. Saya menggunakan HDD. Ya, HDD macet. Saya belum kehabisan ruang disk. Tidak ada kesalahan memori / terlalu panas / tersandung kabel / kerpanic.
ThinkingMonkey
@ThinkingMonkey Seperti apa "HDD crash"? Apakah Anda harus melakukan pemulihan data pada hard drive untuk menyalin file ke drive baru? Apakah Anda harus menjalankan fsckdan melakukan perbaikan sistem file? Tolong detailnya. Tulis kisah kecelakaan Anda.
Craig Ringer
Kecelakaan HDD mengakibatkan menjalankan manual fsckuntuk. Dengan itu memperbaiki trilyun inodes dll. Setelah itu sistem restart. Telah memperbarui hal di atas dalam pertanyaan juga.
ThinkingMonkey
@PikirMonkey OK, jawab diperbarui. TL; DR: buat salinan level sistem file lengkap dari / var / lib / pgsql lalu jalankanpg_resetxlog
Craig Ringer
terima kasih .. ke copy & resetxlog. akan segera kembali dengan hasil.
ThinkingMonkey