Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Sao lưu MySQL Amazon RDS

RDS không cho phép ngay cả người dùng chính SUPER đặc quyền và điều này là bắt buộc để thực thi FLUSH TABLES WITH READ LOCK . (Đây là một hạn chế đáng tiếc của RDS).

Câu lệnh không thành công đang được tạo bởi --master-data , tất nhiên là cần thiết nếu bạn muốn có thể tìm hiểu tọa độ binlog chính xác nơi bắt đầu sao lưu. FLUSH TABLES WITH READ LOCK có được khóa đọc toàn cục trên tất cả các bảng, cho phép mysqldump START TRANSACTION WITH CONSISTENT SNAPSHOT (như với --single-transaction ) và sau đó SHOW MASTER STATUS để lấy tọa độ nhật ký nhị phân, sau đó nó giải phóng khóa đọc toàn cục vì nó có một giao dịch sẽ giữ cho dữ liệu hiển thị ở trạng thái nhất quán với vị trí nhật ký đó.

RDS phá vỡ cơ chế này bằng cách từ chối SUPER đặc quyền và không cung cấp cách giải quyết rõ ràng nào.

Có một số tùy chọn hacky có sẵn để giải quyết vấn đề này một cách chính xác, không có tùy chọn nào trong số đó có thể đặc biệt hấp dẫn:

  • thực hiện sao lưu trong khoảng thời gian lưu lượng truy cập thấp. Nếu tọa độ binlog không thay đổi giữa thời điểm bạn bắt đầu sao lưu và sau khi sao lưu bắt đầu ghi dữ liệu vào tệp đầu ra hoặc máy chủ đích (giả sử bạn đã sử dụng --single-transaction ) thì điều này sẽ hoạt động vì bạn biết tọa độ không thay đổi trong khi quá trình đang chạy.

  • quan sát vị trí binlog trên trang cái ngay trước khi bắt đầu sao lưu và sử dụng các tọa độ này với CHANGE MASTER TO . Nếu binlog_format của chủ bạn được đặt thành ROW thì điều này sẽ hoạt động, mặc dù bạn có thể sẽ phải bỏ qua một vài lỗi ban đầu, nhưng sau đó sẽ không có bất kỳ lỗi nào. Điều này hoạt động vì sao chép dựa trên hàng rất xác định và sẽ dừng lại nếu nó cố gắng chèn một cái gì đó đã có ở đó hoặc xóa một cái gì đó đã biến mất. Sau khi vượt qua các lỗi, bạn sẽ ở tọa độ binlog thực nơi ảnh chụp nhanh nhất quán thực sự bắt đầu.

  • như trong mục trước, nhưng sau khi khôi phục bản sao lưu, hãy thử xác định vị trí chính xác bằng cách sử dụng mysqlbinlog --base64-output=decode-rows --verbose để đọc binlog của master tại các tọa độ mà bạn thu được, kiểm tra nô lệ mới của bạn để xem các sự kiện nào phải đã được thực thi trước khi thực sự bắt đầu chụp nhanh và sử dụng các tọa độ được xác định theo cách này để CHANGE MASTER TO .

  • sử dụng một quy trình bên ngoài để có được khóa đọc trên mỗi và mọi bảng trên máy chủ, quy trình này sẽ dừng tất cả quá trình ghi; quan sát rằng vị trí binlog từ SHOW MASTER STATUS đã ngừng tăng, bắt đầu sao lưu và giải phóng các khóa đó.

Nếu bạn sử dụng bất kỳ phương pháp nào trong số này ngoài cách tiếp cận cuối cùng, điều đặc biệt quan trọng là bạn phải thực hiện so sánh bảng để chắc chắn rằng nô lệ của bạn giống hệt với phương pháp chính khi nó đang chạy. Nếu bạn gặp lỗi sao chép tiếp theo ... thì không phải vậy.

Có lẽ là lựa chọn an toàn nhất - nhưng cũng có thể là khó chịu nhất vì có vẻ như nó không cần thiết - bắt đầu bằng cách tạo một bản sao đọc RDS của bản sao RDS của bạn. Sau khi nó được thiết lập và đồng bộ hóa với bản chính, bạn có thể dừng sao chép trên bản sao đọc RDS bằng cách thực hiện một thủ tục được lưu trữ do RDS cung cấp, CALL mysql.rds_stop_replication được giới thiệu trong RDS 5.6.13 và 5.5.33 không yêu cầu SUPER đặc ân.

Khi nô lệ bản sao RDS đã dừng, hãy lấy mysqldump của bạn từ bản sao đọc RDS, bây giờ sẽ có một tập dữ liệu không thay đổi trên đó như một tập tọa độ chính cụ thể. Khôi phục bản sao lưu này vào máy nô lệ ngoài trang web của bạn và sau đó sử dụng tọa độ chính của bản sao đọc RDS từ SHOW SLAVE STATUS Exec_Master_Log_PosRelay_Master_Log_File với tư cách là CHANGE MASTER TO của bạn tọa độ.

Giá trị được hiển thị trong Exec_Master_Log_Pos trên nô lệ là thời điểm bắt đầu giao dịch tiếp theo hoặc sự kiện được xử lý và đó chính xác là nơi nô lệ mới của bạn cần bắt đầu đọc trên bản chính.

Sau đó, bạn có thể ngừng truyền bản sao đọc RDS sau khi nô lệ bên ngoài của bạn đã hoạt động.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bản sao cục bộ của cơ sở dữ liệu RDS

  2. bảng mysqldump mà không kết xuất khóa chính

  3. # 2006 MySQL Server đã không còn lỗi trong Wamp

  4. Sử dụng SQL để xác định số liệu thống kê về số lượng từ của một trường văn bản

  5. Tập lệnh shell Linux để sao lưu cơ sở dữ liệu