Photo of author

By Admin

Hướng dẫn Backup DB với Laravel và Dropbox API

Xin chào các bạn, mình xin tái xuất hiện. Chắc chắn những bạn làm web, đặc biệt là WordPress, thường xuyên phải thực hiện sao lưu cơ sở dữ liệu để đề phòng trường hợp máy chủ web bị tấn công hoặc xảy ra lỗi dẫn đến mất dữ liệu. Việc xây dựng lại giao diện web có thể thực hiện được, nhưng việc khôi phục dữ liệu lại là một thách thức đáng lo ngại. Tính năng sao lưu cơ sở dữ liệu này mình sử dụng cho blog của mình, nhằm đảm bảo an toàn trong trường hợp bị hacker tấn công.

Có nhiều phương pháp để thực hiện công việc này, ban đầu mình định sử dụng api put file của Slack, nhưng sau đó mình nhận thấy nó hơi phức tạp. Vì vậy, mình đã tìm thấy Dropbox, một dịch vụ lưu trữ đám mây vừa tiện lợi vừa miễn phí, và quyết định sử dụng nó. Framework PHP mà mình lựa chọn là Laravel.

Laravel là một framework PHP mạnh mẽ và hỗ trợ rất nhiều công cụ hữu ích cho lập trình viên. Còn Dropbox là một dịch vụ lưu trữ đám mây, với tài khoản miễn phí, bạn có thể lưu trữ được lên đến 2GB dữ liệu. Với điều đó, bạn có thể yên tâm sao lưu dữ liệu một cách tự do. Đủ nói dông dài, bây giờ chúng ta sẽ bắt đầu vào vấn đề chính.

1) Khởi tạo dropbox

Bước 1: Các bạn hãy truy cập vào trang dropbox.com và đăng ký một tài khoản bằng Google hoặc Facebook.

Bước 2: Tiếp theo, hãy truy cập vào địa chỉ developer của Dropbox tại đây. Các bạn tạo một ứng dụng bằng cách nhấp vào "Create apps". Giao diện sẽ hiện ra như bên dưới. Các bạn hãy chọn quyền truy cập cho ứng dụng và đặt tên cho nó.

Bước 3: Sau khi tạo xong ứng dụng, hãy kéo xuống dưới của tab "Settings" và tạo Access Token. Hãy để cho token không có thời hạn hết nhé.

Bước 4: Chuyển sang tab permission và chọn quyền ghi tệp cho ứng dụng.

Vậy là mình đã xong các bước cơ bản cho việc setting quyền của Dropbox.

2) Backup data với Laravel

Tương tự như các framework khác, phần docs của Laravel cũng viết khá đầy đủ và chi tiết về phần cài đặt, mình xin phép không đi sâu vào cái này. Ae có thể tham khảo thêm tại đây.

Sau khi tạo project, mình sẽ tạo 1 command để backup dữ liệu bằng lệnh artisan

php artisan make:command DailyBackupDb

Oke sau đó mình sẽ cài mysqldump để export data ra sql.

Ví dụ lệnh export db là:

mysqldump -u nampth -p123456 --all-databases > storage/app/all_db_backup.sql

Lệnh này thực hiện việc export tất cả database ở localhost với username là nampth và password là 123456 và sẽ lưu ra file all_db_backup.sql ở thư mục storage/app => vậy là đã có file CSDL rồi. tiếp theo mình sẽ thực hiện đoạn code để đẩy lên Dropbox

Đoạn code sau trong hàm handle của Command nhé ae.

shell_exec('mysqldump -u nampth -p123456 --all-databases > storage/app/all_db_backup.sql');
$content = file_get_contents(storage_path('app/all_db_backup.sql'));
$ch = curl_init();
$fileName = date('Y-m-d') . "-all_db_backup.sql";
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Bearer ' . env('DROPBOX_ACCESS_TOKEN'),
    'Content-Type: application/octet-stream',
    "Dropbox-API-Arg: {\\"path\\": \\"/$fileName\\",\\"mode\\": \\"overwrite\\",\\"autorename\\": false,\\"mute\\": false,\\"strict_conflict\\": false}"
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
curl_setopt($ch, CURLOPT_URL, API_UPLOAD_FILE);
$result = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Đoạn code trên đơn giản là chỉ dùng hàm shell_exec để dump DB ra & curl để đẩy file lên dropbox thôi. Ngoài ra có 1 số constant mình sử dụng là dropbox access token chính là token bên trên các bạn lấy từ dropbox, và API upload file thì mình sử dụng api này.

https://content.dropboxapi.com/2/files/upload

Ngon rồi. Chạy test thử thấy ok và mình sẽ set thời gian chạy hàng ngày cho Command này bằng việc setting trong file Kernel.php như sau

$schedule->command('db:backup')
->timezone('Asia/Ho_Chi_Minh')
->runInBackground()
->daily()
->evenInMaintenanceMode();

3) Triển khai & sử dụng

Phần code trên khá đơn giản phải không ae. Sau khi đóng gói lại và ném lên server, ae nhớ setup cho server chạy lệnh của mình bằng việc thêm dòng sau vào file crontab

* * * * cd /path/to/yourfolder && php artisan schedule:run >> /dev/null 2>&1

Sau đó, hàng ngày các bạn sẽ thấy trên thư mục dropbox của mình các file CSDL như bên dưới. Khá ngon ae nhỉ & cũng dễ dùng nữa. Nếu cần mình chỉ việc lấy theo ngày về và import lại là được.

Bên cạnh việc đảm bảo rằng quá trình backup diễn ra mượt mà và dễ dàng theo dõi, một giải pháp hữu ích mà bạn có thể thực hiện là thêm tính năng webhook để nhận thông báo trên Slack. Điều này giúp bạn kiểm tra xem quá trình backup có vấn đề gì không một cách nhanh chóng.

Để sử dụng tính năng này, bạn chỉ cần đăng ký một workspace trên Slack, tạo một channel mới và sau đó tạo một webhook. Việc này khá đơn giản và chỉ mất vài bước. Khi đã thiết lập xong, mọi thông báo từ quá trình backup sẽ được tự động gửi đến channel bạn đã chỉ định. Điều này giúp bạn dễ dàng theo dõi và giám sát mọi hoạt động mà không cần phải liên tục kiểm tra.

Đừng quên rằng có nhiều dịch vụ Slack miễn phí mà bạn có thể tận dụng, vì vậy không có lý do gì bạn không thể thử nghiệm tính năng này một cách thoải mái. Hãy tận hưởng những tiện ích mà các công nghệ miễn phí mang lại và đảm bảo rằng quá trình backup của bạn luôn diễn ra an toàn và hiệu quả.

Phần hướng dẫn của mình đã hết. Cảm ơn mọi người đã đọc bài.

Bài viết này mình lưu trữ mục đích để thử làm cá nhân vào 1 thời gian rảnh.

Nguồn: nho1ti.com

Đánh giá bài viết

Đánh giá: 0 / 5. Vote: 0

Viết một bình luận