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"
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).
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 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é.
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==