cac loi thuong gap khi khoi dong

Có một số lý do phổ biến khiến PostgreSQL không thể khởi động.

Việc đầu tiên là bạn hãy kiểm tra file log khi khởi động để xem PostgreSQL báo lỗi gì.

Dưới đây tôi sẽ giải thích chi tiết hơn một số thông báo lỗi phổ biến nhất.


   Lỗi thường gặp 1: Address already in use

LOG:  could not bind IPv4 address "127.0.0.1": Address already in use
HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
FATAL:  could not create any TCP/IP sockets

Nguyên nhân của lỗi này là do bạn đã cố gắng khởi động PostgreSQL trên port 5432 nhưng port này đã có 1 chương trình khác chiếm dụng rồi (có thể là 1 instance PostgreSQL khác hoặc 1 chương trình bất kỳ nào đó)

Để tìm ra chương trình nào đang chiếm dụng port, bạn có thể dùng lệnh sau:

netstat -ltnp | grep -w ':5432'

(Lệnh này áp dụng trên Linux 7, với các version hoặc distro Linux khác, bạn có thể search câu lệnh tương tự)

Kết quả có thể như sau:

tcp6       0      0 :::5432                 :::*                    LISTEN      6386/httpd

Điều này có nghĩa là chương trình httpd đang chiếm dụng port 5342 rồi. Bây giờ bạn có thể quyết định là kill tiến trình đang chiếm dụng port 5432 đi hoặc là khởi động lại PostgreSQL ở một port khác.

Để thay đổi port, bạn cần thay đổi tham số port trong cấu hình của PostgreSQL. Bạn có thể tham khảo bài viết sau:

Đọc thêm  Cấu hình tham số trong PostgreSQL

   Lỗi thường gặp 2:

FATAL:  could not create shared memory segment: Invalid argument
DETAIL:  Failed system call was shmget(key=5440001, size=4011376640, 03600).

có thể có nghĩa là tham số kernel limit trên hệ điều hành về kích thước share memory nhỏ hơn vùng làm việc mà PostgreSQL đang cố gắng tạo (4011376640 byte trong ví dụ này).

Trong trường hợp này, bạn điều chỉnh lại tham số shared_buffers để nhỏ hơn kernel limit,  hoặc sửa kernel limit trên hệ điều hành để tăng kích thước bộ nhớ chia sẻ.

Đọc thêm  Cấu hình tham số trong PostgreSQL

Bạn cũng có thể thấy thông báo lỗi này khi khởi động nhiều instance PostgreSQL trên cùng một máy chủ, nếu tổng dung lượng shared_buffers của chúng được yêu cầu vượt quá kernel limit.

Đọc thêm  Các tham số cấu hình Memory trong PostgreSQL

   Lỗi thường gặp 3: No space left on device

FATAL:  could not create semaphores: No space left on device
DETAIL:  Failed system call was semget(5440126, 17, 03600).

Lỗi này không có nghĩa là ổ cứng của bạn đã hết. Nó có nghĩa là kernel limit về số lượng semaphores trên hệ điều hành nhỏ hơn số lượng mà PostgreSQL muốn tạo. Do đó, bạn có thể khắc phục sự cố bằng cách khởi động máy chủ và giảm số lượng connection có thể kết nối (max_connections), hoặc bạn có thể tăng kernel limit lên.

Đọc thêm  Semaphore trong Linux là gì

Nguồn: https://dangxuanduy.com/

Xin cho tôi được biết, bạn cảm thấy bài viết này như thế nào? Ý kiến của bạn sẽ giúp tôi nâng cao chất lượng bài viết của mình.

    Hãy chia sẻ bài viết này nếu bạn thấy có ích nhé
    0 0 votes
    Article Rating
    Subscribe
    Notify of
    guest
    0 Comments
    Inline Feedbacks
    View all comments