Mục lục

1. 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

 

2. Tìm nguyên nhân

1. 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

2. 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.

 

3. 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/

Hiện tại, tôi có tổ chức đều đặn các khóa học về quản trị Oracle Database, tôi sẽ để thông tin ở đây, để bạn nào quan tâm về lịch học cũng như chương trình học có thể theo dõi nhé.

KHOÁ DÀNH CHO NGƯỜI MỚI

KHÓA HỌC: QUẢN TRỊ ORACLE DATABASE THẬT LÀ ĐƠN GIẢN (ADMIN 1)

CÁC KHOÁ NÂNG CAO:

KHÓA HỌC ORACLE NÂNG CAO: QUẢN TRỊ KIẾN TRÚC MULTITENANT 12c

KHÓA HỌC ORACLE NÂNG CAO: QUẢN TRỊ HỆ THỐNG DATA GUARD

CÁC KHOÁ COMBO:

COMBO 1: ADMIN 1 + MULTITENANT 12c

COMBO 2: ADMIN 1 + DATA GUARD

COMBO 3: ADMIN 1 + MULTITENANT 12c + DATA GUARD

LỊCH HỌC:

Mời bạn xem tại đây: LỊCH HỌC CÁC LỚP ORACLE 

ĐĂNG KÝ:

https://forms.gle/MtCAoRQFenP886y79

Hãy tham gia group “Kho tài liệu kiến thức database” để cùng học hỏi và chia sẻ nhé.

0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
1 Comment
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất
Phản hồi nội tuyến
Xem tất cả bình luận
Minh Sự
2 năm trước

Bài này hay, nhưng mà cách làm trên chỉ thực hiện đối với 1 tablespace thôi à, mình muốn nhiều thì phai thêm câu lệnh –tablespace_mapping== tương ứng, ví dụ có ba tablespace thì phải viết ba lần,
–tablespace_mapping==
–tablespace_mapping==
–tablespace_mapping==

1
0
Rất thích suy nghĩ của bạn, hãy bình luận.x