Backup và recovery trong mysql - Phần 1

Thấy mảng này chưa ai viết. Hôm nay, tôi bèn thử sức xem sao. Bất cứ ai quản trị một hệ thống database thì chắc hẳn đều phải quan tâm đến vấn đề backup và recovery cho dữ liệu. Tuy đây là một việc gây dư thừa tài nguyên khi mà tôi phải duplicate các data đang có trong database ra một nơi khác nhưng lại là một việc đáng làm. Thử tưởng tượng một ngày không may ổ cứng có vấn đề và data đi tong hết. Nếu không có giải pháp dự phòng thì đó cũng chính là thời điểm dịch vụ bị sụp đổ hoàn toàn. Thôi tôi đi vào việc chính. Viết mấy cái tình huống giả định này ra mà đến bản thân cũng thấy rợn :D

Các xu hướng tiếp cận

Hiện tại, theo tôi được biết, có hai xu hướng chính trong việc backup database: physical backup và logical backup

Physical backup

Là hành động backup file/folder của database nằm trên file system

  • Ưu điểm: Tốc độ backup/restore nhanh

  • Nhược điểm: Không phù hợp lắm nếu tôi backup data trên phiên bản mysql này rồi restore trên phiên bản mysql khác. Thâm chí còn không thể được nếu backup data trên một biến thể mysql này (ví dụ mysql) rồi restore trên một biến thể mysql khác (ví dụ mariadb) vì system table của hai biến thể này có hơi khác nhau. Không thể backup từng database một nếu trong config mysql không đặt innodb_file_per_table=ON vì khi đó data sẽ được lưu gộp chung vào một system tablespace. Trường hợp bất khả đó thì tôi chỉ có thể full backup.

  • Phương thức cụ thể:

Rsync

Full backup bằng rsync. Đây là cách làm cơ bản nhất.

  • Ưu điểm: Đơn giản, dễ xài, nhanh chóng trong cả backup và restore

  • Nhược điểm: Bắt buộc phải có downtime dịch vụ. Bạn không nên rsync database khi service mysql đang chạy vì như vậy bản backup của bạn sẽ ở trạng thái mất đồng nhất hoặc hỏng hóc. Khi restore trên các bản backup như vậy, mysql buộc phải thực hiện bước crash recovery và không có gì đảm bảo mysql sẽ luôn hoàn thành quá trình recovery này tốt đẹp.

  • Tình huống sử dụng: Khi bạn cần move database. Tắt service và rsync database

percona xtrabackup

Full backup bằng percona xtrabackup

  • Ưu điểm: Có thể dùng để online backup. Sử dụng tool này bạn có thể tạo full backup định kỳ hàng ngày. Tool này dùng thích hợp nhất với innodb. Với myisam, xtrabackup vẫn cần lock table một chút để hoàn tất quá trình backup. Ngoài ra, xtrabackup có hỗ trợ incremental backup, partial backup (nhưng cấu hình cần có innodb_file_per_table=ON) và nén data.

  • Nhược điểm: Không hoàn toàn online backup với myisam.

  • TÌnh huống sử dụng: Khi bạn cần backup định kỳ. Backup plan của bạn có thể linh động: Duy trì nhiều fullbackup và giữ một lượng nhất định các full backup mới nhất hoặc duy trì một full backup và nhiều incremental backup (số full backup sẽ ít hơn)

Logical backup

Là hành động backup bằng cách tạo file dump. File này có log lại toàn bộ các statement mà đã từng chạy để tạo nên database

  • Ưu điểm: Không phụ thuộc cấu hình hay sự sai biệt phiên bản, biến thể mysql giữ nơi tạo backup và nơi restore. Tôi có thể dump từng database, thậm chí từng table riêng rẽ.

  • Nhược điểm: Tốc độ backup/restore rất châm. Nếu bạn có data cỡ 7-10G thì cũng chớ nên dùng mysqldump

  • Phương thức cụ thể:

mysqldump

  • Ưu điểm: Tool này có hỗ trợ online backup với innodb. Tương thích tốt với mysql. Mọi biến thể mysql đều tích hợp tool này.

  • Nhược điểm: Một luồng nên cực kỳ chậm trong cả backup/restore. Không online backup với myisam.

  • Tình huống sử dụng: Thích hợp để dump một phần database hoặc một vài database với dung lượng nhỏ.

mydumper

  • Ưu điểm: Tốc độ cao trong cả backup/restore vì hỗ trợ đa luồng.

  • Nhược điểm: Chưa hỗ trợ với mariadb bản mới. Không hỗ trợ dump cùng lúc nhiều database. Cần lock table khi thực hiện

  • Tình huống sử dụng: Thích hợp để dump các big table trong một database hoặc một big database

Point in time recovery

Đây là cách kết hợp full backup với binlog để giảm thiểu mất mát data tối đa khi có sự cố. Tất cả các cách đã trình bày trước đó đều có nhược điểm là tôi không thể chạy liên tục hàng phút vì có thể gây tốn hiệu năng của hệ thống và hơn nữa khoảng thời gian giữa hai lần backup liên tiếp cũng là khoảng thời gian mà dữ liệu bị mất khi có sự cố. Ví dụ, tôi chạy online backup (hot backup) đinh kỳ 6 tiếng/lần. Sau khi chạy online backup xong được 3 tiếng thì có sự cố như vậy bản backup của tôi không có data trong khoảng 3 tiếng sau đó. Point in time recovery có thể giải quyết được vấn đề này. Bằng cách cấu hình để tạo binlog trên database, tôi có thể bổ sung cho bản full backup các bản binlog backup nhỏ nằm giữa hai bản full backup liên tiếp.

Backup plan theo mô hình database

Mô hình single database: Tôi có thể thực hiện việc này đơn giản. Định kỳ chạy script để backup online kết hợp với enable binlog

Mô hình master-slave: Bản thân mô hình này thì mỗi slave cũng là một bản backup rồi.

Mô hình galera multi-master: Chọn một node trong cụm để chạy online backup và enable binlog + log_slave_updates trên tất cả các node

Kết thúc phần 1. Trong phần 2, tôi sẽ trình bày các cách làm cụ thể hơn.

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

manhdung

44 bài viết.
263 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
76 11
Giới thiệu RabbitMQ là một message broker ( messageoriented middleware) sử dụng giao thức AMQP Advanced Message Queue Protocol (Đây là giao thức ph...
manhdung viết 3 năm trước
76 11
White
48 4
Giả định bạn tiếp nhận một server mới toanh, bạn cần tìm một số thông tin về nó như loại CPU, loại main, loại memory, memory dùng của hãng nào... c...
manhdung viết gần 2 năm trước
48 4
White
41 12
Trong phần 1, tôi đã giới thiệu về sơ lược rabbitmq, vai trò của rabbitmq trong hệ thống phân tán và hướng dẫn cài đặt. Trong phần này, tôi sẽ trìn...
manhdung viết 3 năm trước
41 12
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
44 bài viết.
263 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!