MySQL Perspektywa
wszystkich danych MySQL będzie musiał użyć InnoDB. Następnie można zrobić zrzut danych MySQL w następujący sposób:
MYSQLDUMP_OPTIONS="--single-transaction --routines --triggers"
mysqldump -u... -p... ${MYSQLDUMP_OPTIONS} --all-databases > MySQLData.sql
To stworzy czystą migawkę punktu w czasie wszystkich danych MySQL w ramach jednej transakcji.
Na przykład, jeśli uruchomisz ten plik mysqldump o północy, wszystkie dane w wynikach mysqldump będą miały miejsce od północy. Dane mogą nadal być dodawane do MySQL (pod warunkiem, że wszystkie twoje dane używają InnoDB Storage Engine) i możesz mieć referencje MongoDB o wszelkich nowych danych dodanych do MySQL po północy, nawet jeśli jest to podczas tworzenia kopii zapasowej.
Jeśli masz tabele MyISAM, musisz je przekonwertować na InnoDB. Przejdźmy do sprawy. Oto jak zrobić skrypt do konwersji wszystkich tabel MyISAM do 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}
Wystarczy uruchomić ten skrypt, gdy jesteś gotowy do konwersji wszystkich tabel MyISAM zdefiniowane przez użytkownika. Wszystkie tabele MyISAM związane z systemem są ignorowane i nie należy ich dotykać.
MongoDB Perspektywa
Nie mogę mówić za MongoDB bo wiem bardzo niewiele. Jednak po stronie MongoDB, jeśli skonfigurujesz zestaw replik do dowolnego pliku MongoDB, możesz po prostu użyć mongodumpa do repliki. Ponieważ mongodump nie jest punkt-w-czasie, musisz odłączyć replikę (aby zatrzymać zmiany od nadejścia), a następnie wykonać mongodump na replice. Następnie przywróć replikę do swojego mastera. Dowiedz się od programistów lub od 10gen, czy mongodump może być użyty przeciwko odłączonemu zestawowi replik.
wspólnych celów
Jeśli point-in-time naprawdę liczy się dla Ciebie, sprawia, że wszystkie zegary systemowe mają ten sam zsynchronizowany czas i strefę czasową. Jeśli musisz wykonać taką synchronizację, musisz ponownie uruchomić mysqld i mongod. Następnie twoje zadania crontab dla mysqldump i mongodump będą wyłączane w tym samym czasie. Osobiście opóźniam mongodump o 30 sekund, aby zapewnić identyfikację identyfikatorów z mysql, które chcesz opublikować w MongoDB.
Jeśli masz mysqld i mongod działa na tym samym serwerze, to nie potrzebujesz replikacji MongoDB. Po prostu uruchom mysqldump o 00:00:00 (północ) i mongodump o 00:30:00 (30 sekund po północy).
Nie chcę tego zestrzeliwać, ponieważ nie jestem super doświadczony w Mongo, i bardzo chciałbym usłyszeć od kogoś, kto próbował tego i odniósł sukces, ale moim przeczuciem jest to, że będziesz walczył bardzo, jeśli jesteś próbując zachować ścisłą relacyjną integralność danych MongoDB w ten sposób. Został specjalnie zaprojektowany, aby uczynić handel poświęcający uczciwość na skalę:/ –
Co robiłeś w końcu? – Aerik