+20

Mít đặc và biết tuốt nói về các phương pháp backup MYSQL để tăng tốc độ backup và restore lên hàng trăm lần

Mít Đặc: Chào anh Tuốt, hôm nay tôi chạy sang anh hỏi chút vấn đề, chả là sau vụ việc VNDirect bị hack, mất dữ liệu bên tôi có nhu cầu backup MYSQL thật nhanh và restore nhanh khi có sự cố xảy ra, anh có phương án nào hay ho không?

Biết Tuốt: Hiện tại bên anh có backup chưa?

Mít Đặc: Bên tôi đang dùng MySQL Dump. Nhưng mà thời gian backup và restore lâu quá, mất cả ngày, làm ăn gì được chứ! Nếu mà có vấn đề gì xảy ra thì khách hàng vêu mõm chờ. image.png

Biết tuốt: Đúng rồi, MYSQL Dump chạy đơn luồng, tạo ra những lện insert into và một file backup duy nhất, nói chung đúng là siêu chậm. Để tăng tốc cho nó thì MySQL cung cấp một giải pháp khác là MYSQL PUMP. Nó có thể chạy song song nên có thể chạy nhanh hơn được kha khá, nhưng nói chung thì vẫn chậm do vẫn dùng file SQL và với một bảng có dữ liệu lớn thì sự song song bị hạn chế. image.png

Mít đặc: Nói như vậy là có giải pháp khác đúng không?

Biết Tuốt: Đúng vậy để giải quyết vấn đề chạy lệnh Insert hàng loạt gây chậm, MySQL có cơ chế import, export giúp quá trình backup và restore nhanh hơn. Hơn nữa để giải quyết vấn đề một bảng quá lớn, vẫn có thể chạy song song được thì MySQL đưa ra giải pháp là chunk nghĩa là chia table lớn thành nhiều đoạn nhỏ để chạy song song. Công cụ này là MySQL Shell với tính năng Dump & Load. Bạn có thể xem benchmark tại đây

Đây là phần so sánh về tốc độ dump (backup), càng lớn càng tốt

image.png

Mít đặc: Ồ đúng là MySql Dump và MySQL Pump chậm thật, nhưng tôi nhìn thấy MyDumper nó là cái gì vậy? Một công cụ backup khác à?

Biết Tuốt: Đúng vậy, nó cũng khá nhanh, nhưng không phải hàng của MySQL cung cấp

Mít đặc: Nhìn trên hình tôi cũng thấy trong trường hợp backup StackOverFlow thì Mysql Shell Dump/Load chạy nhanh hơn hẳn luôn, còn trong trường hợp Wikipedia thì MyDumper chạy nhanh hơn đấy.

Biết tuốt: Bởi vì thuật toán nén của Mysql Shell (zstd) chạy tốt hơn của mydumper (zlib ) nên trong đa số trường hợp chạy nhanh hơn. Còn trường hợp Wikipedia thì do với kiểu binary thì MySQL Shell converts sang base64, còn mydumper thì không. Tuy nhiên điều này được cải tiến ở bản 8.0.22.

Mít đặc: Hay quá còn về restore thì sao?

Biết tuốt: image.png

Như hình trên có thể thấy rằng Mysql Shell chạy tốt hơn hẳn tất cả và vượt trội hơn rất nhiều so với dump hay pump bởi vì nó không load theo kiểu file .sql bị hạn chế nhiều về hiệu năng và với bảng lớn thì chỉ có một luồng mà thôi. Thay vào đó nó sử dụng cơ chế load và chunk nên hiệu quả hơn nhiều.

Mít đặc: Ok phương án khả thi là tôi sẽ chuyển sang backup bằng Mysql Shell.

Biết tuốt: Ở trên là các phương pháp backup logic, còn có nhưng cách backup vật lý nữa?

Mít đặc: Vật lý là kiểu copy thẳng file đúng không?

Biết tuốt: Đúng vậy, tuy nhiên khi Mysql đang chạy mà copy luôn folder trong ổ cứng thì có thể bị lỗi dữ liệu lúc restore, vì vậy cần một số tool để làm điều này. Một trong số đó là Percona XtraBackup. Có thể xem hiệu năng của nó như hình dưới

image.png

Với tổng thời gian backup restore có thể thấy XtraBackup vượt trội hơn rất nhiều.

image.png

Với việc backup thì MySql Shell có vẻ nhanh hơn một chút.

image.png

Tuy nhiên với việc restore thì phương pháp vật lý tỏ ra vượt trội vì chỉ cần trỏ thư mục là chạy được, hơn rất nhiều so với việc phải chạy các lệnh logic.

Mít đặc: Ok quá rồi. tôi sẽ chuyển sang dùng phương pháp vật lý với percona Xtrabackup.

Biết tuốt: Tuy vậy percona Xtrabackup có nhược điểm là tương thích phiên bản, luôn phải cài bản mới để backup nếu bạn nâng cấp MySQL. Việc cài thêm tool trên server cũng làm tôi không thích lắm. Ngoài ra trước khi backup cần phải optimize một số table nên sẽ không nhanh lắm khi chạy trên server có nhiều databases. Tất nhiên là khi có những table cần optimize.

Mít đặc: Ồ vậy có tool khác chứ

Biết tuốt: Đúng vậy nếu bạn có tiền thì có thể dùng Mysql Enterprise, hàng xịn sẽ hỗ trợ bạn hot backup với hiệu năng nhanh.

Mít đặc: Nhưng tôi không có nhiều tiền, thời gian lâu tý cũng được, chắc tôi dùng percona tiếp vậy.

Biết tuốt: Thực ra còn có một giải pháp nữa mà không cần cài cắm gì nhiều. Hiệu năng cũng rất tốt. Đó là một plugin của Mysql là Clone Plugin Có khả năng copy file giống như percona Xtrabackup. Với hiệu năng đo được như sau

image.png

Với số thead ít và có nén thì Xtrabackup hiệu quả hơn Clone. Tuy nhiên với việc không nén và nhiều thread thì việc sử dụng Clone hiệu quả hơn. Thời gian restore như nhau vì chỉ cần copy file mà thôi. Dùng clone không cần cài thêm tool nào khác, đơn giản tiện lợi mà nhanh nữa.

Mít đặc: Ồ, vậy là nếu backup logic thì Mysql Shell là nhất, còn với vật lý thì có nhiều lựa chọn, nhưng đơn giản nhất là dùng Clone Plugin

Biết tuốt: Đúng như vậy.

Mít đặc: Một Upvote cho bạn, tôi sẽ triển khai thí điểm nhiều cách xem sao, nhìn tốc độ có thể thấy nhanh hơn rất nhiều lần với cách dump truyền thống mà tôi sử dụng. Nếu có thêm câu hỏi nào có thể để lại comment nhé!

https://www.percona.com/blog/backup-restore-performance-conclusion-mysqldump-vs-mysql-shell-utilities-vs-mydumper-vs-mysqlpump-vs-xtrabackup/ https://www.percona.com/blog/the-mysql-clone-wars-plugin-vs-percona-xtrabackup/


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí