Phối cảnh MySQL
Tất cả dữ liệu MySQL của bạn sẽ phải sử dụng InnoDB. Sau đó, bạn có thể tạo một bản chụp Dữ liệu MySQL như sau:
MYSQLDUMP_OPTIONS="--single-transaction --routines --triggers"
mysqldump -u... -p... ${MYSQLDUMP_OPTIONS} --all-databases > MySQLData.sql
Điều này sẽ tạo một ảnh chụp nhanh tất cả dữ liệu MySQL dưới dạng một giao dịch.
Ví dụ: nếu bạn khởi động mysqldump vào lúc nửa đêm, tất cả dữ liệu trong đầu ra mysqldump sẽ là từ nửa đêm. Dữ liệu vẫn có thể được thêm vào MySQL (miễn là tất cả dữ liệu của bạn sử dụng Công cụ lưu trữ InnoDB) và bạn có thể tham khảo MongoDB bất kỳ dữ liệu mới nào được thêm vào MySQL sau nửa đêm, ngay cả khi nó đang trong quá trình sao lưu.
Nếu bạn có bất kỳ bảng MyISAM nào, bạn cần phải chuyển đổi chúng thành InnoDB. Hãy cắt theo đuổi. Đây là cách bạn thực hiện một kịch bản để chuyển đổi tất cả các bảng MyISAM của bạn để InnoDB:
MYISAM_TO_INNODB_CONVERSION_SCRIPT=/root/ConvertMyISAMToInnoDB.sql
echo "SET SQL_LOG_BIN = 0;" > ${MYISAM_TO_INNODB_CONVERSION_SCRIPT}
mysql -u... -p... -AN -e"SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=InnoDB;') InnoDBConversionSQL FROM information_schema.tables WHERE engine='MyISAM' AND table_schema NOT IN ('information_schema','mysql','performance_schema') ORDER BY (data_length+index_length)" >> ${MYISAM_TO_INNODB_CONVERSION_SCRIPT}
Chỉ cần chạy script này khi bạn đã sẵn sàng để chuyển đổi tất cả các bảng MyISAM người dùng định nghĩa. Mọi bảng MyISAM liên quan đến hệ thống đều bị bỏ qua và không được chạm vào.
Phối cảnh MongoDB
Tôi không thể nói cho MongoDB vì tôi biết rất ít. Tuy nhiên, đối với phía MongoDB của sự vật, nếu bạn thiết lập một bộ bản sao cho bất kỳ dữ liệu MongoDB nào, bạn chỉ có thể sử dụng mongodump trên một bản sao. Vì mongodump không phải là điểm-trong-thời gian, bạn sẽ phải ngắt kết nối các bản sao (để ngăn chặn thay đổi từ đến hơn) và sau đó thực hiện mongodump trên bản sao. Sau đó, thiết lập lại bản sao cho chủ nhân của nó. Tìm hiểu từ các nhà phát triển của bạn hoặc từ 10gen nếu mongodump có thể được sử dụng chống lại một bộ bản sao bị ngắt kết nối.
Mục tiêu chung
Nếu point-in-time thực sự quan trọng đối với bạn, xin vui lòng đảm bảo tất cả các đồng hồ hệ điều hành có thời gian đồng bộ cùng và múi giờ. Nếu bạn phải thực hiện đồng bộ hóa như vậy, bạn phải khởi động lại mysqld và mongod. Sau đó, các công việc crontab của bạn cho mysqldump và mongodump sẽ xuất hiện cùng một lúc. Cá nhân, tôi sẽ trì hoãn một mongodump khoảng 30 giây để đảm bảo các id từ mysql bạn muốn đăng trong MongoDB được chiếm.
Nếu bạn có mysqld và mongod chạy trên cùng một máy chủ, thì bạn không cần bất kỳ bản sao MongoDB nào. Chỉ cần bắt đầu một mysqldump lúc 00:00:00 (nửa đêm) và mongodump lúc 00:30:00 (30 giây sau nửa đêm).
Không có ý nghĩa để bắn hạ vì tôi không siêu kinh nghiệm với Mongo, và tôi muốn nghe từ bất cứ ai đã thử điều này và đã thành công, nhưng linh cảm của tôi là bạn sẽ đấu tranh rất nhiều nếu bạn cố gắng giữ tính toàn vẹn quan hệ chặt chẽ trên dữ liệu MongoDB như thế. Thiết kế đặc biệt của nó để làm cho giao dịch hy sinh tính toàn vẹn cho quy mô:/ –
Bạn đã làm gì? – Aerik