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

Rất tiếc, gần đây chúng tôi đã gặp phải sự cố do lượng truy cập quá lớn nên tôi đã thiết lập một máy chủ chính khác để giúp giảm bớt lượt đọc / sao lưu.

Hiện tại, tôi chỉ đơn giả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 nhưng tôi tin rằng chúng tôi đã phát triển hơn 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 Maatkits mk -llel -dump hoặc giải pháp chụp nhanh LVM.

Phiên bản ngắn gọn của Succinct:

  • Tôi có một cơ sở dữ liệu MySQL khá lớn 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ố)
  • Xem xét một cái gì đó chẳng hạn như mk-song-kết xuất hoặc ảnh chụp nhanh LVM

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

answer

Tôi đã thành công tốt đẹp với MySQL replication và tarballs 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.

Bản 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. Khuyến nghị 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 muốn nói rằng đó chắc chắn là điều cần xem xét. Cuối cùng, sự kết hợp của các giải pháp có lẽ sẽ là tốt nhất.

Nó cũng đáng chú ý đây là một chủ đề cũ. Giữa 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 đó - điều này nói chung đã hết. Nhìn thấy:

xtrabackup - ít nhất là đối với innodb.

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 bản sao chủ / nô lệ. Sau đó, bạn có thể thực hiện sao lưu trên máy chủ mà không ảnh hưởng đến máy chủ.

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

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ư bạn sẽ đặt ra một câu hỏi rõ ràng là liệu bạn có thể cải thiện hiệu suất của nhiều thứ, bao gồm cả sao lưu, bằng cách dành các máy chủ cơ sở dữ liệu cho các ứng dụng hay không. Được chia sẻ là tốt, cho đến khi nó không.

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), đâ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ơ sở dữ liệu với awk regex, chẳng hạn như chỉ dbs bắt đầu bằng chữ 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 thời gian thay đổi.

Sau đó, sử dụng xtrabackup để sao chép toàn bộ cơ sở dữ liệu thẳng đến 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 IO đĩa (sau khi thiết lập khóa ssh rsa):

innobackupex --throttle=500 --compress --stream=xbstream /doesntneedtoexist | ssh [email protected] "xbstream -x -C /root/backup/"

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

Percona's HowTO để sử dụng xtrabackup