Mục lục
- Giới thiệu
- Điều kiện tiên quyết
- Bước 1: Tạo người dùng hệ thống không root
- Bước 2: Kiểm tra công cụ lưu trữ
- Bước 3: Tạo người dùng cơ sở dữ liệu để sao lưu
- Bước 4: Cài đặt Percona XtraBackup
- Bước 5: Tạo thư mục lưu trữ sao lưu
- Bước 6: Tạo bản sao lưu đầy đủ đầu tiên
- Bước 7: Tạo các bản sao lưu gia tăng sau đây
- Bước 8: Chuẩn bị các tệp sao lưu để khôi phục cơ sở dữ liệu
- Bước 9: Khôi phục cơ sở dữ liệu
- Các bước tiếp theo
Giới thiệu
Percona XtraBackup là một chương trình dựa trên MySQL miễn phí được sử dụng để tạo các bản sao lưu nóng. Nó cũng có nguồn mở. Với Percona XtraBackup, bạn có thể tạo các bản sao lưu nóng khi chạy cơ sở dữ liệu MySQL, MariaDB hoặc Percona Server mà không cần dừng dịch vụ cơ sở dữ liệu của bạn hoặc làm cho nó chỉ đọc. Đây là một tính năng quan trọng trong kinh doanh cho nhiều doanh nghiệp trực tuyến.
Đối với cơ sở dữ liệu sử dụng các công cụ lưu trữ InnoDB, XtraDB và HailDB, Percona XtraBackup có thể thực hiện sao lưu không chặn. Đối với cơ sở dữ liệu sử dụng các công cụ lưu trữ MyISAM, Hợp nhất và Lưu trữ, Percona XtraBackup cũng có thể thực hiện sao lưu bằng cách tạm dừng ghi ngắn vào cuối quy trình sao lưu.
Trong bài viết này, tôi sẽ chỉ cho bạn cách cài đặt và sử dụng Percona XtraBackup để thực hiện sao lưu nóng đầy đủ và gia tăng trên máy chủ Vultr dựa trên ứng dụng WordPress One-Click. Chúng tôi sẽ thực hiện sao lưu toàn bộ và hai bản sao lưu gia tăng, sau đó khôi phục cơ sở dữ liệu về trạng thái của mỗi ba bản sao lưu tương ứng.
Điều kiện tiên quyết
Tôi giả sử rằng bạn đã triển khai một phiên bản máy chủ WordPress Vultr One-Click từ đầu và đã đăng nhập bằng root, sử dụng SSH.
Bước 1: Tạo người dùng hệ thống không root
Vì mục đích bảo mật, một thực tiễn được đề xuất là tạo một tài khoản người dùng khác có quyền root, sau đó sử dụng nó để đăng nhập và thực hiện các hoạt động hàng ngày của bạn trên hệ thống. Bạn vẫn có thể thực thi gần như tất cả các lệnh superuser bằng sudo
lệnh.
1) Tạo người dùng mới. Thay thế sysuser
bằng tên người dùng của riêng bạn.
useradd sysuser
2) Đặt mật khẩu cho người dùng mới của bạn. Thay thế sysuser
bằng tên người dùng của riêng bạn.
passwd sysuser
3) Cấp quyền root cho người dùng mới của bạn.
visudo
Tìm đoạn văn dưới đây.
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
Thêm một hàng trực tiếp bên dưới đoạn này, thay thế sysuser
bằng tên người dùng của riêng bạn.
sysuser ALL=(ALL) ALL
Lưu và đóng.
:wq
4) Chuyển sang tài khoản người dùng mới của bạn.
logout
Sau đó, sử dụng thông tin đăng nhập của người dùng mới để đăng nhập từ cửa sổ đầu cuối của bạn.
Bước 2: Kiểm tra công cụ lưu trữ
Theo mặc định, đăng nhập root MySQL được lưu trên VPS trong /root/.my.cnf
. Hiển thị mật khẩu trong thiết bị đầu cuối của bạn với lệnh sau.
sudo cat /root/.my.cnf
Sử dụng thông tin đăng nhập được hiển thị trên màn hình để đăng nhập vào bảng điều khiển MySQL.
mysql -u root -p
Trong shell MySQL, chạy như sau.
SHOW DATABASES;
Tất cả các cơ sở dữ liệu MySQL sẽ được hiển thị trên màn hình. Cơ sở dữ liệu có tên like wp5273512
là cơ sở dữ liệu WordPress mà chúng tôi muốn sao lưu. Trong lệnh sau, thay thế wp5273512
bằng lệnh của riêng bạn:
USE wp5273512;
Kiểm tra công cụ lưu trữ cho mỗi bảng:
SHOW TABLE STATUS\G
Bạn sẽ thấy rằng tất cả các bảng trong cơ sở dữ liệu WordPress MySQL của bạn đang sử dụng công cụ lưu trữ InnoDB, công cụ hoàn hảo để thực hiện sao lưu nóng với Percona XtraBackup.
Đối với bất kỳ cơ sở dữ liệu MySQL nào khác sử dụng công cụ lưu trữ MyISAM, chúng tôi vẫn có thể sao lưu chúng bằng Percona XtraBackup bằng cách tạm dừng ghi.
Bước 3: Tạo người dùng cơ sở dữ liệu để sao lưu
Vẫn trong shell MySQL, sử dụng các lệnh sau để tạo người dùng cơ sở dữ liệu chuyên dụng để sao lưu. Hãy nhớ thay thế tên người dùng cơ sở dữ liệu xbuser
và mật khẩu xbpasswd
bằng tên riêng của bạn:
CREATE USER 'xbuser'@'localhost' IDENTIFIED BY 'xbpasswd';
GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT, CREATE TABLESPACE, PROCESS, SUPER, CREATE, INSERT, SELECT ON *.* TO 'xbuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Các đặc quyền được cấp ở trên là cần thiết cho chức năng Percona XtraBackup đầy đủ. Bạn có thể loại bỏ một số trong số chúng để có ít chức năng hơn và bảo mật tốt hơn. Để biết thêm chi tiết, xem trang web chính thức của Percona XtraBackup .
Bước 4: Cài đặt Percona XtraBackup
Bạn có thể cài đặt Percona XtraBackup từ kho lưu trữ RPM của Percona khá dễ dàng:
sudo yum install -y http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
sudo yum install -y percona-xtrabackup
Bước 5: Tạo thư mục lưu trữ sao lưu
Đầu tiên, bạn cần thêm người dùng sysuser
vào mysql
nhóm. Thay thế sysuser
bằng tên người dùng của riêng bạn.
sudo gpasswd -a sysuser mysql
Tạo một thư mục để lưu trữ bản sao lưu đầy đủ.
sudo mkdir -p /dbbackup/full/
Tạo một thư mục khác để lưu trữ các bản sao lưu gia tăng.
sudo mkdir -p /dbbackup/inc/
Thay đổi chủ sở hữu của các thư mục này thành người dùng sysuser
và nhóm sysuser
.
sudo chown -R sysuser:sysuser /dbbackup
Đăng xuất để đưa những thay đổi này có hiệu lực.
logout
Sau đó, đăng nhập sysuser
lại.
Bước 6: Tạo bản sao lưu đầy đủ đầu tiên
XtraBackup bao gồm chủ yếu chương trình XtraBackup và innobackupex
tập lệnh perl. Thông thường, bạn có thể sử dụng innobackupex
tập lệnh perl để thực hiện các quy trình vận hành khác nhau để thuận tiện.
Nhập lệnh sau để tạo bản sao lưu đầy đủ đầu tiên. Hãy nhớ thay thế tên người dùng cơ sở dữ liệu xbuser
, mật khẩu người dùng cơ sở dữ liệu xbpasswd
và thư mục sao lưu đầy đủ /dbbackup/full/
bằng tên riêng của bạn.
sudo innobackupex --user=xbuser --password=xbpasswd /dbbackup/full/
Với lệnh này được thực thi chính xác, bạn sẽ thấy thông báo xác nhận "innobackupex: hoàn thành OK!" ở dòng cuối cùng của đầu ra.
Tất cả các tệp mới được tạo của bản sao lưu đầy đủ này sẽ được lưu trữ trong một thư mục có dấu thời gian bên dưới /dbbackup/full/
. Ví dụ , /dbbackup/full/2015-05-22_05-45-54
.
Bước 7: Tạo các bản sao lưu gia tăng sau đây
Nhập lệnh sau để tạo bản sao lưu gia tăng đầu tiên. Thay thế các biến trong lệnh cho phù hợp.
sudo innobackupex --user=xbuser --password=xbpasswd --incremental --incremental-basedir=/dbbackup/full/2015-05-22_05-45-54 /dbbackup/inc/
Một lần nữa, bạn sẽ thấy "innobackupex: hoàn thành OK!" ở cuối đầu ra khi lệnh thực thi thành công. Các tập tin sao lưu sẽ được lưu trữ trong một thư mục có dấu thời gian bên dưới /dbbackup/inc/
.
Nhập lệnh sau để tạo bản sao lưu gia tăng thứ hai. Thay thế các biến trong lệnh cho phù hợp.
sudo innobackupex --user=xbuser --password=xbpasswd --incremental --incremental-basedir=/dbbackup/inc/2015-05-22_05-48-12 /dbbackup/inc/
Sau khi thành công, bạn sẽ thấy "innobackupex: hoàn thành OK!" lại nhắn tin. Kiểm tra /dbbackup/inc/
thư mục một lần nữa để xem các tập tin sao lưu.
Bước 8: Chuẩn bị các tệp sao lưu để khôi phục cơ sở dữ liệu
Tất cả các tệp sao lưu cơ sở dữ liệu cần phải được chuẩn bị trước khi chúng có thể được sử dụng để khôi phục cơ sở dữ liệu.
Lưu ý : Trước khi bạn thực hiện các quy trình chuẩn bị và khôi phục, tốt nhất bạn nên giữ một bản sao của toàn bộ thư mục sao lưu (chẳng hạn như /dbbackup/
) ở một nơi khác trong trường hợp có bất kỳ thiệt hại nào để sao lưu các tệp là do nhầm lẫn.
Trong mỗi thư mục sao lưu, có một tệp có tên xtrabackup_checkpoints
loại sao lưu và số thứ tự nhật ký đầu và cuối ( from_lsn
và to_lsn
). Bạn có thể sử dụng những con số đó để làm rõ chiến lược khôi phục cơ sở dữ liệu của bạn. Nhìn vào các ví dụ dưới đây.
Trong xtrabackup_checkpoints
tập tin sao lưu đầy đủ đầu tiên, tôi có:
backup_type = full-backuped
from_lsn = 0
to_lsn = 2932478
Trong xtrabackup_checkpoints
tệp sao lưu gia tăng đầu tiên, tôi có:
backup_type =incremental
from_lsn = 2932478
to_lsn = 2970177
Trong xtrabackup_checkpoints
tệp sao lưu gia tăng thứ hai, tôi có:
backup_type = incremental
from_lsn = 2970177
to_lsn = 3004672
Tóm lại, bạn nên giải quyết từng bản sao lưu với thứ tự tăng dần của lsn. Nếu chuỗi lsn không đầy đủ hoặc bị rối loạn, bạn có thể mất dữ liệu.
Lưu ý : Các lệnh sau liên quan đến ba thư mục, thay thế chúng bằng thư mục của riêng bạn.
Để khôi phục cơ sở dữ liệu về trạng thái sao lưu toàn bộ đầu tiên, bạn cần chuẩn bị các tệp sao lưu bằng lệnh sau:
sudo innobackupex --apply-log /dbbackup/full/2015-05-22_05-45-54
Để khôi phục cơ sở dữ liệu về trạng thái sao lưu gia tăng đầu tiên, bạn cần chuẩn bị các tệp sao lưu với các lệnh sau:
sudo innobackupex --apply-log --redo-only /dbbackup/full/2015-05-22_05-45-54
sudo innobackupex --apply-log /dbbackup/full/2015-05-22_05-45-54 --incremental-dir=/dbbackup/inc/2015-05-22_05-48-12
sudo innobackupex --apply-log /dbbackup/full/2015-05-22_05-45-54
Để khôi phục cơ sở dữ liệu về trạng thái sao lưu gia tăng thứ hai, bạn cần chuẩn bị các tệp sao lưu bằng các lệnh sau:
sudo innobackupex --apply-log --redo-only /dbbackup/full/2015-05-22_05-45-54
sudo innobackupex --apply-log --redo-only /dbbackup/full/2015-05-22_05-45-54 --incremental-dir=/dbbackup/inc/2015-05-22_05-48-12
sudo innobackupex --apply-log /dbbackup/full/2015-05-22_05-45-54 --incremental-dir=/dbbackup/inc/2015-05-22_05-51-32
sudo innobackupex --apply-log /dbbackup/full/2015-05-22_05-45-54
Ghi chú :
Đối với các bản sao lưu gia tăng, Bạn nên sử dụng --redo-only
tùy chọn trên tất cả trừ bản sao lưu gia tăng cuối cùng. Tuy nhiên, sử dụng tùy chọn này trên bản sao lưu gia tăng cuối cùng vẫn vô hại đối với tính nhất quán của dữ liệu của bạn - nó sẽ chỉ gây ra một số chậm trễ do việc khôi phục cơ sở dữ liệu.
Lệnh cuối cùng của mỗi kịch bản gia tăng là tùy chọn nhưng được khuyến nghị, vì nó sẽ tăng tốc khôi phục.
Sau khi chuẩn bị, các thay đổi được ghi trong tệp sao lưu gia tăng sẽ được thêm vào tệp sao lưu đầy đủ cơ sở đã chuẩn bị, vì vậy bạn phải luôn sử dụng tệp sao lưu đầy đủ đã chuẩn bị để khôi phục cơ sở dữ liệu của mình, bất kể bạn chọn sao lưu toàn bộ hoặc sao lưu gia tăng.
Bước 9: Khôi phục cơ sở dữ liệu
Trước khi bạn có thể khôi phục cơ sở dữ liệu của mình, bạn cần dừng dịch vụ cơ sở dữ liệu.
sudo service mysqld stop
Bạn cũng cần làm trống thư mục cơ sở dữ liệu. Bạn có thể di chuyển các tệp cơ sở dữ liệu hiện tại đến một nơi khác để đề phòng.
sudo mkdir /currentdb
sudo mv /var/lib/mysql/* /currentdb
Khôi phục cơ sở dữ liệu của bạn với các tệp "sao lưu đầy đủ" đã chuẩn bị.
sudo innobackupex --copy-back /dbbackup/full/2015-05-22_05-45-54
Vì quy trình khôi phục sẽ sửa đổi chủ sở hữu của thư mục cơ sở dữ liệu, bạn cần thay đổi lại mysql:mysql
để làm cho nó hoạt động.
sudo chown -R mysql:mysql /var/lib/mysql
Khởi động lại dịch vụ cơ sở dữ liệu.
sudo service mysqld start
Đó là nó. Tại thời điểm này, bạn có thể truy cập trang web WordPress của mình để xác minh rằng quá trình khôi phục đã thành công.