Lỗi backup khi sử dụng pg_basebackup

   Mô tả lỗi

Khi bạn backup database cluster bằng pg_basebackup, bạn có thể gặp lỗi sau:

$ pg_basebackup -D /var/lib/pgsql/13/backup
pg_basebackup: error: directory "/data/tbs_index" exists but is not empty
pg_basebackup: removing contents of data directory "/var/lib/pgsql/13/backup"
Đọc thêm  Backup database PostgreSQL bằng pg_basebackup

   Tìm nguyên nhân

   Kiểm tra tablespace trong database

postgres=# \db
           List of tablespaces
    Name    |  Owner   |     Location     
------------+----------+------------------
 pg_default | postgres | 
 pg_global  | postgres | 
 tbs_index  | postgres | /data/tbs_index
(3 rows)

Như các bạn thấy: Thư mục /data/tbs_index/ chính là nơi đặt tablespace tbs_index.

Tiếp theo, bạn kiểm tra thư mục pg_tblspc trong data directory (là thư mục chứa đường dẫn tablespace) sẽ thấy có một link đang gắn với thư mục /data/tbs_index

$ cd pg_tblspc/
$ ls -l
total 0
lrwxrwxrwx 1 postgres postgres 34 May 24 09:58 25403 -> /data/tbs_index

   Cơ chế của pg_basebackup

Khi bạn thực hiện câu lệnh pg_basebackup trên cùng máy chủ chứa PostgreSQL, toàn bộ file và thư mục trong data directory của PostgreSQL sẽ được sao lưu vào thư mục bạn chọn để lưu backup (ở đây là /var/lib/pgsql/13/backup)

Tuy nhiên, các tablespace được bạn tạo ra nằm ở bên ngoài data directory, pg_basebackup sẽ không thể lưu chúng vào trong thư mục backup được. Nguyên nhân là bởi, nếu làm thế sẽ làm sai lệch cấu trúc của data directory (do link trong pg_tblspc vẫn đang trỏ sang đường dẫn /data/tbs_index).

Đọc thêm  Quản lý tablespace trong PostgreSQL
Đọc thêm  Ý nghĩa các thư mục trong PostgreSQL

Do đó PostgreSQL cung cấp cho bạn 1 tham số để áp dụng khi gặp tình huống này.


   Giải pháp

Tham số tablespace-mapping cho phép bạn chuyển sao lưu thư mục chứa tablespace sang 1 đường dẫn khác.

$ pg_basebackup -D /var/lib/pgsql/13/backup --tablespace-mapping=/data/tbs_index=/var/lib/pgsql/13/backup/tbs_index

Ghi chú:

   –tablespace_mapping=<đường dẫn gốc>=<đường dẫn backup>

Ở đây tôi đã chuyển thư mục /tbs/index sang thư mục /var/lib/pgsql/13/backup/tbs_index

Kết quả, sau khi backup xong là đây:

Tôi di chuyển vào thư mục pg_tblspc để kiểm tra link:

Các bạn thấy đó, đường link đã được cập nhật về đường dẫn backup. Như vậy, bản backup này đã đầy đủ, hoàn toàn có thể khôi phục được trong tình huống cần thiết.

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