Máy chủ cơ sở dữ liệu của bạn lưu trữ một số thông tin có giá trị nhất của doanh nghiệp bạn. Đảm bảo sao lưu cơ sở dữ liệu đáng tin cậy để ngăn mất dữ liệu trong trường hợp xảy ra sự cố hoặc lỗi phần cứng là một hộp kiểm quan trọng.
Cho dù đó là máy chủ được tải nhiều 24x7 hay môi trường có khối lượng giao dịch thấp, bạn sẽ cần phải thực hiện sao lưu theo một quy trình liền mạch mà không làm gián đoạn hiệu suất của máy chủ trong môi trường sản xuất.
Trong blog này, chúng tôi sẽ xem xét hai trong số các công cụ được sử dụng nhiều nhất để thực hiện nhiệm vụ này, đó là Percona XtraBackup và Mariabackup. Chúng tôi sẽ xem xét những điểm giống và khác nhau giữa hai trong số chúng cũng như cách sử dụng chúng.
Percona XtraBackup là gì?
Percona XtraBackup là một công cụ mã nguồn mở để thực hiện sao lưu cơ sở dữ liệu MariaDB, MySQL và Percona Server. Nó thực hiện tính năng không chặn trực tuyến (đối với các công cụ được hỗ trợ), nén chặt chẽ và bảo mật các bản sao lưu đầy đủ trên các hệ thống giao dịch để các ứng dụng luôn sẵn sàng trong suốt thời gian của cửa sổ sao lưu.
Bằng cách sử dụng công cụ này, bạn có thể:
- Tạo các bản sao lưu InnoDB nóng, hoàn thành nhanh chóng và đáng tin cậy mà không cần tạm dừng cơ sở dữ liệu của bạn hoặc thêm tải cho máy chủ
- Thực hiện các bản sao lưu gia tăng
- Di chuyển các bảng giữa các máy chủ MySQL trực tuyến
- Dễ dàng tạo nô lệ sao chép MySQL mới
- Truyền trực tuyến các bản sao lưu MySQL đã nén tới một máy chủ khác
- Tiết kiệm dung lượng ổ đĩa và băng thông mạng
Mariabackup là gì?
Mariabackup là một công cụ mã nguồn mở được cung cấp bởi MariaDB để thực hiện sao lưu trực tuyến vật lý. Đây là một nhánh của Percona XtraBackup được thiết kế để hoạt động với các bảng được mã hóa và nén, đồng thời là phương pháp sao lưu được khuyến nghị cho cơ sở dữ liệu MariaDB.
MariaDB Server 10.1 đã giới thiệu MariaDB Compression và Data-at-Rest Encryption, nhưng các giải pháp sao lưu hiện có không hỗ trợ khả năng sao lưu đầy đủ cho các tính năng này. Vì vậy, MariaDB quyết định mở rộng XtraBackup (phiên bản 2.3.8) và đặt tên cho giải pháp này là Mariabackup.
Sự khác biệt giữa Percona XtraBackup và Mariabackup
Như chúng tôi đã lưu ý trước đó, Mariabackup là công cụ sao lưu được đề xuất cho MariaDB và sự khác biệt chính so với XtraBackup là nó hoạt động với các bảng được mã hóa và nén.
Dù sao, nếu vì bất kỳ lý do cụ thể nào mà bạn muốn sử dụng XtraBackup cho cơ sở dữ liệu MariaDB của mình, có một số điểm cần lưu ý tùy thuộc vào phiên bản máy chủ MariaDB mà bạn có:
- MariaDB 10.1:Với dữ liệu MariaDB không nén và không được mã hóa, bạn có thể sử dụng XtraBackup. Nếu mã hóa hoặc nén được sử dụng hoặc khi innodb_page_size được đặt thành một số giá trị khác 16K, nó sẽ không hoạt động.
- MariaDB 10.2:Bạn cũng có thể muốn thử sử dụng XtraBackup, nhưng lưu ý rằng sự cố có thể xảy ra do lỗi không tương thích với định dạng bản ghi hoàn tác MySQL 5.7 đã được sửa trong MariaDB 10.2.2. Do lỗi này, các bản sao lưu được chuẩn bị với XtraBackup có thể không khôi phục được một số giao dịch. Chỉ khi bạn chạy máy chủ với cài đặt innodb_undo_logs =1 thì điều này sẽ không thành vấn đề.
- MariaDB 10.3 trở lên:Trường hợp này đơn giản hơn. XtraBackup không tương thích.
Ngoài ra, có một số hạn chế cần lưu ý khi sử dụng Mariabackup:
- MyRocks:Bắt đầu với MariaDB 10.2.16 và MariaDB 10.3.8, Mariabackup sẽ sao lưu dữ liệu MyRocks Storage Engine. Sao lưu một phần dữ liệu MyRocks hiện không được hỗ trợ. Sao lưu tăng dần sẽ lưu trữ toàn bộ bản sao dữ liệu MyRocks.
- Chức năng xuất tệp:Trước MariaDB 10.2.9, Mariabackup không hỗ trợ chức năng --export (nó tạo tệp xuất để xuất dữ liệu từ cơ sở dữ liệu). Bạn có thể giải quyết hạn chế này bằng cách chuẩn bị sao lưu như bình thường (không có cờ --export), sau đó khởi động máy chủ và thực thi FLUSH TABLES FOR EXPORT.
- Tệp nhật ký:Các phiên bản Mariabackup cho đến 10.2.8 không tạo tệp nhật ký trống và dựa vào hành động --copy-back được thực thi bởi người dùng (sẽ xóa các tệp nhật ký innodb cũ, nếu có). Nếu người dùng không sử dụng --copy-back hoặc đảm bảo rằng thư mục dữ liệu trống trước khi khôi phục, các bản sao lưu được tạo bằng các phiên bản này có thể trở nên không nhất quán / bị hỏng (do sự hiện diện của các bản ghi InnoDB còn sót lại).
- Gcrypt:Mã hóa dựa trên công cụ sao lưu (gcrypt) không được hỗ trợ trên Mariabackup.
- Tùy chọn Innobackupex:Không có liên kết tượng trưng với innobackupex (sử dụng tham số --innobackupex thay thế). Công cụ innobackupex vá lỗi và cung cấp các tính năng bổ sung so với công cụ đổi mới để sao lưu bảng InnoDB và MyISAM.
- Tùy chọn nhỏ gọn:- tùy chọn nhỏ gọn không được hỗ trợ.
- Tùy chọn tạo lại chỉ mục:tùy chọn --rebuild_indexes không được hỗ trợ.
- Tar dành cho các tệp sao lưu:Hỗ trợ cho --stream =tar đã bị loại bỏ trong Mariabackup 10.1.24 (Các tùy chọn --streams chuyển các tệp sao lưu sang stdout).
Cuối cùng nhưng không kém phần quan trọng, Mariabackup có thể được cài đặt trên Windows.
Quá trình sao lưu Quá trình khôi phụcCách - Percona XtraBackup và Mariabackup
Hãy xem cách chúng tôi có thể cài đặt và sử dụng nó.
Cài đặt
Bạn có các phương pháp khác nhau để cài đặt cả XtraBackup và Mariabackup. Hãy thử cài đặt từ kho.
Cài đặt XtraBackup
Trên Debian / Ubuntu
$ wget https://repo.percona.com/apt/percona-release_0.1-6.$(lsb_release -sc)_all.deb
$ sudo dpkg -i percona-release_0.1-6.$(lsb_release -sc)_all.deb
$ sudo apt-get update
$ sudo apt-get install percona-xtrabackup-24
Trên RedHat / CentOS
$ sudo yum install http://www.percona.com/downloads/percona-release/redhat/0.1-6/percona-release-0.1-6.noarch.rpm
$ sudo yum install percona-xtrabackup-24
Cài đặt Mariabackup
Trên Debian / Ubuntu
Mariabackup là một phần của Máy chủ MariaDB bắt đầu với MariaDB 10.1.23.
$ sudo apt-get install software-properties-common
$ sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
$ sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://nyc2.mirrors.digitalocean.com/mariadb/repo/10.1/ubuntu bionic main'
$ sudo apt-get update
$ sudo apt-get install mariadb-server-10.1
Trên CentOS / RedHat
$ sudo vi /etc/yum.repos.d/MariaDB.repo
[mariadb]
name=MariaDB
baseurl=http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
$ sudo yum install MariaDB-backup
Cấu hình
Cả Xtrabackup và Mariabackup đều đọc phần [mysqld] và [xtrabackup] của bất kỳ tệp cấu hình MySQL nào, theo thứ tự đó. Bằng cách này, nó có thể đọc các tham số MySQL, chẳng hạn như tham số datadir hoặc InnoDB.
Chúng tôi có thể sửa đổi các tham số có trong phần [mysqld] bằng cách sửa đổi giá trị của chúng trong [xtrabackup], như chúng tôi đã đề cập trước đây, chúng được đọc theo thứ tự, vì vậy thứ cuối cùng chúng tôi có trong [xtrabackup] sẽ được ưu tiên.
[mysqld]
datadir=/data/datadir
[xtrabackup]
target_dir=/backups/
Người dùng có các đặc quyền tối thiểu cần thiết để sao lưu đầy đủ sẽ được RELOAD, LOCK TABLES, Process và REPLICATION CLIENT:
mysql> CREATE USER 'backupuser'@'localhost' IDENTIFIED BY 'Password';
mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'backupuser'@'localhost';
Và sau đó, bạn có thể thêm người dùng này vào tệp cấu hình MySQL:
[xtrabackup]
user=backupuser
password=Password
Ngoài ra, bạn có thể sử dụng Xtrabackup hoặc Mariabackup để thực hiện Chuyển ảnh chụp trạng thái khi bạn đang sử dụng Percona XtraDB Cluster hoặc MariaDB Galera Cluster. Bạn phải đặt các biến wsrep_sst_method và wsrep_sst_auth trong các tệp cấu hình:
[mysqld]
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=backupuser:Password
Hoặc
[mysqld]
wsrep_sst_method=mariabackup
wsrep_sst_auth=backupuser:Password
Cách sử dụng
Vì Mariabackup dựa trên XtraBackup nên nó có thể được sử dụng tương tự.
Bây giờ chúng ta hãy xem một ví dụ sử dụng cả hai phương pháp để tạo, chuẩn bị và khôi phục một bản sao lưu đầy đủ.
Tạo bản sao lưu
Để tạo một bản sao lưu mới với XtraBackup hoặc Mariabackup, bạn cần thêm các tùy chọn --backup và --target-dir vào dòng lệnh:
$ xtrabackup --backup --target-dir=/backups/
Hoặc
$ mariabackup --backup --target-dir=/backups/
Dir đích, nơi lưu trữ bản sao lưu, có thể được chỉ định trong các tệp cấu hình MySQL. Quá trình sao lưu sẽ không ghi đè lên các tệp hiện có. Nếu tệp tồn tại, quá trình sao lưu sẽ không thành công.
Transaction log of lsn (9755450) to (9755467) was copied.
181122 23:02:44 completed OK!
Nếu mọi thứ diễn ra tốt đẹp, dòng cuối cùng mà bạn nhìn thấy phải là "hoàn thành OK!". Bạn có thể hủy sao lưu bất kỳ lúc nào vì nó không sửa đổi nội dung của cơ sở dữ liệu.
[[email protected] ~]# ls -l /backups/
total 102448
-rw-r----- 1 root root 488 Nov 22 23:02 backup-my.cnf
-rw-r----- 1 root root 482 Nov 22 23:02 ib_buffer_pool
-rw-r----- 1 root root 104857600 Nov 22 23:02 ibdata1
drwxr-x--- 2 root root 4096 Nov 22 23:02 mysql
drwxr-x--- 2 root root 4096 Nov 22 23:02 performance_schema
drwxr-x--- 2 root root 4096 Nov 22 23:02 sakila
drwxr-x--- 2 root root 12288 Nov 22 23:02 sys
-rw-r----- 1 root root 64 Nov 22 23:02 xtrabackup_binlog_info
-rw-r----- 1 root root 113 Nov 22 23:02 xtrabackup_checkpoints
-rw-r----- 1 root root 533 Nov 22 23:02 xtrabackup_info
-rw-r----- 1 root root 2560 Nov 22 23:02 xtrabackup_logfile
Đây phải là nội dung của bản sao lưu của bạn. Nó có thể thay đổi tùy thuộc vào cơ sở dữ liệu của bạn.
Chuẩn bị sao lưu
Khi bạn đã tạo bản sao lưu bằng XtraBackup hoặc Mariabackup, bạn cần chuẩn bị để khôi phục bản sao lưu. Các tệp dữ liệu không nhất quán cho đến khi chúng được chuẩn bị, vì chúng được sao chép vào các thời điểm khác nhau trong suốt thời gian sao lưu. Nếu bạn cố gắng khôi phục nó và khởi động cơ sở dữ liệu của mình, nó sẽ phát hiện ra lỗi và tự sập để ngăn bạn chạy trên dữ liệu không nhất quán.
Để chuẩn bị sao lưu, bạn cần chạy lệnh xtrabackup hoặc mariabackup với tùy chọn --prepare và chỉ định mục tiêu nơi lưu trữ bản sao lưu.
$ xtrabackup --prepare --target-dir=/backups/
Hoặc
$ mariabackup --prepare --target-dir=/backups/
InnoDB: Shutdown completed; log sequence number 9757224
181122 23:05:29 completed OK!
Dòng cuối cùng mà bạn nhìn thấy phải là "Tắt máy hoàn thành; số thứ tự nhật ký xxxxxxx" và "đã hoàn thành OK!" nếu mọi thứ diễn ra tốt đẹp. Bạn không nên hủy quá trình chuẩn bị vì nó có thể gây hỏng tệp dữ liệu và bản sao lưu sẽ không sử dụng được.
Nếu bạn muốn sử dụng bản sao lưu này với bản sao lưu gia tăng sau này, bạn nên sử dụng tùy chọn --apply-log-only khi chuẩn bị, nếu không bạn sẽ không thể thực hiện được.
Khôi phục bản sao lưu
Sau khi chuẩn bị sao lưu, bạn có thể sử dụng tùy chọn khôi phục với các tham số --copy-back hoặc --move-back, để sao chép hoặc di chuyển bản sao lưu vào datadir. Nếu bạn không có đủ dung lượng ổ đĩa, bạn có thể nên sử dụng tùy chọn di chuyển. Ngoài ra, chúng ta cần chỉ định dir đích nơi lưu trữ bản sao lưu. Hãy nhớ rằng datadir phải trống và dịch vụ cơ sở dữ liệu phải ngừng hoạt động trước khi khôi phục bản sao lưu.
$ xtrabackup --copy-back --target-dir=/backups/
Hoặc
$ mariabackup --copy-back --target-dir=/backups/
Đầu tiên, nó sẽ sao chép / di chuyển các bảng và chỉ mục MyISAM, tiếp theo là các bảng và chỉ mục InnoDB và cuối cùng là các tệp nhật ký. Nó sẽ bảo toàn các thuộc tính của tệp khi sao chép chúng, bạn có thể phải thay đổi quyền sở hữu của tệp thành mysql trước khi khởi động máy chủ cơ sở dữ liệu, vì chúng sẽ thuộc sở hữu của người dùng đã tạo bản sao lưu.
$ sudo chown -R mysql:mysql /var/lib/mysql
Có một số tham số để sử dụng với Xtrabackup và Mariabackup. Bạn có thể kiểm tra các thông số này tại đây cho XtraBackup và tại đây cho Mariabackup.
ClusterControlSingle Console cho Toàn bộ Cơ sở dữ liệu Cơ sở hạ tầng của bạnTìm hiểu những tính năng mới khác trong ClusterControlInstall ClusterControl MIỄN PHÍQuản lý bản sao lưu của bạn trên ClusterControl
Như chúng ta đã thấy ở trên, chạy sao lưu không phải là khoa học tên lửa. Nó cũng có thể được lên lịch với cron (nhưng hãy cẩn thận với những thất bại âm thầm!). Tuy nhiên, một tập lệnh để thường xuyên tạo các bản sao lưu không phải là một giải pháp quản lý sao lưu. Bạn cần một cách để báo cáo về các bản sao lưu của mình và cảnh báo về các lỗi. Bây giờ, định cấu hình các bản sao lưu trong môi trường của bạn và thấy các bản sao lưu hoạt động mà không có lỗi không có nghĩa là mọi thứ đều tốt. Bạn có thể đã nghe nói về bản sao lưu của Schrödinger, trong đó nói rằng điều kiện của bất kỳ bản sao lưu nào là không xác định cho đến khi cố gắng khôi phục. Bởi vì điều tồi tệ hơn có thể xảy ra là một thảm họa và bạn nhận ra rằng các bản sao lưu bị sai vì một lý do nào đó. Bạn cố gắng khôi phục các tệp đã được sao lưu và nó không khôi phục lại những gì bạn nghĩ là bạn đã sao lưu hoặc nó không khôi phục được gì cả! Sau đó, có những thứ như di chuyển các tệp sao lưu ra ngoài trang web, ví dụ:vào bộ nhớ đám mây bên ngoài, để khắc phục thảm họa. Mã hóa và xử lý khóa rất quan trọng đối với bảo mật. Việc lưu giữ các bản sao lưu cục bộ cũng như bên ngoài / đã lưu trữ cũng cần được quản lý.
Hãy xem ClusterControl có thể trợ giúp như thế nào.
Nếu bạn muốn sử dụng tính năng ClusterControl Backup, hãy chuyển đến ClusterControl -> Chọn Cluster -> Backup và ở đó bạn có thể xem các bản sao lưu hiện tại của mình, tạo hoặc lên lịch cho một bản sao lưu mới.
Phần sao lưu ClusterControlSử dụng tùy chọn tạo hoặc lập lịch, chúng ta có thể chọn cả hai, phương pháp XtraBackup hoặc Mariabackup. Trong cùng một phần, chúng ta có thể chọn máy chủ để thực hiện sao lưu, kích hoạt sao lưu một phần, chọn nơi bạn muốn lưu trữ bản sao lưu và nếu bạn muốn tải bản sao lưu lên đám mây (AWS, Azure hoặc Google Cloud).
ClusterControl Tạo bản sao lưu 1Sau đó, chúng tôi có thể chọn các thông số sao lưu như nén, mã hóa và lưu giữ.
ClusterControl Tạo sao lưu 2Và đây phải là các lệnh mà ClusterControl sẽ chạy cho bạn:
[16:37:58]: 192.168.100.120: Launching ( LC_ALL=C /usr/bin/innobackupex --defaults-file=/etc/my.cnf --galera-info --parallel 1 --stream=xbstream --no-timestamp . | gzip -6 - > /root/backups/BACKUP-13/backup-full-2018-11-14_193757.xbstream.gz ) 2>&1.
Hoặc
[16:29:57]: 192.168.100.131: Launching ( LC_ALL=C /usr/bin/mariabackup --defaults-file=/etc/my.cnf --backup --galera-info --parallel 1 --stream=xbstream --no-timestamp | gzip -6 - > /root/backups/BACKUP-11/backup-full-2018-11-14_192957.xbstream.gz ) 2>&1.
Lệnh này có thể khác nhau tùy thuộc vào tham số bạn đã chọn.
Như chúng ta có thể thấy, ClusterControl là một người bạn tốt nếu chúng ta muốn sử dụng XtraBackup hoặc Mariabackup. Chúng tôi có thể chạy các lệnh sao lưu phức tạp một cách dễ dàng, bằng cách chọn các tùy chọn từ giao diện người dùng ClusterControl.
ClusterControl hỗ trợ cả sao lưu toàn bộ hoặc sao lưu tăng dần, vì vậy chúng tôi có thể định cấu hình tất cả chiến lược sao lưu của mình từ một giao diện người dùng thân thiện.
Kết luận
Khi sao lưu máy chủ MariaDB, bạn nên sử dụng công cụ Mariabackup. Tuy nhiên, nếu vì lý do nào đó bạn muốn sử dụng XtraBackup, bạn vẫn có thể. Nhưng bạn cần lưu ý các hạn chế được áp dụng, như chúng tôi đã lưu ý trong blog này. Và cuối cùng, chúng ta đã thảo luận về cách một tập lệnh để sao lưu cơ sở dữ liệu không giống như một giải pháp quản lý sao lưu và đã có một cái nhìn nhanh về ClusterControl.
Hãy cho chúng tôi biết nếu chúng tôi bỏ lỡ bất kỳ sự khác biệt nào giữa XtraBackup và MariaBackup.
Các bản sao lưu không chặn được hỗ trợ cho các công cụ lưu trữ InnoDB, XtraDB và HailDB. Các công cụ lưu trữ sau đây có thể được sao lưu bằng cách tạm dừng ghi nhanh vào cuối quá trình sao lưu:MyISAM, Hợp nhất và Lưu trữ, bao gồm các bảng được phân vùng, trình kích hoạt và các tùy chọn cơ sở dữ liệu.