Mục lục
1. Tình huống
Như chúng ta đã biết ở bài trước, Write-ahead log (WAL) là file ghi lại các thay đổi xảy ra trong database. Nó nhằm mục đích khôi phục lại database cluster, khi nó bị crash hay shutdown đột ngột.
Tuy nhiên, liệu chúng ta có thể khôi phục lại database cluster tại bất cứ thời điểm nào trong quá khứ được hay không? Câu trả lời là: Có thể được, nhưng chỉ có WAL file không thì không đủ.
Nguyên nhân là bởi: WAL file chỉ lưu trữ với số lượng giới hạn. Những WAL file mới được sinh ra thì những WAL file cũ, không cần thiết nữa sẽ bị xóa đi. Do đó, chúng ta không thể có đủ thông tin để restore lại bất cứ thời điểm nào chúng ta muốn.
Từ đó, giải pháp đưa ra cũng rất đơn giản: Backup WAL file cũ ra 1 chỗ khác thay vì xóa hẳn WAL file đó luôn. WAL file backup này gọi là Archive Log
2. Lý thuyết về Archive log mode
Chế độ archive log mode được điều khiển bởi tham số archive_mode. Khi giá trị archive_mode = on, tức là chế độ archive mode đã được kích hoạt.
Lúc này, mỗi khi một WAL file được ghi đầy, PostgreSQL sẽ gọi tiếp câu lệnh xử lý được đặt trong tham số archive_command.
Không như các hệ quản trị khác như Oracle, bạn chỉ cần chỉ ra thư mục archive log, PostgreSQL cho phép bạn tùy ý viết câu lệnh truyền WAL file tới bất cứ đâu bạn muốn. Nó có thể đơn giản là 1 câu lệnh copy (cp), hoặc thậm chí là cả 1 shell script phức tạp.
Đây là 1 ví dụ đơn giản về archive_command:
archive_command = 'test ! -f /backup/archive/%f && cp %p /backup/archive/%f'
Giá trị của archive_command này có ý nghĩa: Mỗi khi một WAL file được ghi đầy, PostgreSQL sẽ thực hiện kiểm tra xem file archive log đã được sinh ra trong thư mục /backup/archive/ hay chưa, và copy WAL file sang thư mục /backup/archive/ nếu chưa có file.
Nếu câu lệnh trong archive_command thực hiện thành công, PostgreSQL sẽ hiểu là quá trình archive WAL file đã thực hiện thành công và có thể xóa WAL file được rồi.
Tuy nhiên, nếu câu lệnh trong archive_command gặp lỗi, PostgreSQL sẽ hiểu là quá trình archive WAL file thất bại và sẽ cố gắng thử lại cho đến khi archive thành công.
Trong quá trình archive bị lỗi, WAL file vẫn được sinh ra liên tục và không tự xóa được.
Điều này có thể dẫn đến rủi ro, phân vùng chứa WAL file bị đầy, và có thể dẫn đến dừng PostgreSQL database. Do đó, bạn nhớ chú ý, đừng để phân vùng WAL hay archive bị đầy nhé.
3. Cấu hình archive log mode
1. Kiểm tra tham số archive_mode
postgres=# show archive_mode ; archive_mode -------------- off (1 row)
Như vậy là chế độ archive log mode chưa được kích hoạt
2. Kiểm tra wal_level
Để kích hoạt được archive log mode, yêu cầu bắt buộc wal_level phải từ replica trở lên.
postgres=# show wal_level ; wal_level ----------- replica (1 row)
Như vậy, wal_level đã thỏa mãn rồi
Nếu giá trị wal_level = minimum, bạn thay đổi nó bằng câu lệnh sau:
alter system set wal_level = replica;
3. Tạo thư mục lưu archive
Chúng ta cần tạo thư mục để lưu archive và chú ý thư mục đó phải cho phép user postgres có thể đọc ghi vào
# mkdir -p /backup/archive/ # chown postgres:postgres /backup/archive/
4. Chỉnh sửa tham số archive_mode và archive_command;
alter system set archive_mode = on; alter system set archive_command = 'test ! -f /backup/archive/%f && cp %p /backup/archive/%f';
5. Restart PostgreSQL
$ pg_ctl restart
và kiểm tra lại thư mục /backup/archive/ xem WAL file đã được copy sang chưa
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é.