MySQL Perspective
Все ваши данные MySQL должны будут использовать InnoDB.Затем вы можете сделать снимок данных MySQL следующим образом:
MYSQLDUMP_OPTIONS="--single-transaction --routines --triggers"
mysqldump -u... -p... ${MYSQLDUMP_OPTIONS} --all-databases > MySQLData.sql
Это создаст чистый моментальный снимок всех данных MySQL на момент времени в виде одной транзакции.
Например,, если вы запустите этот mysqldump в полночь, все данные в выводе mysqldump будут с полуночи.Данные все еще могут быть добавлены в MySQL (при условии, что все ваши данные используют InnoDB Storage Engine), и вы можете иметь MongoDB для ссылки на любые новые данные, добавленные в MySQL после полуночи, даже если это происходит во время резервного копирования.
Если у вас естьлюбые таблицы MyISAM, вам нужно преобразовать их в InnoDB.Давайте перейдем к погоне.Вот как вы создаете сценарий для преобразования всех ваших таблиц MyISAM в 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}
Просто запустите этот сценарий, когда будете готовы преобразовать все пользовательские таблицы MyISAM.Любые системные MyISAM-таблицы игнорируются и не должны быть затронуты в любом случае.
Перспектива MongoDB
Я не могу говорить за MongoDB, потому что знаю очень мало.Тем не менее, для стороны MongoDB, если вы устанавливаете набор реплик для любых данных MongoDB, вы можете просто использовать mongodump для реплики.Поскольку mongodump не является моментом времени, вам придется отключить реплику (чтобы не допустить повторения изменений), а затем выполнить mongodump для реплики.Затем восстановите реплику своему хозяину.Узнайте у ваших разработчиков или из 10gen, можно ли использовать mongodump против отключенного набора реплик.
Общие задачи
Если для вас действительно важен момент времени, убедитесь, что все часы ОСимеют одинаковое синхронизированное время и часовой пояс.Если вам нужно выполнить такую синхронизацию, вы должны перезапустить mysqld и mongod.Затем ваши задания в crontab для mysqldump и mongodump завершатся одновременно.Лично я бы задержал mongodump примерно на 30 секунд, чтобы убедиться, что идентификаторы из mysql, которые вы хотите опубликовать в MongoDB, учтены.
Если у вас mysqld и mongod, запущенные на одном сервере, то вам не нужен MongoDBрепликация.Просто запустите mysqldump в 00:00:00 (полночь), а mongodump в 00:30:00 (30 секунд после полуночи).