- vừa được xem lúc

Tự động hóa sao lưu PostgreSQL bằng Shell Script

0 0 4

Người đăng: Vinh Phạm

Theo Viblo Asia

Sao lưu đóng vai trò như một mạng an toàn cho bất kỳ ứng dụng nào lưu trữ dữ liệu quan trọng. Nếu bạn đang chạy cơ sở dữ liệu PostgreSQL trên máy chủ Linux, việc tự động hóa các bản sao lưu định kỳ là điều thiết yếu cho khôi phục sau thảm họa và sự an tâm.

Trong bài viết này, chúng ta sẽ khám phá một shell script đơn giản nhưng mạnh mẽ có thể:

  • Xuất dữ liệu của cơ sở dữ liệu PostgreSQL
  • Nén file sao lưu
  • Lưu trữ kèm theo dấu thời gian
  • Chuyển file sang máy chủ từ xa
  • Chỉ giữ lại 10 bản sao lưu gần nhất

Tại sao phải tự động hóa sao lưu PostgreSQL?

Việc sao lưu thủ công rất rủi ro — bạn có thể quên hoặc làm sai cách. Tự động hóa giúp đảm bảo:

  • Tính nhất quán: Mỗi bản sao lưu được thực hiện theo cách giống nhau.
  • Tính minh bạch: Các file sao lưu được đánh dấu thời gian, giúp theo dõi lịch sử.
  • Tính bảo mật: Sao lưu ngoài máy giảm nguy cơ mất dữ liệu.
  • Tính hiệu quả: Các bản sao lưu cũ được dọn dẹp tự động.

Trước khi sử dụng script, hãy đảm bảo:

  • Bạn đã cài đặt và chạy cơ sở dữ liệu PostgreSQL.
  • Tài khoản người dùng có quyền sudo.
  • Bạn có thể dùng scp để sao chép đến máy chủ từ xa qua SSH key (không cần mật khẩu).
  • Thư mục sao lưu /home/ubuntu/backups/ đã tồn tại trên máy chủ từ xa.

Shell Script

Dưới đây là toàn bộ script để tự động sao lưu PostgreSQL:

#!/bin/sh # Set timestamp using system's local time
timestamp=$(date +%Y-%m-%d_%H-%M-%S)
backup_dir="/home/ubuntu/backups"
backup_file="${backup_dir}/${timestamp}.psql.gz" # Dump the PostgreSQL database
sudo su postgres -c "pg_dump -O db_name > /tmp/back.psql" # Compress the backup
gzip -f /tmp/back.psql # Ensure backup directory exists
mkdir -p "$backup_dir" # Move the compressed backup to the backup directory
mv /tmp/back.psql.gz "$backup_file" # Copy the backup file to the remote server
scp "$backup_file" ubuntu@IP:/home/ubuntu/backups/ # Retain only the 10 most recent backups
if [ -d "$backup_dir" ]; then echo "Backup folder exists." cd "$backup_dir" || { echo "Failed to cd into $backup_dir"; exit 1; } ls -t *.psql.gz | tail -n +11 | xargs -r rm -f
else echo "Backup folder does not exist."
fi

Cách sử dụng script này

  • Thay db_name bằng tên thực tế của cơ sở dữ liệu của bạn.
  • Thay IP trong dòng scp bằng địa chỉ IP hoặc hostname của máy chủ từ xa.
  • Cấp quyền thực thi cho script:
chmod +x backup.sh
  • Chạy thủ công hoặc tự động hóa bằng cron:
crontab -e

Ví dụ: chạy sao lưu mỗi ngày lúc 2 giờ sáng:

0 2 * * * /path/to/backup.sh

Phân tích script

1. Gắn dấu thời gian vào tên file

Tạo dấu thời gian không chứa dấu hai chấm, giúp đặt tên file sao lưu duy nhất.

timestamp=$(date +%Y-%m-%d_%H-%M-%S)

2. Xuất dữ liệu và nén

Dùng pg_dump để xuất cơ sở dữ liệu và gzip để nén kết quả. Tùy chọn -O bỏ qua lệnh tạo quyền sở hữu.

sudo su postgres -c "pg_dump -O db_name > /tmp/back.psql"
gzip -f /tmp/back.psql

3. Lưu trữ cục bộ và từ xa

Lưu file sao lưu trên máy cục bộ, sau đó sao chép sang máy chủ từ xa qua scp.

mv /tmp/back.psql.gz "$backup_file"
scp "$backup_file" ubuntu@IP:/home/ubuntu/backups/

4. Dọn dẹp bản sao lưu cũ

Giữ lại 10 bản sao lưu mới nhất và xóa phần còn lại để tiết kiệm dung lượng.

ls -t *.psql.gz | tail -n +11 | xargs -r rm -f

Nâng cao: Tích hợp lưu trữ đám mây (tùy chọn)

Ngoài lưu trữ cục bộ và từ xa, bạn có thể tích hợp với lưu trữ đám mây để tăng độ an toàn.

# Amazon S3 using the AWS CLI
aws s3 cp "$backup_file" s3://your-s3-bucket-name/backups/ # Google Cloud Storage
gsutil cp "$backup_file" gs://your-gcs-bucket/backups/

Sao lưu dữ liệu không phải là tùy chọn — nó là điều bắt buộc. Khi đã tự động hóa quy trình, bạn có thể yên tâm rằng dữ liệu của mình luôn an toàn.

Cảm ơn các bạn đã theo dõi!

Bình luận

Bài viết tương tự

- vừa được xem lúc

The Twelve-Factor App, cẩm nang gối đầu giường trong xây dựng application (Phần 1)

Giới thiệu. Ngày nay các phần mềm được triển khai dưới dạng các dịch vụ, chúng được gọi là các web apps hay software-as-a-service (SaaS).

0 0 47

- vừa được xem lúc

8 Sai lầm phổ biến khi lập trình Android

1. Hard code.

0 0 207

- vừa được xem lúc

Popular interview question: What is the difference between Process and Thread? 10 seconds a day

Video được đăng tại channel Tips Javascript

0 0 45

- vừa được xem lúc

Thuật toán và ứng dụng - P1

Mục đích series. . Những bài toán gắn liền với thực tế. Từ đó thấy được tầm quan trọng của thuật toán trong lập trình.

0 0 47

- vừa được xem lúc

Tác dụng của Docker trong quá trình học tập

Docker bây giờ gần như là kiến thức bắt buộc đối với các anh em Dev và Devops, nhưng mà đối với sinh viên IT nói chung vẫn còn khá mơ hồ và không biết tác dụng thực tế của nó. Hôm nay mình sẽ chia sẻ

0 0 55

- vừa được xem lúc

Làm giàu trong ngành IT

Hầu như mọi người đều đi làm để kiếm tiền, ít người đi làm vì thấy cái nghề đó thú vị lắm. Bây giờ vất cho mình 100 tỷ bảo mình bỏ nghề thì mình cũng bỏ thôi.

0 0 58