2013-10-02 28 views
10

Trước đây tôi đã nhận được rất nhiều sự trợ giúp từ cộng đồng SO, vì vậy một khi tôi đã tìm ra điều này, tôi nghĩ đây là cơ hội của tôi để trả lại một chút. Hy vọng nó giúp ai đó.Sao lưu cơ sở dữ liệu MySQL sang Dropbox

Vấn đề tôi gặp phải là có trang web cốt lõi được xây dựng trên WordPress, với cơ sở dữ liệu khác cho phần thương mại điện tử của trang web, tôi muốn sao lưu toàn bộ trang web (tất cả các tệp, cả cơ sở dữ liệu, v.v.) Dropbox trên cơ sở hàng ngày.

Sau một tìm kiếm dài, tôi không thể tìm thấy bất cứ điều gì đã làm chính xác những gì tôi đang tìm kiếm.

Tuyên bố từ chối trách nhiệm: Bạn không cần phải chạy WordPress hoặc trang web thương mại điện tử để làm việc này. Nó sẽ làm việc trên bất kỳ cơ sở dữ liệu MySQL nào và yêu cầu PHP.

Tôi đã xem qua số WordPress Backup to Dropbox plugin, điều này giúp tôi có 90% ở đó. Plugin cho phép tôi sao lưu tất cả các tệp trên trang web cộng với nó sao lưu cơ sở dữ liệu WordPress ở tần suất bạn lên lịch.

Vấn đề là plugin chỉ thực hiện sao lưu cơ sở dữ liệu WordPress, chứ không phải cơ sở dữ liệu thương mại điện tử của tôi.

Tôi cũng đã tìm thấy hướng dẫn MySQL backup to Dropbox (tín dụng khi đến hạn), một số mã bên dưới được dựa trên. Đây là một hướng dẫn tuyệt vời, nhưng tôi muốn nó sao lưu và xóa bản sao lưu vào các thời điểm khác nhau - hướng dẫn được sao lưu và xóa tất cả cùng một lúc.

+0

Tốt Tutorial :) –

Trả lời

12

Giải pháp tôi đưa ra không dành riêng cho WordPress hoặc trang web thương mại điện tử. Bất cứ ai có cơ sở dữ liệu MySQL và có thể chạy PHP sẽ có thể hưởng lợi từ việc này. Có lẽ với một vài điều chỉnh cho câu trả lời của tôi, nhưng họ vẫn có thể đạt được kết quả cuối cùng.

Để lưu bản sao lưu cơ sở dữ liệu thương mại điện tử, tôi đã tạo thư mục trong thư mục gốc của trang web (/ temp - gọi nó là bất kỳ thứ gì bạn muốn). Sau đó, tôi đã thực sự tạo bản sao lưu cơ sở dữ liệu. Mở một trình soạn thảo văn bản và tạo một tệp có tên là backup_dropbox.php.

backup_dropbox.php

<?php 
// location of your /temp directory relative to this file. In my case this file is in the same directory. 
$tempDir = ""; 
// username for e-commerce MySQL DB 
$user = "ecom_user"; 
// password for e-commerce MySQL DB 
$password = "ecomDBpa$$word"; 
// e-commerce DB name to backup 
$dbName = "ecom_db_name"; 
// e-commerce DB hostname 
$dbHost = "localhost"; 
// e-commerce backup file prefix 
$dbPrefix = "db_ecom"; 

// create backup sql file 
$sqlFile = $tempDir.$dbPrefix.".sql"; 
$createBackup = "mysqldump -h ".$dbHost." -u ".$user." --password='".$password."' ".$dbName." > ".$sqlFile; 
exec($createBackup); 

//to backup multiple databases, copy all of the above code for each DB, rename the variables to something unique, and set their values to whatever is appropriate for the different databases. 
?> 

Bây giờ kịch bản này nên tạo một bản sao lưu cơ sở dữ liệu "ecom_db_name" bất cứ khi nào nó được chạy. Để có được nó chạy trên một khoảng thời gian dự kiến ​​(tôi muốn nó chạy chỉ một vài phút trước khi sao lưu WordPress của tôi bắt đầu chạy lúc 7 giờ sáng). Bạn có thể sử dụng WP-Cron (nếu trang web của bạn nhận đủ lưu lượng truy cập để kích hoạt nó một cách đáng tin cậy để chạy vào đúng thời điểm) hoặc lên lịch công việc cron.

Tôi không có chuyên gia về công việc cron và các loại lệnh này, vì vậy có thể có cách tốt hơn. Tôi đã sử dụng điều này trên hai trang web khác nhau và chạy chúng theo hai cách khác nhau. Chơi xung quanh với những gì hoạt động tốt nhất cho bạn.

Cách thứ nhất nằm trên thư mục không được bảo vệ bằng mật khẩu, thứ hai là dành cho password protected directory. (Thay thế tên người dùng và mật khẩu bằng tên người dùng và mật khẩu của bạn, và rõ ràng là đặt example.com/temp/backup_dropbox.php vào bất cứ nơi nào tệp nằm trên máy chủ của bạn).

Cron Công việc chạy backup_dropbox.php 5 phút trước khi WP backup

55 6 * * * php /home/webhostusername/public_html/temp/backup_dropbox.php 

HOẶC

55 6 * * * wget -q -O /dev/null http://username:[email protected]/temp/backup_dropbox.php 

Bây giờ công việc định kỳ được thiết lập để chạy backup_dropbox.php và tạo bản sao lưu cơ sở dữ liệu của tôi mỗi ngày tại 06:55. Việc sao lưu WordPress vào Dropbox bắt đầu lúc 7 giờ sáng thường mất khoảng 5-6 phút, nhưng có thể lâu hơn một chút.

Tôi muốn xóa tệp sao lưu .sql của mình sau khi đã sao lưu thành công vào Dropbox để không ngồi đó mãi mãi cho ai đó bằng cách nào đó mở/tải xuống tệp cơ sở dữ liệu.

Bật lại trình chỉnh sửa văn bản và tạo một tệp khác có tên là clr_bkup.php.

clr_bkup.php

<? 
$tmpDir = ""; 
//delete the database backup file 

unlink($tmpDir.'db_ecom.sql'); 
// if you had multiple DB backup files to remove just copy the line above for each backup, and replace 'db_ecom.sql' with your DB backup file name 

?> 

Kể từ khi sao lưu WordPress mất một vài phút để kết thúc, tôi muốn chạy một công việc định kỳ để thực hiện clr_bkup.php lúc 10 qua 7, mà nên cung cấp cho nó đủ thời gian. Một lần nữa, công việc cron đầu tiên bên dưới là cho một thư mục không được bảo vệ và thư mục thứ hai cho một thư mục được bảo vệ bằng mật khẩu.

Cron Job để chạy clr_bkup.php 10 phút sau khi WP sao lưu bắt đầu

10 7 * * * php /home/webhostusername/public_html/temp/clr_bkup.php 

HOẶC

10 7 * * * wget -q -O /dev/null http://username:[email protected]/temp/clr_bkup.php 

Chuỗi các sự kiện

Để giúp quấn quanh đầu của bạn là gì đang diễn ra, đây là dòng thời gian:

6:55 am: Cron Job được lên lịch chạy backup_dropbox.php, tạo tệp sao lưu cơ sở dữ liệu của tôi.

7:00 sáng: WordPress Backup to Dropbox chạy và sao lưu tất cả các tệp đã thay đổi kể từ lần sao lưu cuối cùng, bao gồm bản sao lưu cơ sở dữ liệu cũ 5 phút mới được tạo của tôi.

7:10 am: Hiện tại, bản sao lưu Dropbox đã kết thúc, do đó Cron Job được lên lịch chạy clr_bkup.php, loại bỏ tệp sao lưu khỏi máy chủ.

Biến, Ghi chú và Misc. Thông tin

Timing

Việc đầu tiên mà treo tôi lên đã nhận được đúng thời điểm. Để đơn giản, tôi đã sử dụng thời gian trong ví dụ trên như thể mọi thứ đang diễn ra trong cùng một múi giờ. Trong thực tế, máy chủ lưu trữ web của tôi ở Bờ Tây Hoa Kỳ, trong khi múi giờ WordPress của tôi được đặt thành Bờ Đông Hoa Kỳ (chênh lệch 3 giờ). Công việc cron thực tế của tôi được thiết lập để chạy 3 giờ trước đó (thời gian máy chủ) so với những gì được hiển thị ở trên. Điều này sẽ khác nhau đối với tất cả mọi người. Đặt cược tốt nhất là biết sự khác biệt về thời gian ở phía trước.

Run Sao lưu với Time Kiểm tra

Trong thư mục đó không được mật khẩu bảo vệ, tôi muốn giữ kịch bản backup_dropbox.php chạy bất cứ lúc nào khác trong ngày hơn 06:55 (bằng cách truy cập trong trình duyệt lúc 10 giờ sáng). Tôi bao gồm một kiểm tra thời gian ở đầu của tập tin backup_dropbox.php, mà về cơ bản kiểm tra để xem nếu nó không phải là 6:55 sáng, sau đó không để cho nó thực thi phần còn lại của mã. Tôi sửa đổi backup_dropbox.php tới:

<?php 
$now = time(); 
$hm = date('h:i', $now); 
if ($hm != '06:55') { 
    echo "error message"; 
} else { 
// DB BACKUP code from above goes here 
} 
?> 

Tôi cho rằng bạn cũng có thể thêm video này vào file clr_bkup.php chỉ để cho nó xóa các tập tin sao lưu lúc 7:10 giờ sáng, nhưng tôi đã không thực sự thấy cần từ thời gian duy nhất clr_bkup.php sẽ làm bất cứ điều gì là giữa 6: 55-7: 10am dù sao đi nữa. Tùy thuộc vào bạn nếu bạn quyết định đi con đường đó.

Không có trên WordPress?

Có một số dịch vụ miễn phí và trả tiền mà sẽ sao lưu trang web của bạn, hoặc đến Dropbox hoặc một dịch vụ tương tự như Google Drive, Amazon S3, Box, vv, hoặc một số sẽ lưu trữ các tập tin trên máy chủ của họ có thu phí.

Backup Machine, Codeguard, Dropmysite, Backup Box hoặc Mover để đặt tên một vài.

Muốn sao lưu ngoại vi dự phòng?

Có rất nhiều dịch vụ cho phép bạn tạo tự động sao lưu dự phòng từ xa trên bất kỳ trang web lưu trữ đám mây nào được liệt kê ở trên.

Ví dụ: nếu bạn sao lưu trang web của mình vào Dropbox, bạn có thể sử dụng dịch vụ được gọi là If This Then That (IFTTT) để tự động thêm tệp được tải lên một Dropbox folder to Google Drive cụ thể. Bằng cách đó Dropbox sẽ gặp sự cố với máy chủ của họ, bạn cũng sẽ có bản sao lưu Google Drive. Hộp dự phòng được liệt kê ở trên cũng có thể làm một cái gì đó như thế này.

Hope this helps

Có thể có một cách tốt hơn để làm tất cả điều này. Tôi đã được một pinch và cần thiết để tìm một cái gì đó ra rằng hoạt động đáng tin cậy, mà điều này không. Nếu có bất kỳ cải tiến nào có thể được thực hiện, vui lòng chia sẻ trong các ý kiến.

+1

Nó sẽ làm cho rất nhiều ý nghĩa để nén các tập tin. Dưới đây là cách thực hiện: '$ sqlFile = $ tempDir. $ DbPrefix.". Sql.gz "; $ createBackup = "mysqldump -h". $ DbHost. "-u". $ User. "--password = '". $ Mật khẩu. "'". $ DbName. "| Gzip>". $ SqlFile; ' (Lưu ý: Tôi không nghĩ rằng điều này sẽ làm việc trên Windows.) –

1

Tôi nghĩ bài này giải thích một Mà giải pháp có thể giúp bạn: http://ericsilva.org/2012/07/05/backup-mysql-database-to-dropbox/

+0

Tôi thực sự liên kết với cùng một bài đăng trong câu hỏi ở trên. Nếu không có mã từ bài viết đó mặc dù tôi không nghĩ rằng tôi đã có thể đưa ra giải pháp tôi đang tìm kiếm. Cảm ơn! – ScottD

Các vấn đề liên quan