Thực hiện sao lưu nóng cơ sở dữ liệu MySQL với Percona XtraBackup trên Ubuntu 16.04

theanh

Administrator
Nhân viên
Percona XtraBackup là một tiện ích sao lưu nguồn mở cho MySQL. Nó hỗ trợ tất cả các phiên bản MySQL như Percona Server, MariaDB và (Oracle) MySQL. Percona Xtrabackup thực hiện Sao lưu nóng cho MySQL. Sao lưu nóng có nghĩa là tạo bản sao lưu của máy chủ MySQL trong khi máy chủ đang chạy mà không bị ngừng hoạt động.

Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách tạo bản sao lưu cơ sở dữ liệu MySQL nóng bằng công cụ Nguồn mở Percona XtraBackup trên Ubuntu 16.04 (Xenial Xerus). Tôi sẽ sử dụng MariaDB làm máy chủ cơ sở dữ liệu để thực hiện sao lưu nhưng thiết lập tương tự cũng sẽ hoạt động với máy chủ MySQL.



Điều kiện tiên quyết
  • Máy chủ Ubuntu 16.04 - (Xenial Xerus)
  • Máy chủ MySQL hoặc MariaDB
  • Quyền root

Bước 1 - Cài đặt Percona XtraBackup​

Bước đầu tiên là cài đặt phần mềm Percona XtraBackup mới nhất trên máy chủ Ubuntu của chúng tôi. Đăng nhập vào máy chủ của bạn bằng SSH (hoặc trên bảng điều khiển):
Mã:
ssh [emailprotected]
NHẬP MẬT KHẨU CỦA BẠN
Percona XtraBackup có sẵn trong kho lưu trữ Ubuntu, nhưng chúng tôi muốn sử dụng phiên bản mới nhất từ kho lưu trữ Percona.

Thêm kho lưu trữ Percona bằng cách tải xuống gói deb từ web và cài đặt bằng lệnh dpkg:
Mã:
wget https://repo.percona.com/apt/percona-release_0.1-3.$(lsb_release -sc)_all.deb
sudo dpkg -i percona-release_0.1-3.$(lsb_release -sc)_all.deb
Tiếp theo, hãy cập nhật kho lưu trữ và cài đặt PperconaXtraBackup 2.4 (phiên bản mới nhất tại thời điểm này):
Mã:
sudo apt-get update
sudo apt-get install percona-xtrabackup-24
Percona XtraBackup đã được cài đặt.


Bước 2 - Cấu hình người dùng và thư mục sao lưu​

Để thực hiện sao lưu nóng, chúng ta cần tạo một người dùng mysql mới với các đặc quyền và quyền hạn đặc biệt. Trong hướng dẫn này, tôi sẽ sử dụng MariaDB 10.0 làm máy chủ cơ sở dữ liệu. Nếu bạn chưa cài đặt cơ sở dữ liệu tương thích với MySQL thì bạn có thể cài đặt bằng lệnh bên dưới:
Mã:
sudo apt-get install mariadb-server mariadb-client
Đặt mật khẩu an toàn cho người dùng root bằng lệnh này:
Mã:
mysql_secure_installation
Nếu MariaDB đã được cài đặt, hãy truy cập shell MariaDB/MySQL với tư cách là người dùng root bằng lệnh máy khách mysql:
Mã:
mysql -u root -p
NHẬP MẬT KHẨU MySQL
Tạo người dùng mới có tên là 'bekupuser' với mật khẩu 'mypassword' (chọn mật khẩu an toàn cho máy chủ của bạn!):
Mã:
CREATE USER 'bekupuser'@'localhost' IDENTIFIED BY 'mypassword';
Cấp cho người dùng các quyền sau: 'RELOAD, PROCESS, LOCK TABLES, REPLICATION CLIENT'.
Mã:
GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'bekupuser'@'localhost';
FLUSH PRIVILEGES;
exit
Tiếp theo, tạo một thư mục mới để lưu trữ các tệp sao lưu MySQL:
Mã:
mkdir -p /data/backups/mysql/
Người dùng sao lưu mới và thư mục sao lưu đã được tạo.


Bước 3 - Thực hiện sao lưu bằng Innobackupex​

Innobackupex là trình bao bọc tập lệnh Perl cho chương trình xtrabackup. Đây là phiên bản vá lỗi của tập lệnh innobackup do Oracle cung cấp, được phân phối cùng với công cụ Sao lưu InnoDB. Innobackupex cung cấp bản sao lưu cho toàn bộ phiên bản cơ sở dữ liệu MySQL, sử dụng xtrabackup kết hợp với xbstream và xbcrypt.

Trong bước này, chúng ta sẽ tạo và chuẩn bị bản sao lưu đầy đủ cho phiên bản MySQL.



A. Tạo bản sao lưu bằng Innobackupex

Trong bước 2, chúng ta đã tạo một thư mục mới để sao lưu và thêm một người dùng sao lưu mysql mới. Bây giờ chúng ta sẽ sử dụng chúng để tạo bản sao lưu bằng lệnh innobackupex.

Tạo bản sao lưu MySQL bằng innobackupex vào thư mục mới '/data/backups/my_backup':
Mã:
innobackupex --user=bekupuser --password=mypassword --no-timestamp /data/backups/my_backup
Lưu ý:

--user = người dùng có quyền sao lưu bắt buộc (bước 2).

--password = mật khẩu của người dùng sao lưu.

--no-timestamp = vô hiệu hóa việc tạo thư mục con có dấu thời gian mới trong thư mục gốc sao lưu.

/data/backups/my_backup = thư mục để sao lưu, thư mục này sẽ được tự động tạo trong quá trình sao lưu. Nếu thư mục tồn tại, bạn sẽ nhận được thông báo lỗi.



Một tùy chọn khác:
Mã:
mkdir -p /data/backups/my_backup2

innobackupex --user=bekupuser --password=mypassword /data/backups/my_backup2

hoặc

innobackupex --user=bekupuser --password=mypassword /data/backups/
Lưu ý:

Nếu không có thư mục 'my_backup2', bạn sẽ nhận được thư mục của mình dựa trên định dạng 'timestamp'.

Kết quả:





B. Chuẩn bị bản sao lưu đầy đủ với Innobackupex

Sau khi tạo bản sao lưu mới, dữ liệu chưa sẵn sàng để khôi phục. Có thêm một bước nữa để dữ liệu sẵn sàng được khôi phục. Chúng ta cần 'giai đoạn chuẩn bị' để dữ liệu có thể được khôi phục.

Chuẩn bị sao lưu bằng innobackupex với tùy chọn --apply-log vào thư mục sao lưu '/data/backups/my_backup':
Mã:
innobackupex --apply-log /data/backups/my_backup
Đảm bảo quá trình hoàn tất mà không có lỗi trước khi bạn tiếp tục.



Nếu bạn có đủ bộ nhớ và cơ sở dữ liệu lớn, thì bạn có thể sử dụng tùy chọn --use-memory=memorynumberđể cho innobackupex biết dung lượng bộ nhớ có thể sử dụng:
Mã:
innobackupex --apply-log --use-memory=4G /data/backups/my_backup
Dữ liệu đã sẵn sàng để khôi phục. Chúng ta có thể khôi phục nó trên cùng một máy chủ hoặc trên một máy chủ khác đang chạy MariaDB.


Bước 4 - Khôi phục bản sao lưu đầy đủ bằng Innobackupex​

Trong bước này, chúng ta sẽ khôi phục phiên bản MySQL bằng innobackupex.

Trước khi khôi phục phiên bản MySQL, chúng ta cần dừng tiến trình MySQL bằng lệnh systemctl (tiến trình MariaDB có tên là mysql):
Mã:
systemctl stop mysql
Tạo bản sao lưu của thư mục dữ liệu MySQL cũ:
Mã:
mkdir ~/mysql_old/
mv /var/lib/mysql/* ~/mysql_old/
Tiếp theo, khôi phục phiên bản mysql từ bản sao lưu đầy đủ bằng innobackupex:
Mã:
innobackupex --copy-back /data/backups/my_backup
Khi bạn thấy kết quả 'innobackupex: completed OK', thì bạn đã khôi phục thành công phiên bản MySQL của mình.

Bây giờ hãy thay đổi chủ sở hữu của thư mục dữ liệu MySQL thành người dùng mysql và khởi động lại dịch vụ:
Mã:
chown -R mysql:mysql /var/lib/mysql
systemctl start mysql


Phiên bản MySQL đã được khôi phục thành công bằng percona-xtrabackup.


Tham khảo​

 
Back
Bên trên