Sao lưu và khôi phục website trên VPS

Thảo luận trong 'Thư viện' bắt đầu bởi Anh Huy, 30/3/18.

254

  1. Anh Huy Hạnh phúc là sẻ chia

    Cấu trúc folder
    • Đường dẫn nguồn chữa code web /var/www/anhhuy.info/public_html
    • Đường dẫn đích chứa code web đã backup /var/www/anhhuy.info/backup/source
    • Đường dẫn đích chưa database đã backup /var/www/anhhuy.info/backup/db
    Thông tin Database
    • UserDB: anhhuyuser
    • NameDB: anhhuydb
    • PassworDB: 123456
    I. CÁCH BACKUP WEBSITE THỦ CÔNG.

    Chúng ta cùng đi vào chi tiết với việc tạo sao lưu dữ liệu cách thủ công trước, cứ làm từ đơn giản trước.

    1. HƯỚNG DẪN BACKUP SOURCE CODE

    Đầu tiên bạn cần phải xác định source code web được để ở đâu. Bạn sẽ tìm được đường dẫn đến source code trong file cấu hình virtualhost trên webserver. Bạn xem lại bài hướng dẫn cài LEMPLAMP trên CentOS, Ubuntu của mình để rõ hơn.

    Mình thường đặt trong /var/www/anhhuy.info/public_html.

    Khi xác định xong vị trí source bạn chạy câu lệnh này cho mình:

    Mã:
    tar -czf /var/www/anhhuy.info/backup/source/source-`date +%Y%m%d`.tar.gz /var/www/anhhuy.info/public_html

    Trong đó:

    • tar -czf: dùng tar nén dữ liệu và lưu thành file tar.gz để tối ưu không gian lưu trữ.
    • /var/www/anhhuy.info/backup/source/: đường dẫn đích để lưu file.
    • source-`date +%Y%m%d`.tar.gz: tên file backup bắt đầu bằng chữ source- tiếp theo là ngày tháng tạo file, bạn chú ý cặp dấu ` không phải dấu ngặc đơn đâu nhé. File tạo ra sẽ có dạng giống thế này source-20160430.tar.gz
    • /var/www/anhhuy.info/public_html: cuối cùng là đường dẫn nguồn.
    2. HƯỚNG DẪN BACKUP DATABASE.

    Cũng chạy cho mình lệnh:

    Mã:
    mysqldump -u anhhuyuser -p123456 anhhuydb | gzip > /var/www/anhhuy.info/backup/db/db-`date +%Y%m%d`.sql.gz
    Diễn giải như sau:
    • mysqldump: đây là công cụ backup database được dùng phổ biến trên linux.
    • -u anhhuyuser -p123456: tài khoản quản trị db
    • anhhuydb: tên database sẽ được backup.
    • | : nghĩa là lấy kết quả của lệnh đằng trước sử dụng cho lệnh sau.
    • gzip > : nén dữ liệu và lưu thành file với đuôi mở rộng sql.gz, thông thường tỉ lệ nén sẽ bằng 1/5 dữ liệu nguyên bản.
    • /var/www/anhhuy.info/backup/db/: đường dẫn đích lưu file backup của database.
    • db-`date +%Y%m%d`.sql.gz: tên file backup được đặt tên bắt đầu bằng chữ db- sau đó là thời gian tạo file, tên file được tạo ra sẽ giống như này db-20160430.sql
    Trong trường hợp các bạn muốn backup nhiều database thì dùng lệnh.

    Mã:
    mysqldump -u anhhuyuser -p123456 --databases db1 db2 > /var/www/anhhuy.info/backup/db/db1-db2-'date +%Y%m%d'.sql
    Trong đó --databases db1 db2 dùng để khai báo sẽ sao lưu 2 database là db1 và db2

    Nếu muốn backup toàn bộ database hiện có bạn chỉ cần thay --databases db1 db2 thành --all-databases. Chú ý user bạn sử dụng phải có full quyền trên toàn hệ quản trị cơ sở dữ liệu, trường hợp này thường dùng tài khoản root.


    Đến đây bạn đã biết cách tự sao lưu dữ liệu website thủ công làm như thế nào rồi. Dùng dữ liệu này bạn có thể cài XAMPP hay AppServ tạo webserver trên localhost để dựng lại trang web của mình phục vụ công việc test.


    Dẫu sao thì cách làm này coi vẻ cũng không được chuyên nghiệp, thời gian đâu mà login vào server rồi chạy lệnh mãi được, bạn cần phải tự động hoá công việc.


    II. HƯỚNG DẪN BACKUP DỮ LIỆU TỰ ĐỘNG.

    Muốn theo dõi tiếp bài này bạn cần tìm hiểu về cách sử dụng crontab trên linux một chút để viết lệnh.


    1. TÌM HIỂU VỀ CRONTAB

    Crontab là gì ? hướng dẫn sử dụng crontab bạn search google nhé một rổ tài liệu. Crontab (Cron Job) là như nhau mình không nói lại nữa. Bạn chỉ cần biết nó là tiện ích dùng để đặt lich (schedule) thực hiện công việc nào đó một cách định kỳ hoàn toàn tự động trên máy chủ Linux.

    Lệnh crontab thường dùng
    • crontab -e: dùng tạo hoặc và chỉnh sửa file crontab
    • crontab -l: hiển thị file crontab đang chạy
    • crontab -r: xóa file crontab
    Cấu trúc chung của crontab

    Mã:
    1 2 3 4 5 6
    
    * * * * * command

    Mỗi dấu * sẽ có các giá trị khác nhau.


    • 1: số phút 0 – 59.
    • 2: số giờ 0 – 23.
    • 3: ngày trong tháng 1 – 31.
    • 4: số tháng 1 – 12.
    • 5: ngày trong tuần 0 – 6, 0 = chủ nhật, còn lại là các ngày từ thứ 2 – thứ 7.
    • 6: câu lệnh sẽ được thực hiện hoặc chạy một shell script nào đó.
    Một số ký tự đặc biệt được dùng trong crontab.


    Dấu phảy “,” dùng xác định nhiều giá trị riêng lẻ, ví dụ 15,45 * * * * lenh_a nghĩa là vào vào phút 15 và 45 của mỗi giờ sẽ thực hiện lenh_a


    Dấu gạch ngang “-“ thể hiện một dải giá trị, ví dụ: * 1-3 * * * lenh_a nghĩa là sẽ thực hiện lenh_a 3 lần vào các thời điểm 1h, 2h rồi 3h.


    Dấu slash gạch chéo “/” là bước nhẩy thời gian, ví dụ * * */2 * * lenh_a nghĩa là cứ sau 2 ngày sẽ thực hiện lenh_a một lần.


    Ngoài ra chúng ta có thể thay thế 5 dấu sao bằng các ký tự đặc biệt


    • @reboot: chạy một lần khi khởi động
    • @yearly: chạy một lần trong năm tương ứng 0 0 1 1 *
    • @annually: giống @yearly
    • @monthly: chạy một lần trong tháng, tương ứng 0 0 1 * *
    • @weekly: chạy một lần trong tuần, tương ứng 0 0 * * 0
    • @daily: chạy một lần trong ngày, tương ứng 0 0 * * *
    • @midnight: giống daily
    • @hourly: chạy một lần trong giờ tương ứng 0 * * * *
    Trên đây là kiên thức cơ bản về crontab để vận dụng trong bài viết, bạn nên đọc thêm các tài liệu hướng dẫn học linux online, ở trên mạng có rất nhiều ví dụ hay về crontab để tham khảo.


    Cài Crontab trên Linux


    Thường thì cron được cài đặt sẵn trên VPS rồi, nếu chưa có chạy mấy lệnh dưới cho mình.


    CentOS/RHEL: yum install cronie


    Ubuntu/Debian: apt-get install cron


    2. CÁCH BACKUP DỮ LIỆU TỰ ĐỘNG

    Để tiện theo dõi mình giả định một kịch bản sao lưu dữ liệu trên máy chủ linux như sau.



    Cách làm như sau, chạy lệnh tạo crontab:

    Mã:
    crontab -e
    
    

    Tạo crontab sao lưu source code tự động.


    Mặc định linux sẽ dùng VI text editor để tạo crontab bạn nhập nội dung bên dưới vào cho mình.


    Mã:
    0 3 * * * tar -czf /var/www/www.anhhuy.info/backup/source-`date +\%Y\%m\%d-\%H\%M\%S`.tar.gz /var/www/www.anhhuy.info/public_html

    Bạn cần chú ý cú pháp lệnh, không thể bê nguyên command gõ trên terminal vào đc, bạn thêm dấu backslash\ vào trước % . Nếu muốn thêm thông tin giờ, phút, giây cú pháp sẽ như này source-`date +\%Y\%m\%d-\%H\%M\%S`.tar.gz. Sau đó ấn :wq để lưu và thoát khỏi chế độ cài đặt crontab.


    Tạo crontab sao lưu database tự động.


    Cũng tương tự như khi sao lưu source code bạn thêm dòng lệnh sau:


    Mã:
    0 3 * * * mysqldump -u anhhuydb -p123456 anhhuydb | gzip > /var/www/www.anhhuy.info/backup/db/db-`date +\%Y\%m\%d`.sql.gz

    Xong rồi đó, bạn đã tạo xong schedule backup dữ liệu website, vào 3h sáng hàng ngày trang web của bạn sẽ tự động được sao lưu. Để biết crontab hoạt động không bạn vào folder xem file có được tạo ra hay không hoặc kiểm tra log hoạt động của crontab, chạy lệnh.


    Với CentOS:


    Mã:
    tail -f /var/log/cron
    
    

    Tự động xóa file cũ trên linux bằng crontab


    Source code

    Mã:
    @weekly cd /var/www/www.anhhuy.info/backup/source && rm -rf `ls -1t | tail -n +3`
    
    
    Database

    Mã:
    @weekly cd /var/www/www.anhhuy.info/backup/source && rm -rf `ls -1t | tail -n +3`
    
    

    Hai lệnh trên là tương tự nhau chỉ khác nhau đường dẫn đến folder cần xóa, mình sẽ diễn giải câu lệnh đầu tiên để các bạn hiểu được cú pháp.


    • @weekly: là ký tự đặc biệt như đã nói ở trên thay cho 0 0 * * 0, như vậy là cứ vào 0 phút 0 giờ ngày chủ nhật hàng tuần crontab sẽ thực hiện lệnh xóa file được chỉ định.
    • cd /var/www/www.anhhuy.info/backup/source &&: đầu tiên sẽ thực hiện lệnh chuyển đến thư mục chứa source code, dấu && thông báo sẽ chạy thêm một lệnh nữa.
    • rm -rf: xóa toàn bộ file được lọc ra từ câu lệnh phía sau nó.
    • `ls -1t | tail -n +3`: lọc và sắp xếp các file trong thư mục theo quy tắc mới nhất xếp trên cùng sau đó sẽ giữ lại 3 file mới nhất và chỉ show những file cũ để lệnh rm -rf xóa đi.
    Bạn nào viết được bash shell có thể gom tất cả các lệnh trên vào một file duy nhất để cho gọn crontab mà quản lý cũng tiện hơn.


    Bài viết dài nhưng kết lại chỉ có 4 câu lệnh thôi, bây giờ bạn có thể quên đi mớ plugin nặng nề trên website được rồi.


    Như vậy là đủ cả backup thủ công và tự động, còn chờ gì nữa mà không backup trang wordpress của bạn ngay bây giờ. Các câu lệnh trong bài có thể chưa được tối ưu các bạn tìm hiểu thêm và bổ sung giúp mình ở ô comment bên dưới nhé.


    Đây là backup trên local, muốn restore website trên VPS từ bản backup này thì làm thế nào? Hay muốn chuyển dữ liệu backup sang máy chủ lưu trữ khác ở bên ngoài qua giao thức SSH thì sao ? Cả cách dùng Rsync đồng dữ liệu backup giữa các máy chủ với nhau nữa, các bạn đón đọc ở bài tới nhé.
     

Chia sẻ trang này

Đang tải...