Bạn đang tìm kiếm một giải pháp sao lưu cơ sở dữ liệu MySQL hoặc MariaDB mà không gây gián đoạn dịch vụ? Bài viết này sẽ hướng dẫn bạn cách sử dụng Percona XtraBackup, một công cụ mã nguồn mở mạnh mẽ, để thực hiện sao lưu nóng (hot backup). Chúng ta sẽ khám phá các bước thiết lập, sao lưu và khôi phục, giúp bạn bảo vệ dữ liệu quan trọng một cách hiệu quả. Việc sao lưu nóng là vô cùng quan trọng để đảm bảo tính liên tục của ứng dụng và giảm thiểu thời gian chết trong trường hợp có sự cố xảy ra. Hãy cùng bắt đầu để làm chủ quy trình này!
Trong môi trường sản xuất, việc ngừng hoạt động cơ sở dữ liệu để sao lưu là điều không thể chấp nhận được. Percona XtraBackup giải quyết vấn đề này bằng cách tạo ra các bản sao lưu vật lý (physical backup) của các tập tin dữ liệu, đồng thời áp dụng nhật ký giao dịch (transaction log) để đảm bảo tính nhất quán của dữ liệu. Điều này có nghĩa là bạn có thể sao lưu dữ liệu mà không cần khóa bảng hoặc làm gián đoạn hoạt động của cơ sở dữ liệu.
So với các phương pháp sao lưu logic như mysqldump
, XtraBackup có tốc độ nhanh hơn đáng kể, đặc biệt đối với các cơ sở dữ liệu lớn. Nó cũng cung cấp khả năng sao lưu gia tăng (incremental backup), giúp tiết kiệm không gian lưu trữ và thời gian sao lưu.
Trước khi bắt đầu, hãy đảm bảo bạn đáp ứng các yêu cầu sau:
Để kiểm tra storage engine của các bảng, bạn có thể sử dụng lệnh sau trong MySQL shell:
SHOW TABLE STATUS FROM your_database_name;
Percona cung cấp kho lưu trữ APT để giúp việc cài đặt trở nên dễ dàng hơn. Thực hiện các bước sau:
Tải và cài đặt khóa Percona:
wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
sudo dpkg -i percona-release_latest.generic_all.deb
sudo apt update
Cài đặt Percona XtraBackup:
sudo apt install percona-xtrabackup-80
XtraBackup cần một tài khoản MySQL có quyền phù hợp để thực hiện sao lưu. Tạo một tài khoản mới hoặc sử dụng tài khoản hiện có (nhưng nên hạn chế quyền):
CREATE USER 'backupuser'@'localhost' IDENTIFIED BY 'your_strong_password';
GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'backupuser'@'localhost';
FLUSH PRIVILEGES;
Thay thế your_strong_password
bằng một mật khẩu mạnh thực tế.
Sử dụng lệnh xtrabackup
để tạo bản sao lưu. Ví dụ:
xtrabackup --backup --user=backupuser --password=your_strong_password --target-dir=/path/to/backup/directory
Thay thế /path/to/backup/directory
bằng đường dẫn thực tế đến thư mục bạn muốn lưu trữ bản sao lưu.
Sau khi sao lưu, bạn cần chuẩn bị nó để có thể khôi phục. Lệnh này áp dụng nhật ký giao dịch để đảm bảo tính nhất quán:
xtrabackup --prepare --target-dir=/path/to/backup/directory
Để khôi phục, bạn cần dừng MySQL, xóa thư mục dữ liệu hiện tại, và sau đó sao chép bản sao lưu đã chuẩn bị vào thư mục dữ liệu:
sudo systemctl stop mysql
sudo rm -rf /var/lib/mysql/*
xtrabackup --copy-back --target-dir=/path/to/backup/directory
sudo chown -R mysql:mysql /var/lib/mysql
sudo systemctl start mysql
Lưu ý quan trọng: Đảm bảo bạn đã sao lưu thư mục dữ liệu hiện tại trước khi xóa nó.
XtraBackup cũng hỗ trợ sao lưu gia tăng, giúp bạn chỉ sao lưu những thay đổi kể từ lần sao lưu trước. Điều này tiết kiệm thời gian và không gian lưu trữ. Để thực hiện sao lưu gia tăng, bạn cần có một bản sao lưu đầy đủ trước đó.
Thực hiện như hướng dẫn ở phần trên để tạo một bản sao lưu đầy đủ.
Sử dụng tùy chọn --incremental
và --incremental-basedir
để tạo bản sao lưu gia tăng:
xtrabackup --backup --user=backupuser --password=your_strong_password --target-dir=/path/to/incremental/backup --incremental-basedir=/path/to/full/backup
/path/to/full/backup
là đường dẫn đến bản sao lưu đầy đủ ban đầu.
Quá trình chuẩn bị bản sao lưu gia tăng phức tạp hơn một chút. Bạn cần chuẩn bị *tất cả* các bản sao lưu gia tăng *theo thứ tự thời gian* trước khi khôi phục. Bắt đầu bằng bản sao lưu đầy đủ:
xtrabackup --prepare --target-dir=/path/to/full/backup
Sau đó, chuẩn bị từng bản sao lưu gia tăng theo thứ tự:
xtrabackup --prepare --target-dir=/path/to/full/backup --incremental-dir=/path/to/first/incremental/backup
xtrabackup --prepare --target-dir=/path/to/full/backup --incremental-dir=/path/to/second/incremental/backup
...
Sau khi đã chuẩn bị tất cả các bản sao lưu, bạn có thể khôi phục như bình thường, sử dụng thư mục của bản sao lưu đầy đủ đã được chuẩn bị cuối cùng:
sudo systemctl stop mysql
sudo rm -rf /var/lib/mysql/*
xtrabackup --copy-back --target-dir=/path/to/full/backup
sudo chown -R mysql:mysql /var/lib/mysql
sudo systemctl start mysql
Để đảm bảo an toàn dữ liệu liên tục, bạn nên tự động hóa quá trình sao lưu. Bạn có thể sử dụng cron để lên lịch sao lưu định kỳ. Ví dụ, để sao lưu mỗi ngày vào lúc 2 giờ sáng, bạn có thể thêm dòng sau vào crontab (sử dụng lệnh crontab -e
):
0 2 * * * xtrabackup --backup --user=backupuser --password=your_strong_password --target-dir=/path/to/backup/directory
Percona XtraBackup là một công cụ mạnh mẽ để tạo bản sao lưu nóng cho cơ sở dữ liệu MySQL và MariaDB. Bằng cách làm theo hướng dẫn này, bạn có thể bảo vệ dữ liệu của mình một cách hiệu quả và giảm thiểu thời gian chết. Đừng quên thường xuyên kiểm tra và thử nghiệm quy trình khôi phục để đảm bảo rằng bạn có thể phục hồi dữ liệu một cách nhanh chóng và dễ dàng trong trường hợp có sự cố xảy ra.
Bài viết liên quan