MySQL Prospettiva
Tutti i vostri dati di MySQL avrebbe dovuto usare InnoDB. Poi si potrebbe fare un un'istantanea dei dati MySQL come segue:
MYSQLDUMP_OPTIONS="--single-transaction --routines --triggers"
mysqldump -u... -p... ${MYSQLDUMP_OPTIONS} --all-databases > MySQLData.sql
Questo creerà un ambiente pulito snapshot point-in-time di tutti i dati MySQL come una singola transazione.
Ad esempio, se si avvia questo mysqldump a mezzanotte, tutti i dati nell'output mysqldump saranno da mezzanotte. I dati possono ancora essere aggiunti a MySQL (a condizione che tutti i tuoi dati utilizzino il motore di archiviazione InnoDB) e puoi fare in modo che MongoDB faccia riferimento a qualsiasi nuovo dato aggiunto a MySQL dopo mezzanotte, anche se è durante il backup.
Se si dispone di tabelle MyISAM, è necessario convertirle in InnoDB. Andiamo al sodo. Ecco come si effettua uno script per convertire tutti i vostri tabelle 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}
basta eseguire questo script quando si è pronti per convertire tutte le tabelle MyISAM definite dall'utente. Qualsiasi tabella MyISAM correlata al sistema viene ignorata e non deve essere comunque toccata.
MongoDB Prospettiva
Non posso parlare per MongoDB perché io so molto poco. Tuttavia, per il lato MongoDB, se si imposta un Set di repliche per qualsiasi dato MongoDB, si potrebbe semplicemente usare mongodump su una replica. Dato che mongodump non è point-in-time, dovresti disconnettere la replica (per impedire che le modifiche arrivino) e quindi eseguire il mongodump sulla replica. Quindi ristabilire la replica sul suo master. Scopri dai tuoi sviluppatori o da 10gen se mongodump può essere utilizzato contro un set di repliche disconnesse.
obiettivi comuni
Se point-in-time veramente conta per voi, per favore si assicura tutti gli orologi del sistema operativo hanno lo stesso tempo sincronizzato e fuso orario. Se devi eseguire tale sincronizzazione, devi riavviare mysqld e mongod. Quindi, i tuoi lavori di crontab per mysqldump e mongodump si spegneranno contemporaneamente. Personalmente, ritarderei un mongodump di circa 30 secondi per assicurare che gli id da mysql che vuoi vengano pubblicati in MongoDB vengano presi in considerazione.
Se mysqld e mongod sono in esecuzione sullo stesso server, non è necessaria alcuna replica MongoDB. Basta avviare un mysqldump alle 00:00:00 (mezzanotte) e il mongodump alle 00:30:00 (30 secondi dopo mezzanotte).
Non intendendo girare questo in quanto non sono super esperto con Mongo, e mi piacerebbe sentire qualcuno che ha provato questo e ha avuto successo, ma la mia impressione è che avrete grandi difficoltà se siete cercando di mantenere una stretta integrità relazionale su dati MongoDB come quello. Specificamente progettato per fare il commercio di sacrificare l'integrità per la scala:/ –
Che cosa hai finito per fare? – Aerik