Thứ sáu, 24/04/2015 | 00:00 GMT+7

Cách tạo bản hot backup của database MySQL với Percona XtraBackup trên CentOS 7

Một thách thức rất phổ biến gặp phải khi làm việc với các hệ thống database đang hoạt động là thực hiện backup nóng — nghĩa là, tạo bản backup mà không dừng dịch vụ database hoặc đặt nó ở chế độ chỉ đọc. Chỉ cần sao chép các file dữ liệu của một database đang hoạt động thường sẽ dẫn đến một bản sao của database không nhất quán bên trong, tức là nó sẽ không thể sử dụng được hoặc nó sẽ bị thiếu các giao dịch đã xảy ra trong quá trình sao chép.

Mặt khác, việc dừng database để backup theo lịch trình sẽ khiến các phần phụ thuộc vào database của ứng dụng của bạn trở nên không khả dụng. Percona XtraBackup là một tiện ích open-souce được dùng để giải quyết vấn đề này và tạo các bản backup đầy đủ hoặc tăng dần nhất quán của các database MySQL, MariaDB và Percona Server đang chạy, còn gọi là các bản backup nóng.

Trái ngược với các bản backup logic mà các tiện ích như mysqldump tạo ra, XtraBackup tạo các bản backup vật lý của các file database — nó tạo một bản sao của các file dữ liệu. Sau đó, nó áp dụng log giao dịch (hay còn gọi là log làm lại) cho các bản backup vật lý, để chèn lấp bất kỳ giao dịch đang hoạt động nào chưa kết thúc trong quá trình tạo bản backup , dẫn đến các bản backup nhất quán của database đang chạy. Sau đó, bản backup database kết quả có thể được backup vào một vị trí từ xa bằng rsync , một hệ thống backup nhưBacula .

Hướng dẫn này sẽ chỉ cho bạn cách thực hiện backup toàn bộ database MySQL hoặc MariaDB của bạn bằng cách sử dụng Percona XtraBackup trên CentOS 7. Quá trình khôi phục database từ bản backup cũng được đề cập. Phiên bản Ubuntu của hướng dẫn này có thể được tìm thấy tại đây .

Yêu cầu

Để làm theo hướng dẫn này, bạn phải có những điều sau:

  • Đặc quyền của Superuser trên hệ thống CentOS 7
  • Database MySQL hoặc MariaDB đang chạy
  • Quyền truy cập vào admin-user (gốc) database của bạn

Ngoài ra, để thực hiện backup nóng database của bạn, hệ thống database của bạn phải đang sử dụng công cụ lưu trữ InnoDB . Điều này là do XtraBackup dựa vào log giao dịch mà InnoDB duy trì. Nếu database của bạn đang sử dụng công cụ lưu trữ MyISAM, bạn vẫn có thể sử dụng XtraBackup nhưng database sẽ bị khóa trong một khoảng thời gian ngắn trước khi kết thúc backup .

Kiểm tra công cụ lưu trữ

Nếu bạn không chắc database của bạn sử dụng công cụ lưu trữ nào, bạn có thể tra cứu nó thông qua nhiều phương pháp. Một cách là sử dụng console MySQL để chọn database được đề cập, sau đó xuất trạng thái của mỗi bảng.

Đầu tiên, hãy nhập console MySQL:

  • mysql -u root -p

Sau đó nhập password root MySQL của bạn.

Tại dấu nhắc MySQL, hãy chọn database mà bạn muốn kiểm tra. Đảm bảo thay thế tên database của bạn tại đây:

  • USE database_name;

Sau đó in các trạng thái bảng của nó:

  • SHOW TABLE STATUS\G;

Động cơ phải được chỉ định cho mỗi hàng trong database :

Example Output:
... *************************** 11. row ***************************            Name: wp_users          Engine: InnoDB ... 

Khi bạn đã hoàn tất, hãy rời khỏi console :

  • exit

Hãy cài đặt Percona XtraBackup.

Cài đặt Percona XtraBackup

Cách dễ nhất để cài đặt Percona XtraBackup là sử dụng yum, vì repository của Percona cung cấp RPM.

  • sudo yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm

Sau đó, bạn có thể chạy lệnh này để cài đặt XtraBackup:

  • sudo yum install percona-xtrabackup

Chấp nhận mọi dấu nhắc xác nhận để hoàn tất cài đặt.

XtraBackup chủ yếu bao gồm chương trình XtraBackup và tập lệnh innobackupex Perl, ta sẽ sử dụng để tạo bản backup database của bạn .

Chuẩn bị lần đầu

Trước khi sử dụng XtraBackup lần đầu tiên, ta cần chuẩn bị hệ thống và user MySQL mà XtraBackup sẽ sử dụng. Phần này bao gồm việc chuẩn bị ban đầu.

User hệ thống

Trừ khi bạn có kế hoạch sử dụng user root hệ thống, bạn phải thực hiện một số chuẩn bị cơ bản đảm bảo XtraBackup có thể được thực thi đúng cách. Ta sẽ giả định bạn đã đăng nhập với quyền là user sẽ chạy XtraBackup và nó có các quyền của superuser .

Thêm user hệ thống của bạn vào group “mysql” (thay thế bằng tên user thực của bạn):

  • sudo gpasswd -a username mysql

Trong khi ta đang ở đó, hãy tạo folder sẽ được sử dụng để lưu trữ các bản backup mà XtraBackup tạo:

  • sudo mkdir -p /data/backups
  • sudo chown -R username: /data

Lệnh chown đảm bảo user sẽ có thể ghi vào folder backup .

User MySQL

XtraBackup yêu cầu user MySQL mà nó sẽ sử dụng khi tạo bản backup . Hãy tạo một cái ngay bây giờ.

Nhập console MySQL bằng lệnh này:

  • mysql -u root -p

Cung cấp password root MySQL.

Tại dấu nhắc MySQL, hãy tạo một user MySQL mới và gán password cho nó. Trong ví dụ này, user được gọi là “bkpuser” và password là “bkppassword”. Thay đổi cả hai điều này thành một thứ gì đó an toàn:

  • CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY 'bkppassword';

Tiếp theo, cấp quyền reload , khóa và sao chép user MySQL mới cho tất cả các database :

  • GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'bkpuser'@'localhost';
  • FLUSH PRIVILEGES;

Đây là những quyền bắt buộc tối thiểu mà XtraBackup cần để tạo bản backup đầy đủ của database .

Khi bạn hoàn tất, hãy thoát khỏi console MySQL:

  • exit

Bây giờ ta đã sẵn sàng tạo một bản backup đầy đủ các database của bạn .

Thực hiện backup đầy đủ nóng

Phần này trình bày các bước cần thiết để tạo một bản backup nóng đầy đủ của database MySQL bằng XtraBackup. Sau khi đảm bảo các quyền của file database là chính xác, ta sẽ sử dụng XtraBackup để tạo bản backup , sau đó chuẩn bị nó.

Cập nhật quyền Datadir

Trên CentOS 7, các file dữ liệu của MySQL được lưu trữ trong /var/lib/mysql , đôi khi được gọi là datadir . Theo mặc định, quyền truy cập vào datadir bị hạn chế đối với user mysql . XtraBackup yêu cầu quyền truy cập vào folder này để tạo bản backup của nó, vì vậy hãy chạy một vài lệnh đảm bảo user hệ thống mà ta đã cài đặt trước đó — với quyền là thành viên của group mysql — có các quyền thích hợp:

  • sudo chown -R mysql: /var/lib/mysql
  • sudo find /var/lib/mysql -type d -exec chmod 775 "{}" \;

Các lệnh này đảm bảo tất cả các folder trong datadir đều có thể truy cập được vào group mysql và phải được chạy trước mỗi lần backup .

If you added your user to the mysql group in the same session, you will need to login again for the group membership changes to take effect. 

Tạo bản sao

Bây giờ ta đã sẵn sàng để tạo bản backup . Với database MySQL đang chạy, hãy sử dụng trình innobackupex để thực hiện . Chạy lệnh này sau khi cập nhật user và password để trùng với thông tin đăng nhập của user MySQL của bạn:

  • innobackupex --user=bkpuser --password=bkppassword --no-timestamp /data/backups/new_backup

Thao tác này sẽ tạo một bản backup của database tại vị trí được chỉ định, /data/backups/new_backup :

innobackupex output
innobackupex: Backup created in directory '/data/backups/new_backup' 150420 13:50:10  innobackupex: Connection to database server closed 150420 13:50:10  innobackupex: completed OK! 

Ngoài ra , bạn có thể bỏ qua --no-timestamp để XtraBackup tạo folder backup dựa trên dấu thời gian hiện tại, như sau:

  • innobackupex --user=bkpuser --password=bkppassword /data/backups

Điều này sẽ tạo một bản backup của database trong một folder con được tạo tự động, như sau:

innobackupex output — no timestamp
innobackupex: Backup created in directory '/data/backups/2015-04-20_13-50-07' 150420 13:50:10  innobackupex: Connection to database server closed 150420 13:50:10  innobackupex: completed OK! 

Một trong hai phương pháp mà bạn quyết định sẽ xuất ra “innobackupex: complete OK!” trên dòng cuối cùng của kết quả của nó. Một bản backup thành công sẽ dẫn đến một bản sao của datadir database , phải được chuẩn bị trước khi nó được dùng .

Chuẩn bị backup

Bước cuối cùng trong việc tạo một bản backup nóng với XtraBackup là chuẩn bị nó. Điều này liên quan đến việc "phát lại" log giao dịch để áp dụng bất kỳ giao dịch chưa commit nào vào bản backup . Chuẩn bị bản backup sẽ giúp dữ liệu của nó nhất quán và có thể sử dụng để khôi phục.

Sau ví dụ , ta sẽ chuẩn bị bản backup đã được tạo trong /data/backups/new_backup . Thay thế đường dẫn này bằng đường dẫn đến bản backup thực tế của bạn:

  • innobackupex --apply-log /data/backups/new_backup

, bạn sẽ thấy “innobackupex: hoàn thành OK!” là dòng cuối cùng của kết quả .

Bản backup database của bạn đã được tạo và sẵn sàng được sử dụng để khôi phục database của bạn. Ngoài ra, nếu bạn có hệ thống backup file , chẳng hạn như Bacula , thì bản backup database này nên được bao gồm như một phần của lựa chọn backup của bạn.

Phần tiếp theo sẽ trình bày cách khôi phục database của bạn từ bản backup mà ta vừa tạo.

Thực hiện khôi phục backup

Việc khôi phục database bằng XtraBackup yêu cầu database đó phải dừng và dữ liệu của nó trống.

Dừng dịch vụ MySQL bằng lệnh này:

  • sudo systemctl stop mariadb

Sau đó, di chuyển hoặc xóa nội dung của datadir ( /var/lib/mysql ). Trong ví dụ , ta chỉ cần di chuyển nó đến một vị trí tạm thời:

  • mkdir /tmp/mysql
  • mv /var/lib/mysql/* /tmp/mysql/

Bây giờ ta có thể khôi phục database từ bản backup của bạn , “new_backup”:

  • innobackupex --copy-back /data/backups/new_backup

Nếu nó thành công, dòng cuối cùng của kết quả sẽ cho biết "innobackupex: hoàn thành OK!"

Các file được khôi phục trong datadir có thể sẽ thuộc về user mà bạn đã chạy quá trình khôi phục. Thay đổi quyền sở hữu trở lại mysql để MySQL có thể đọc và ghi các file :

  • sudo chown -R mysql: /var/lib/mysql

Bây giờ ta đã sẵn sàng để bắt đầu MySQL:

  • sudo systemctl start mariadb

Đó là nó! Database MySQL đã khôi phục của bạn sẽ hoạt động.

Kết luận

Đến đây bạn có thể tạo các bản backup nóng của database MySQL của bạn bằng Percona XtraBackup, có một số điều bạn nên xem xét cài đặt .

Trước hết, nên tự động hóa quy trình để bạn sẽ có các bản backup được tạo theo lịch trình. Thứ hai, bạn nên tạo các bản backup từ xa, trong trường hợp server database của bạn gặp sự cố, bằng cách sử dụng một thứ gì đó như rsync , một hệ thống backup file mạng nhưBacula hoặc backup DigitalOcean . Sau đó, bạn cần xem xét việc xoay vòng các bản backup của bạn (xóa các bản backup cũ theo lịch trình) và tạo các bản backup gia tăng (với XtraBackup) để tiết kiệm dung lượng ổ đĩa.

Chúc may mắn!


Tags:

Các tin liên quan

Cách tạo bản hot backup của database MySQL với Percona XtraBackup trên Ubuntu 14.04
2015-04-21
Cách chuẩn bị cho việc nâng cấp MySQL 5.7 của bạn
2015-04-20
Cách sử dụng MySQL hoặc MariaDB với Ứng dụng Django của bạn trên Ubuntu 14.04
2015-03-24
Cách sử dụng MySQL với ứng dụng Ruby on Rails của bạn trên Ubuntu 14.04
2015-03-18
Cách sử dụng MySQL với ứng dụng Ruby on Rails của bạn trên CentOS 7
2015-03-17
Cách đo hiệu suất truy vấn MySQL với mysqlslap
2014-10-02
Cách di chuyển database MySQL sang server mới trên Ubuntu 14.04
2014-05-22
Cách tối ưu hóa hiệu suất WordPress với MySQL Replication trên Ubuntu 14.04
2014-05-21
Cách sử dụng profile truy vấn MySQL
2014-04-07
Mở rộng quy mô Ruby on Rails: Thiết lập server MySQL chuyên dụng (phần 2)
2014-02-27