MySQL perspectiva
Todos sus datos de MySQL tendrían que utilizar InnoDB. Posteriormente, se podría hacer una instantánea de los datos de MySQL de la siguiente manera:
MYSQLDUMP_OPTIONS="--single-transaction --routines --triggers"
mysqldump -u... -p... ${MYSQLDUMP_OPTIONS} --all-databases > MySQLData.sql
Esto creará una instantánea limpia de punto en el tiempo de todos los datos MySQL como una sola transacción.
Por ejemplo, si inicia este mysqldump a medianoche, todos los datos en la salida mysqldump serán desde la medianoche. Los datos aún se pueden agregar a MySQL (siempre que todos sus datos utilicen el motor de almacenamiento InnoDB) y puede hacer que MongoDB haga referencia a cualquier dato nuevo agregado a MySQL después de la medianoche, incluso si es durante la copia de seguridad.
Si tiene tablas MyISAM, debe convertirlas a InnoDB. Vamos a cortar por lo sano. Aquí es cómo hacer un script para convertir todas las tablas MyISAM a 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}
Sólo tiene que ejecutar esta secuencia de comandos cuando esté listo para convertir todas las tablas MyISAM definidos por el usuario. Cualquier tabla MyISAM relacionada con el sistema se ignora y no se debe tocar de todos modos.
MongoDB perspectiva
No puedo hablar por MongoDB porque sé muy poco. Sin embargo, para el lado de MongoDB, si configura un conjunto de réplicas para cualquier información de MongoDB, podría usar mongodump contra una réplica. Como mongodump no es un punto en el tiempo, debería desconectar la réplica (para evitar que los cambios se repitan) y luego realizar el mongodump en la réplica. Luego restablezca la réplica a su maestro. Averigüe de sus desarrolladores o de 10gen si mongodump se puede usar contra un conjunto de réplicas desconectado.
Objetivos Comunes
Si un punto en el tiempo realmente importa a usted, por favor, se asegura de que todos los relojes del sistema operativo tienen el mismo tiempo sincronizado y la zona horaria. Si tiene que realizar dicha sincronización, debe reiniciar mysqld y mongod. Luego, sus trabajos de crontab para mysqldump y mongodump se activarán al mismo tiempo. Personalmente, demoraría un mongodump de aproximadamente 30 segundos para asegurar que los identificadores de mysql que desea publicar en MongoDB se contabilicen.
Si ha mysqld y mongod que se ejecuta en el mismo servidor, entonces usted no necesita ninguna replicación MongoDB. Simplemente inicie un mysqldump a las 00:00:00 (medianoche) y el mongodump a las 00:30:00 (30 segundos después de la medianoche).
No quiero decir nada porque no tengo mucha experiencia con Mongo, y me encantaría saber de alguien que haya probado esto y haya tenido éxito, pero mi corazonada es que vas a tener muchas dificultades si eres tratando de mantener una estrecha integridad relacional en datos de MongoDB como ese. Está específicamente diseñado para hacer el oficio de sacrificar la integridad por la escala:/ –
¿Qué terminaste haciendo? – Aerik