Bắt đầu máy chủ PostgreSQL sau khi gặp sự cố ổ cứng trong trạng thái FAILED STATE


10

Tôi đang sử dụng Fedora 15với PostgreSQL 9.1.4. Fedora đã sụp đổ gần đây sau đó:

Một nỗ lực để khởi động máy chủ PostgreSQL:

service postgresql-9.1 start

cho

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

Mặc dù, máy chủ khởi động bình thường khi tôi khởi động máy chủ lần đầu tiên sau khi khởi động lại hệ thống .
Nhưng, một nỗ lực sử dụng psqlcho lỗi này:

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.5432tập tin không có mặt ở bất cứ đâu trên hệ thống. Một locate .s.PGSQL.5432đầu ra không có gì.


Nhật ký hệ thống có cái này:

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.

Một

systemctl status postgresql-9.1.service

cho

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

Tôi đã không thay đổi cài đặt mặc định của fsync vì vậy tôi đoán, nó đã được đặt thành on. Tôi đang ở trên một ổ cứng. Ổ cứng bị hỏng.

Sự cố ổ cứng

Sự cố ổ cứng đã dẫn đến việc chạy một hướng dẫn fscktrên một dấu nhắc và không dựa trên gui. Với nó, nó đang sửa chữa các nút gazillion, v.v. Sau đó, tôi khởi động lại hệ thống với dấu Ctrl+ Alt+ Delete.

Nhật ký của PostgreSQL có điều này:

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

Cập nhật

Cố gắng khởi động máy chủ sau khi lấy một bản sao cấp độ hệ thống tệp của /var/lib/pgsqlthư mục và chạy ./pg_resetxlog -f /var/lib/pgsql/9.1/data/với kết quả xlog -f /var/lib/pgsql/9.1/data/vẫn mang lại:

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

Và nhật ký của Postgres?
Milen A. Radev

@ MilenA.Radev Đã cập nhật câu hỏi với nhật ký của postgres ..
ThinkingMonkey

pg_resetxlogkhông làm gì tốt, vì vậy bạn vào lãnh thổ vui vẻ. Bạn có sao lưu cơ sở dữ liệu này từ trước khi sự cố không?
Craig Ringer

@CraigRinger Có, tôi có một bản sao lưu. Tôi thực sự đang tận hưởng chuyến đi này.
ThinkingMonkey

@ThinkingMonkey Tuyệt vời! Bạn là một trong số ít người được chọn có bản sao lưu tốt :-). Thành thật mà nói, có khả năng DB của bạn có thể sửa chữa được, nhưng vì sự hỏng hóc hệ thống tệp của bạn đã phá hủy các tệp quan trọng, có lẽ bạn sẽ cần một người hiểu rõ thực sự của PG để dành thời gian lấy dữ liệu của bạn. Các dịch vụ có sẵn ở đây: postgresql.org/support/prof Profession_support. Có lẽ nếu bạn có thể đưa ra một số nội dung giả cho pg_multixact/offsets/0000rằng PG sẽ chấp nhận ...
Craig Ringer

Câu trả lời:


15

Câu trả lời thực sự sẽ có trong nhật ký PostgreSQL /var/lib/pgsql/data/pg_log.

Tuy nhiên, trước khi bạn thực hiện bất kỳ hành động nào: Điều quan trọng là bạn phải sao chép cấp độ hệ thống tệp của cơ sở dữ liệu trước khi thử sửa chữa nếu bất kỳ dữ liệu nào của bạn có giá trị đối với bạn . Xem http://wiki.postgresql.org/wiki/Corruption . Bạn phải sao chép toàn bộ thư mục dữ liệu. Trên Fedora /var/lib/pgsql/datatheo mặc định, nhưng xác minh rằng đó là chính xác cho cài đặt của bạn.

Dựa trên nhật ký bạn đã đăng, bạn chắc chắn có một số mức độ tham nhũng cơ sở dữ liệu. Bộ lưu trữ mà cơ sở dữ liệu đang bật (ổ cứng hoặc hệ thống tệp) rất có thể bị hỏng. Lấy một bản sao NGAY BÂY GIỜ và đặt nó vào một ổ đĩa cứng hoặc hệ thống khác .

Chỉ khi bạn đã tạo một bản sao cấp hệ thống tệp đầy đủ của thư mục dữ liệu của mình, hãy thử sử dụng pg_resetxlog để xóa nhật ký giao dịch bị hỏng và khởi động cơ sở dữ liệu của bạn. Ngay cả khi nó bắt đầu, nó rất có khả năng bị hỏng; pg_dumpsau đó bạn nên thực hiện lại initdbvà khôi phục kết xuất về thể hiện mới.

Nếu bạn vẫn không thể khởi động nó sau một thời gian pg_resetxlogthì hãy đăng nhật ký cập nhật về nỗ lực khởi động sau khi resetxlog. Có thể bạn sẽ cần bắt đầu PG ở chế độ độc lập với:

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

Nếu điều đó hoạt động, cung cấp cho bạn backend>lời nhắc, hãy thử lại sau khi thay thế "postgres" cuối cùng bằng tên của DB mà bạn muốn kết nối. Bạn sẽ có thể SELECT, COPYdữ liệu từ các bảng, vv

Nếu điều đó không hiệu quả, tức là bạn không thể bắt đầu một phụ trợ độc lập, thì có lẽ đã đến lúc khôi phục từ các bản sao lưu - vì bạn đủ nhạy cảm để có chúng. Nếu bất cứ ai khác đọc điều này ở cùng một vị trí, hãy liên hệ với chuyên gia tư vấn PostgreQuery có kinh nghiệm để xem họ có thể khôi phục dữ liệu từ cơ sở dữ liệu của bạn không. Hãy chuẩn bị để trả tiền cho thời gian và chuyên môn của họ.

Hệ thống tập tin của bạn có thể bị hỏng

Mức độ nghiêm trọng của thiệt hại đối với bản cài đặt PostgreSQL cho thấy toàn bộ hệ thống tệp của bạn có thể bị hỏng. Bạn có thể muốn xem xét khôi phục toàn bộ hệ thống từ bản sao lưu hoặc cài đặt lại nó.

Tôi sẽ không tin hệ thống tập tin này, fsckhoặc không fsck.

Kiểm tra ổ đĩa thông minh của bạn

Tôi cũng khuyên bạn nên chạy một SMARTkiểm tra trên ổ cứng của bạn smartctltừ smartmontools; giả sử đó là /dev/hdanhư vậy smartctl -d ata -a /dev/sda | less. Tìm kiếm một bài kiểm tra sức khỏe không thành công, uncorrectable_sectorstỷ lệ lỗi đọc cao, reallocated_sector_count lớn hơn 2 hoặc 3 hoặc một zero_pending_sector khác không. Chạy smartctl -d ata -t long /dev/sdađể thực hiện tự kiểm tra không phá hủy trên ổ cứng của bạn; Nó sẽ không làm gián đoạn hoạt động bình thường của hệ thống. Khi hết thời gian ước tính, hãy chạy smartctl -d ata /dev/sdalại và xem nhật ký tự kiểm tra xem nó đã qua chưa.

Nếu bất cứ điều gì trông không hoàn hảo, thay thế ổ đĩa.

Trong tương lai, hãy xem xét tự động hóa thử nghiệm này thông qua smartdcảnh báo sớm về lỗi ổ đĩa.

(Nội dung trong bài đăng này đã bị lỗi thời bởi các cập nhật cho câu hỏi. Nếu bạn đang khắc phục sự cố tương tự, hãy xem lịch sử chỉnh sửa của câu trả lời này).


Tôi đã thêm nhật ký của postgres trong câu hỏi. Tôi đã không thay đổi cài đặt mặc định fsyncvì vậy tôi đoán, nó đã được đặt thành on. Tôi đang ở trên một ổ cứng. Có, ổ cứng bị hỏng. Tôi không hết dung lượng đĩa. Không có lỗi bộ nhớ / quá nhiệt / vấp trên cáp / kerpanic.
ThinkingMonkey

@ThinkingMonkey Loại "sự cố ổ cứng" là gì? Bạn có phải phục hồi dữ liệu trên ổ cứng để sao chép các tập tin vào một ổ đĩa mới không? Bạn đã phải chạy fsckvà sửa chữa hệ thống tập tin? Chi tiết, xin vui lòng. Viết câu chuyện về vụ tai nạn của bạn.
Craig Ringer

Sự cố ổ cứng đã dẫn đến việc chạy một hướng dẫn fsckcho. Với nó, sửa chữa các nút gazillion vv .. Sau đó hệ thống khởi động lại. Đã cập nhật ở trên trong câu hỏi là tốt.
ThinkingMonkey

@ThinkingMonkey OK, trả lời cập nhật. TL; DR: tạo một bản sao hoàn chỉnh ở cấp hệ thống tệp / var / lib / pssql sau đó chạypg_resetxlog
Craig Ringer

cảm ơn .. lên bản sao & resetxlog. sẽ trở lại với kết quả sớm.
ThinkingMonkey
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.