Thực hành tốt nhất để sao lưu MySQL DB


23

Gần đây tôi đã phát hiện ra rằng các máy chủ web sản xuất chạy MySQL của chúng tôi không được sao lưu thường xuyên (hoặc hoàn toàn không). Tôi đã quen với việc sao lưu SQL Server DB nhưng không có nhiều kinh nghiệm với MySQL DB. Bất kỳ thực hành tốt nhất nào để sử dụng 'mysqldump' hoặc bất kỳ công cụ sao lưu DB nào khác?

Có lẽ tôi sẽ làm việc theo lịch trình để nó được thực hiện hàng đêm và sau đó sao lưu các tệp bằng hệ thống sao lưu của tôi.

Cảm ơn.

Câu trả lời:


29

Thực tiễn tốt nhất để sao lưu máy chủ MySQL:

Bản sao MySQL

Thiết lập sao chép trong MySQL. Bạn sẽ phải thiết lập máy chủ Master và Slave. Tất cả đọc-ghi vào DB có thể đi đến Máy chủ nô lệ của bạn. Ưu điểm của việc nhân rộng là bạn có thể sao lưu từ máy chủ nô lệ của mình mà không làm gián đoạn máy chủ Master, ứng dụng của bạn sẽ tiếp tục hoạt động trên Master mà không có thời gian chết.

Sử dụng kết xuất MySQL

Nếu tập dữ liệu của bạn nhỏ (tôi nhận ra "nhỏ" là một thuật ngữ tương đối .. để đủ điều kiện, giả sử <10GB), thì mysqldump có thể sẽ hoạt động tốt. Thật dễ dàng, nó trực tuyến và nó rất linh hoạt. Chỉ cần một vài điều mysqldump có thể làm: sao lưu mọi thứ hoặc chỉ sao lưu cơ sở dữ liệu hoặc bảng nhất định chỉ DDL tối ưu hóa kết xuất để khôi phục nhanh hơn làm cho tệp sql kết quả tương thích hơn với các RDBMS khác và nhiều thứ khác.

Tuy nhiên, các tùy chọn quan trọng nhất có liên quan đến tính nhất quán của bản sao lưu của bạn. Các tùy chọn yêu thích của tôi là: --single-giao dịch: tùy chọn này cung cấp một bản sao lưu nhất quán, nếu (và chỉ khi) các bảng đang sử dụng công cụ lưu trữ InnoDB. Nếu bạn có bất kỳ bảng MyISAM không chỉ đọc, thì không sử dụng tùy chọn này khi sao lưu chúng. --master-data = 2: tùy chọn này sẽ đảm bảo kết xuất của bạn nhất quán (bằng cách thực hiện khóa tất cả các bảng trừ khi bạn đã thêm tùy chọn - giao dịch đơn lẻ). Tùy chọn --master-data cũng ghi lại vị trí nhật ký nhị phân trong tệp kết quả kết quả (= 2 khiến dòng này là một nhận xét trong tệp kết xuất)

Lưu ý cuối cùng về mysqldump: hãy nhớ rằng thời gian khôi phục có thể lâu hơn đáng kể so với thời gian sao lưu. Nó sẽ phụ thuộc vào một số yếu tố, ví dụ, bạn có bao nhiêu chỉ mục.

Ảnh chụp nhanh LVM

Đối với những người có bộ dữ liệu lớn hơn, một bản sao lưu vật lý là cách để đi. Mặc dù bạn có thể thực hiện sao lưu lạnh (nghĩa là tắt dịch vụ MySQL, sao chép thư mục dữ liệu, khởi động lại dịch vụ), nhiều người không muốn thời gian chết. Giải pháp yêu thích của tôi là ảnh chụp nhanh. Điều này có thể nóng (đối với InnoDB) hoặc yêu cầu khóa ngắn (đối với MyISAM). Đừng quên bao gồm tất cả dữ liệu của bạn (bao gồm ib_logfiles). Lenz cung cấp một tiện ích tuyệt vời để trợ giúp việc này: http://www.lenzg.net/mylvmbackup/

Sử dụng sao lưu doanh nghiệp MySQL

Ưu điểm của việc sử dụng Sao lưu doanh nghiệp MySQL:

  • Sao lưu "nóng" của các bảng InnoDB diễn ra hoàn toàn trực tuyến, không chặn Chỉ sao lưu các bảng hoặc không gian bảng cụ thể
  • Chỉ sao lưu dữ liệu đã thay đổi kể từ lần sao lưu trước
  • Sao lưu nén - Lưu dung lượng lưu trữ lên tới 90% và nhiều hơn nữa ..

Tham khảo: http://www.mysql.com/products/enterprise/backup/features.html http://www.mysql.com/products/enterprise/backup.html


7

Tôi khuyên bạn nên thiết lập một bản sao chuyên dụng để sử dụng để sao lưu. Điều này sẽ cho phép bạn thực hiện bất kỳ nhiệm vụ sao lưu mà không ảnh hưởng đến chính. Vì điều này làm tăng thêm sự phức tạp cho kiến ​​trúc của bạn, bạn sẽ muốn theo dõi độ trễ sao chép để đảm bảo mọi thứ đều hoạt động.

Đối với quy trình thực tế, bạn có một vài tùy chọn mà không cần bất kỳ công cụ của bên thứ ba nào. Ảnh chụp nhanh có thể được thực hiện bằng mysqldumplệnh (giả sử bạn đang sử dụng InnoDB) : mysqldump --all-databases --single-transaction > all_databases.sql. Tùy thuộc vào kích thước dữ liệu, có thể nên tắt MySQL và sao lưu trực tiếp các tệp dữ liệu. Khi bản sao được khởi động lại, nó sẽ phát lại tất cả các sự kiện mà bản chính nhận được trong thời gian nó bị hỏng. Nếu bạn đang sử dụng MySQL Enterprise, mysqlbackuptiện ích sẽ thực hiện việc này.

Sao lưu cộng dồn có thể được thực hiện bằng cách kích hoạt nhật ký nhị phân trên bản sao. Rõ ràng, điều này chỉ ghi lại các sự kiện làm thay đổi dữ liệu, do đó bạn sẽ cần kết hợp điều này với các ảnh chụp nhanh ở trên.


3
+1 cho --single-transactionnhưng đừng quên thêm --events --routinesvà tôi luôn sử dụng --triggers, mặc dù nó được bật theo mặc định, vì nó có thể bị vô hiệu hóa trong my.cnf. Tôi có thể nói rằng việc sử dụng chúng như là một cách thực hành chuẩn cho dù bạn hiện có những loại đối tượng đó trong cơ sở dữ liệu của mình hay không.
Michael - sqlbot

Lưu ý mysqldump - tất cả các cơ sở dữ liệu có thể gây ra lỗi khi bạn có cài đặt bảng mở tối đa thấp được xác định. vì vậy hãy theo dõi mysql.log của bạn. Sao chép thực sự sẽ là cách sao lưu tốt nhất
Raymond Nijland

Làm thế nào để bạn giữ các bản sao lịch sử của dữ liệu? (Thông thường, khách hàng sẽ muốn giữ lại một tháng hoặc nhiều bản sao lưu và khi một lỗi ứng dụng làm hỏng dữ liệu, các nhà phát triển muốn có một bản sao của db từ trước lỗi.)
RonJohn
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.