Hướng dẫn backup db mssql hàng ngày

Khi chạy lệnh này, bạn sẽ tạo ra 1 file /root/list_DBs.txt chứa toàn bộ danh sách database có trong VPS của bạn. Bước 2: Tiếp tục chúng ta sẽ tạo ra 1 script chứa câu lệnh backup. Tạo 1 thư mục chứa Database của bạn.

mkdir /home/DB/

Tạo script backup toàn bộ database

vi /root/backup.sh

Tiếp đến hãy copy đoạn script bên dưới vào file backup.sh Chú ý: Sau khi Copy vào bạn phải sửa lại MATKHAUPHPMYADMIN bằng mật khẩu root của phpmyadmin, cũng như đường dẫn lưu file DBs, ở đây mình ví dụ là /home/DB

#!/bin/bash USER="root" PASSWORD="MATKHAUPHPMYADMIN" OUTPUT="/home/DB" rm "$OUTPUT/*gz" > /dev/null 2>&1 databases=`cat /root/list_DBs.txt` for db in $databases; do if [[ "$db" != "information_schema" ]] && [[ "$db" != _* ]] ; then echo "Dumping database: $db" mysqldump --force --opt --user=$USER --password=$PASSWORD --databases $db > $OUTPUT/`date +%Y%m%d`.$db.sql gzip $OUTPUT/`date +%Y%m%d`.$db.sql fi done

Nhấn :wq để lưu lại script trên, chúng ta có file backup.sh Lưu ý: Nếu VPS của bạn cài directadmin, bạn không biết pass mặc định của root là gì, bạn có thể sử dụng lệnh sau để xem

cat /usr/local/directadmin/scripts/setup.txt

Bước 3: Kiểm tra xem file này chạy được chưa. Nếu chạy được chúng ta sẽ có các file database trong /home/DB Gõ lệnh:

sh /root/script/backup.sh

Nếu không chạy thì gõ lệnh

/root/backup.sh

Bước 4: Đặt lịch backup tự động cho VPS. Bây giờ chúng ta sẽ sử dụng crontab có sẵn trong hệ điều hành Linux. Ở trong Ví dụ này Tú sẽ backup hàng ngày và vào lúc 03:15 phút sáng hàng ngày.

15 3 * * 0 sh /root/script/backup.sh

Vậy là xong, chúng ta đã có 1 script chất lượng, tự động backup database mỗi ngày mà không có mất tiền thuê đơn vị cung cấp host backup.

Áp dụng với Server sử dụng Ubuntu

Với server chạy ubuntu thì đoạn script trên có thể bị lỗi bash code. Vì thế bạn thay đoạn script trên bằng đoạn script này.

#!/bin/bash USER="root" PASSWORD="MATKHAUPHPMYADMIN" BACKUP_PATH="/home/DB" databases=`mysql -u $USER -p$PASSWORD -e "SHOW DATABASES;" | tr -d "| " | grep -v Database` for db in $databases; do if [[ "$db" != "information_schema" ]] && [[ "$db" != "performance_schema" ]] && [[ "$db" != "mysql" ]] && [[ "$db" != _* ]] ; then echo "Dumping database: $db" mysqldump -u $USER -p$PASSWORD --databases $db > $BACKUP_PATH/`date +%Y%m%d`.$db.sql fi done

Với Ubuntu thì để kiểm tra xem backup.sh này có hoạt động hay không, bạn sẽ gõ

./backup.sh

Vậy bạn đã hoàn tất những gì cần làm.

Chúc bạn thành công !

  • Theo dõi:

"Hạnh phúc không phải là nhận, hạnh phúc chính là sự cho đi" - đây là lý do Tú xây dựng Blog này. Bài viết trên dự dựa trên quan điểm, hiểu biết của cá nhân. Nó có thể đúng, cũng có thể sai tùy thời điểm, vì vậy bạn phải tự cân nhắc và chịu trách nhiệm khi làm theo. Nếu bạn thấy nội hữu ích với bạn, hãy Mời Tú Cao một tách CÀ PHÊ.

Tập lệnh Shell cho phép bạn dễ dàng tự động hóa các tác vụ và quy trình trong Linux. Khi bạn chạy một trang web, bạn có thể cần thường xuyên sao lưu cơ sở dữ liệu MySQL của mình. Bạn có thể dễ dàng thực hiện việc này bằng cách sử dụng shell script. Trong bài viết này, chúng ta sẽ cùng tìm hiểu cách tạo tập lệnh shell để sao lưu cơ sở dữ liệu MySQL.

1. Tạo Shell Script

Mở terminal và chạy lệnh sau để tạo tệp shell script trống.

2. Thêm shell script để sao lưu MySQL

Thêm đoạn code sau vào tệp tập lệnh shell của bạn. Thay thế dbname, dbuser và dbpass bằng tên cơ sở dữ liệu, tên người dùng và mật khẩu tương ứng của bạn.

Lưu và đóng tập tin.

Trong đoạn code trên, trước tiên chúng ta cần phải xác định môi trường thực thi cho shell script. Sau đó, lặp lại message để biết rằng quá trình sao lưu đã bắt đầu. Tiếp theo, tạo một biến day để lưu trữ tên ngày hiện tại [Chủ nhật, Thứ hai, v.v.]. Ta sử dụng biến này để xác định tên tệp của tệp sao lưu cuối cùng [.sql] để sao lưu cơ sở dữ liệu. Kế tiếp, chúng ta chạy lệnh MySQL để sao lưu cơ sở dữ liệu và lưu trữ nó trong thư mục/home. Cuối cùng, ta lặp lại một message khác cho biết quá trình sao lưu cơ sở dữ liệu đã hoàn tất.

Trong trường hợp này, tập lệnh sẽ tạo mydb_Sunday.sql vào Chủ nhật, mydb_Monday.sql vào thứ Hai, v.v., cung cấp cho bạn bản sao lưu trong 7 ngày qua nếu bạn chạy tập lệnh hàng ngày.

Hãy chỉ ra đường dẫn đầy đủ của tệp sao lưu của bạn để bạn biết nó được tạo ở đâu và không gặp phải bất kỳ thông báo lỗi nào về “Permission Denied”.

Nếu bạn muốn nén dữ liệu sao lưu ở trên, bạn có thể sửa lại lệnh mysqldump như hình. Về cơ bản, chúng ta chuyển đầu ra của lệnh mysqldump sang lệnh gzip để tạo tệp gzip. Do đó, chúng ta có thể sửa đổi tên tệp cuối cùng để sao lưu thành tệp .gz thay vì tệp .sql.

3. Cách để thực thi Shell Script

Để thực thi tệp shell của bạn, hãy chạy lệnh sau:

4. Kiểm tra tập lệnh shell

Chạy shell script bằng lệnh sau:

5. Tự động sao lưu DB

Bạn thậm chí có thể thêm lệnh trên dưới dạng cronjob để thường xuyên sao lưu cơ sở dữ liệu hàng ngày/tuần/tháng theo yêu cầu của bạn. Dưới đây là một ví dụ. Mở tệp crontab bằng lệnh sau.

$ sudo crontab -e

Thêm dòng sau đây vào nó. Nó sẽ chạy tập lệnh db_backup.sh của bạn hàng ngày lúc 10 giờ sáng. Bạn có thể thay đổi tập lệnh đó theo yêu cầu của mình.

Lưu và đóng tập tin. Trong đó:

  • “0 10 * * *” chỉ ra rằng công việc định kỳ sẽ được chạy hàng ngày vào lúc 10 giờ sáng
  • “sudo /home/db_backup.sh” là lệnh được chạy cho công việc định kỳ.
  • “> /dev/null 2>&1” chỉ ra rằng tất cả các thông báo lỗi và đầu ra tiêu chuẩn phải được gửi tới /dev/null, tức là không được hiển thị.

Hãy lưu ý rằng bạn sử dụng từ khóa sudo trong khi lên lịch cronjob, để tránh lỗi "Permission Denied". Ngoài ra, hãy chỉ ra đường dẫn đầy đủ đến tập lệnh shell của bạn để tránh lỗi "File not Found".

Trong bài viết này, chúng ta đã biết cách tạo shell script để sao lưu cơ sở dữ liệu MySQL, đồng thời tạo cronjob để chạy shell script hàng ngày. Điều này sẽ đảm bảo rằng bạn có thể thường xuyên sao lưu cơ sở dữ liệu của mình. Nếu bạn chạy tập lệnh shell ở trên hàng ngày dưới dạng cronjob, nó sẽ tạo 7 tệp sao lưu khác nhau, mỗi tệp tương ứng cho mỗi ngày trong tuần, do đó bạn sẽ có bản sao lưu trong 7 ngày qua. Hàng ngày, nó sẽ ghi đè lên tệp sao lưu tương ứng có cùng tên tệp của tuần trước, bạn sẽ nhận được 7 bản sao lưu gần đây nhất.

Chủ Đề