Sao lưu logic hợp lý các cơ sở dữ liệu sử dụng các công cụ MyISAM và InnoDB


8

Tôi có một câu hỏi liên quan đến sao lưu logic của cơ sở dữ liệu MySQL sử dụng cả MyISAM và InnoDB.

Các mysqldumptiện ích hỗ trợ hai tùy chọn sau đây:

  • --single-giao dịch - Tạo một ảnh chụp nhanh nhất quán bằng cách bỏ tất cả các bảng trong một giao dịch. CHỈ hoạt động cho các bảng được lưu trữ trong các công cụ lưu trữ hỗ trợ đa nhiệm (hiện tại chỉ có InnoDB mới thực hiện) [...] Tùy chọn tự động tắt - các bảng khóa.

  • -x, --lock-all-bảng - Khóa tất cả các bảng trên tất cả các cơ sở dữ liệu. Điều này đạt được bằng cách lấy khóa đọc toàn cầu trong suốt thời gian của toàn bộ bãi chứa. Tự động tắt --single-giao dịch và --lock-bảng tắt.

    • Đối với InnoDB, chúng tôi cần --single-transaction

    • đối với MyISAM, chúng ta cần - bảng khóa hoặc khóa tất cả các bảng (trong trường hợp chúng ta cần tính nhất quán của cơ sở dữ liệu chéo).

Vậy, làm thế nào một cơ sở dữ liệu lai (cơ sở dữ liệu sử dụng cả hai công cụ MyISAM và InnoDB) được sao lưu?

Biên tập:

Chỉ cần làm rõ, câu hỏi có thể được cải cách như thế này:

Các tùy chọn bảng khóa [[all-] có đảm bảo sao lưu nhất quán các bảng InnoDB không?

Câu trả lời:


8

Với mysqldump, bạn chỉ có thể sử dụng một cách an toàn --single-transactionnếu tất cả các bảng của bạn là InnoDB, nếu không thì bản sao lưu của bạn không nhất quán.

Nếu bạn có yêu cầu cho một bản sao lưu lai, thì bạn cần lock-tablestrên tất cả các bảng trong bản sao lưu (mặc định), sẽ an toàn cho tất cả các công cụ. Điều đáng nói là các tùy chọn mặc định sẽ đảm bảo sao lưu của bạn an toàn, bạn không cần bật bất kỳ cờ đặc biệt nào.

Lưu ý: Nếu bạn có kết hợp lai, có lẽ hãy xem xtrabackup. Nó sẽ chỉ bị khóa trong giai đoạn MyISAM của bản sao lưu.


Chỉ là để đăng bài này, nhưng bạn đánh bại tôi với nó. Liên kết có liên quan: percona.com/doc/percona-xtrabackup/innobackupex/ mẹo
Derek Downey

Cảm ơn bạn đã xác nhận rằng các bảng khóa đảm bảo sao lưu phù hợp cho cả hai động cơ. Tôi hiện đang xem Zmanda Recovery Manager cho MySQL (Tôi cũng sẽ xem xtrabackup).
Dimitre Radoulov

Zmanda chỉ là một trình quản lý GUI cho tất cả các phương thức sao lưu khác - tôi khá chắc chắn rằng sử dụng xtrabackup được hỗ trợ.
Morgan Tocker

Xin chào @Morgan Tocker, Zmanda cũng cung cấp một tập hợp các tập lệnh (zrm- *) thực sự thực hiện các loại sao lưu khác nhau: logic, thô và ảnh chụp nhanh. Tất cả các cơ sở dữ liệu mà chúng tôi quản lý là kết hợp, do đó, có rất ít giá trị sử dụng một sản phẩm riêng biệt - chúng tôi không thể tránh khóa trong quá trình sao lưu.
Dimitre Radoulov

Câu trả lời này nói rằng nếu một người sử dụng mysqldump và chỉ định --lock-all-tablesthì bản sao lưu sẽ nhất quán, phải không? Và người ta chỉ cần chạy mysqldump một lần: nó sẽ an toàn cho cả InnoDB và MyISAM cùng một lúc, phải không?
KajMagnus

2

Là một ý tưởng bổ sung cho tình huống của bạn, có thể hữu ích khi dành một số suy nghĩ về việc thiết lập thiết lập nô lệ chính, nơi sao lưu của bạn được tạo từ nô lệ.

Một db MySQL với sự pha trộn của InnoDB và MyISAM sẽ luôn luôn (theo như tôi biết trong mọi cấu hình và với mọi công cụ sao lưu) sẽ khóa các bảng MyISAM cho giai đoạn sao lưu MyISAM.

Để tránh khóa này, hãy sử dụng thiết lập này:

  • Máy chủ A: Master mys mys
  • Máy chủ B: Slave mysql (kết nối với Máy chủ A)

Tất cả ghi và đọc đi đến Máy chủ A (Master). Máy chủ B (Slave) chỉ được sử dụng để sao lưu. Trên nô lệ, bạn cài đặt một công cụ sao lưu hoặc tập lệnh bạn chọn, ví dụ: Quản trị viên MySQL.

Định cấu hình sao lưu của bạn, ví dụ hàng ngày vào ban đêm. Các khóa nằm trên nô lệ, dẫn đến độ trễ trong khi nô lệ khóa, nhưng độ trễ này bị bắt ngay khi sao lưu xong và khóa được mở.

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.