Cách tối ưu để tạo bản sao lưu MySQL cho cơ sở dữ liệu khá lớn (MyISAM / InnoDB)


8

Hiện tại chúng tôi có một cơ sở dữ liệu MySQL mạnh mẽ chạy một số trang web dựa trên Django lưu lượng truy cập cao cũng như một số trang web thương mại điện tử có kích thước khá. Kết quả là chúng ta có một lượng cơ sở dữ liệu lớn bằng cả hai bảng InnoDB và MyISAM.

Thật không may, gần đây chúng tôi đã gặp phải một bức tường do lưu lượng truy cập nên tôi đã thiết lập một máy chủ chính khác để giúp giảm bớt việc đọc / sao lưu.

Bây giờ tôi chỉ cần sử dụng mysqldump với một vài đối số và nó đã được chứng minh là ổn .. cho đến bây giờ. Rõ ràng mysqldump là một phương pháp nhanh chậm tuy nhiên tôi tin rằng chúng tôi đã vượt xa việc sử dụng nó. Bây giờ tôi cần một giải pháp thay thế tốt và đang xem xét sử dụng tiện ích mk -allel -dump Maatkits hoặc giải pháp chụp nhanh LVM.

Phiên bản ngắn gọn:

  • Tôi có một cơ sở dữ liệu MySQL khá lớn tôi cần sao lưu
  • Phương pháp hiện tại sử dụng mysqldump không hiệu quả và chậm (gây ra sự cố)
  • Nhìn vào một cái gì đó như ảnh chụp nhanh mk -allel-dump hoặc LVM

Bất kỳ đề xuất hoặc ý tưởng nào cũng sẽ được đánh giá cao - vì tôi phải thực hiện lại cách chúng tôi thực hiện những việc tôi muốn thực hiện đúng / hiệu quả nhất :).

Câu trả lời:


5

Tôi đã thành công tốt đẹp với bản sao MySQL và tarball hàng đêm. Đối với db nhỏ hơn, cơ sở dữ liệu mysql và lược đồ tôi sử dụng kết hợp các tập lệnh được thiết kế để sử dụng mysqlhotcopy và mysqldump.

Sao lưu nóng InnoDB là một sản phẩm thương mại tuyệt vời nhưng tôi không chắc nó xử lý các bảng hỗn hợp trong cùng một cơ sở dữ liệu như thế nào. Đề xuất của pQd cho XtraBackup có thể tốt để so sánh với điều này.

Những người khác thích ảnh chụp nhanh LVM và tôi nói đó chắc chắn là điều cần xem xét. Cuối cùng, một sự kết hợp của các giải pháp có thể là tốt nhất.

Nó cũng đáng chú ý đây là một chủ đề cũ. Giữa cuốn sách MySQL hiệu suất cao , hướng dẫn sử dụng MySQL và các câu hỏi ServerFault trước đây - điều này đã bị cạn kiệt trên cơ sở chung. Xem:


+1; với myisam bạn không bao giờ biết liệu bạn có sao lưu logic nhất quán [được thực hiện bởi lvm / mysqldump / từ lave] hay không. có thể nếu ứng dụng của bạn chỉ thay đổi trong giờ làm việc - bạn có thể đổ nó một cách an toàn vào ban đêm, nếu không - bạn không bao giờ chắc chắn và không có phương pháp nào có thể giúp được.
pQd

Tôi nghĩ rằng bạn đúng về các giải pháp trộn. Như đã đề cập dưới phần trả lời của pQd, tôi có thể sẽ chụp ảnh nhanh LVM và xem xét tiện ích xtrabackup (nói rằng nó có thể xử lý các bảng hỗn hợp). Tôi đã xem xét bản sao lưu nóng của InnoDB tuy nhiên tôi luôn là một trong các dự án nguồn mở. Cảm ơn các tài liệu tham khảo, tôi đã xem xét 2 trong số đó nhưng các câu trả lời khá chung chung / không giải quyết được các vấn đề tôi gặp phải / họ đang đề cập đến các cơ sở dữ liệu "bình thường" và "trần tục" hơn.
WinkyWolly

4

xtrabackup - ít nhất là cho innodb.


Tuy nhiên, điều thú vị là tôi muốn một giải pháp duyên dáng hơn để không lo lắng về sự kết hợp các bảng InnoDB / MyISAM của tôi.
WinkyWolly

xtrabackup đi kèm với kịch bản có thể giúp bạn sao lưu các myisams, nhưng hãy kiểm tra nhận xét của tôi dưới bài đăng của Warner
pQd

Cảm ơn, có vẻ như tôi có thể đi theo hướng này và trộn vào các ảnh chụp nhanh LVM để có biện pháp tốt. Nó cũng tuyên bố rằng nó có thể "xử lý" các bảng MyISAM thông qua tập lệnh "innobackupex". Tôi cho rằng tôi sẽ cho nó một vòng xoáy và xem chính xác điều gì sẽ xảy ra.
WinkyWolly

3

Cách phổ biến nhất để giải quyết vấn đề này là thiết lập một máy chủ MySQL khác, thậm chí có thể nằm trên cùng một máy và chạy sao chép chính / phụ. Sau đó, bạn có thể thực hiện sao lưu trên nô lệ, không ảnh hưởng đến chủ.


0

Trên EC2 EBS, tôi hiện đang sử dụng xfs_freeze. Tôi đang xem xét khả năng chuyển sang xtrabackup tại một số điểm, nhưng khi tôi cho thử nghiệm lần đầu tiên, nó rất đói CPU.


Thật không may, tôi chỉ sử dụng XFS trên các máy chủ phương tiện ngay bây giờ vì vậy đó không phải là một tùy chọn. Bạn đã có loại trải nghiệm nào (ngoài CPU đói, có thể chi tiết hơn?) Với xtrabackup? Bạn đã sao lưu các bảng InnoDB thuần túy hay hỗn hợp?
WinkyWolly

Do dự lớn nhất của tôi là nó đã nhai CPU trong khoảng 30 phút khi hoàn thành (sao lưu DB khoảng 35 GB dữ liệu), khiến máy chủ DB chỉ hoạt động bên lề - chắc chắn không phải là thứ tôi có thể đang chạy trên một bậc thầy sản xuất . Tôi thực sự đã chuyển đổi một vài bảng MyISAM còn lại của mình sang InnoDB một phần cho mục đích này. Tôi nghĩ có lẽ sẽ ổn khi chạy trên một nô lệ miễn là điều đó không khiến bản sao bị tụt lại phía sau.
dùng5336

0

Nếu bạn đang chạy sao chép cơ sở dữ liệu được chia sẻ trên các ứng dụng, có vẻ như có một câu hỏi rõ ràng về việc bạn có thể cải thiện hiệu suất của nhiều thứ, bao gồm sao lưu, bằng cách dành máy chủ cơ sở dữ liệu cho các ứng dụng. Chia sẻ là tốt đẹp, cho đến khi nó không.


0

Nếu bạn đang giữ các bảng MyISAM của mình chỉ vì lý do cũ (bạn không bận tâm đến việc thay đổi chúng), thì đây là những gì tôi sử dụng để dễ dàng khắc phục điều đó:

    mysql -u root --password=<password> --database=db_name -B -N -e "SHOW TABLES" | awk '!/not_this_db/ && !/or_this_one/ && /^[a-z]/ {print "ALTER TABLE", $1, "ENGINE=INNODB;"}' | mysql -u root --password=<password> --database=db_name

Bạn có thể loại trừ và bao gồm các cơ sở dữ liệu với regex awk, chẳng hạn như chỉ các dbs bắt đầu bằng một chữ cái viết thường trong ví dụ của tôi ở trên. Điều này tất nhiên sẽ khóa các bảng trong quá trình thay đổi.

Sau đó, sử dụng xtrabackup để sao chép toàn bộ cơ sở dữ liệu thẳng vào máy chủ khác mà không khóa bất kỳ bảng nào hoặc sử dụng quá nhiều đĩa IO (sau khi thiết lập các khóa ssh rsa):

innobackupex --throttle=500 --compress --stream=xbstream /doesntneedtoexist | ssh user@otherhost "xbstream -x -C /root/backup/"

và sau đó bạn có thể thực hiện bước nhật ký áp dụng tách biệt hoàn toàn và tiết kiệm không gian đĩa, IO và CPU trên máy chủ sản xuất.

HowTO của Percona để sử dụng xtrabackup

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.