Dĩ nhiên backup sql thường xuyên là cần thiết. bài này mình hướng dẫn các bạn dùng script shell backup database postgre

cách viết script shell linux backup database postgre

2021-01-18 2193 lượt xem
Trương Thanh Hùng

Bất kỳ cơ sở dữ liệu nào cũng cần sao lưu. 

Tạo một tập lệnh shell sẽ kết xuất cơ sở dữ liệu PostgreSQL

Nếu bạn chưa biết lệnh shell hay bash là gì thì cũng không quan trọng lắm vì bài này toàn bộ là thao tác.

bạn có thể tìm hiểu thêm về shell ở đây: Shell Scripting Tutorial

# đi tới thư mục ~ của linux
cd ~ 
# tạo folder scripts 
mkdir scripts 
# nếu bạn làm việc với ubuntu bạn sẽ có nano, hoặc thích thì sài vim
# tóm lại là để tạo ra 1 file có tên db_backip.sh
nano db_backup.sh

Sao chép và dán tập lệnh bên dưới vào file vừa tạo và bạn nhớ sửa lại mấy cái biến mình có comment tiếng việt có dấu nhé ( USER_POSTGRE, PASSWORD_POSTGRE, DEST, DB_NAME ). Lưu ý đừng có xóa mất dòng #!/bin/bash nha

#!/bin/bash

# thông thường với postgre thì user là postgres nên mình để mặc định, bạn có thể thay đổi
USER_POSTGRE=postgres
PASSWORD_POSTGRE=MATKHAUPHPPOSTGRES

DIR=`date +%d-%m-%y`
# thư mục bạn muốn file sql được tạo ra
DEST=/var/www/$DIR
mkdir $DEST

# database name mà bạn muốn dump
DB_NAME=DATABASENAME
echo "Dumping database: $DB_NAME"
PGPASSWORD=$PASSWORD_POSTGRE pg_dump -h 127.0.0.1 -p 5432 -U $USER_POSTGRE $DB_NAME > $DEST/$DB_NAME.sql 

Để lưu những thay đổi khi bạn dùng nano thì bạn sử dụng ctrl + O và để lưu là ctrl + X 

Thực thi lệnh shell

Sau khi đã điền đầy đủ mọi thông tin bạn có thể chạy thực thi lệnh shell đó để lưu trữ. 

# hiện tại file db_backup.sh chưa có quyền thực thi đâu. bạn thêm quyền vào như sau: 
chmod +x ~/scripts/db_backup.sh
# Chạy:
sh ~/scripts/db_backup.sh
# kết quả:Dumping database: DB_NAME

Cách thiết lập Cron

sau khi bạn chạy thành công không thấy lỗi gì thì lúc này bạn có thể thiết lập cron để tự động vào 1 khung giờ nhất định nào đó thì server sẽ tự backup cho bạn

# mở editor chỉnh sửa cron
crontab -e

Copy và patse lệnh dưới đây vào cuối để thêm cron tự động hóa

0 0 * * * ~/scripts/db_backup.sh # mỗi tối lúc 0 giờ 0 phút nó sẽ chạy 

Bonus thêm

 Ở trên mình mới trình bày cách backup 1 db, vì mình thấy ng ta nên chia ra từng roll tách biệt chứ không backup 1 nùi db vào chung 1 thời điểm. Nhưng nếu bạn muốn thì bạn hoàn toàn có thể làm bằng lệnh for trong shell. 

# cú phápfor trong shell
#!/bin/bash
# declare an array called array and define 3 vales
array=( one two three )
for i in "${array[@]}"
do
    echo $i
done

 Và thông thường ng ta có backup thì cũng cho đi vào 1 nơi nào đó ví dụ Amazon S3, google drive, git, ... 

Mình có code 1 đoạn shell mình hay dùng để backup dữ liệu lên google drive kết hợp php. bạn xem nếu cần bạn có thể sử dụng giống mình. bạn xem bài viết Hướng dẫn cách backup database postgre tự động vào google drive

bài viết trong chủ đề