MySQLの視点
すべてのMySQLのデータはInnoDBのを使用する必要があります。
MYSQLDUMP_OPTIONS="--single-transaction --routines --triggers"
mysqldump -u... -p... ${MYSQLDUMP_OPTIONS} --all-databases > MySQLData.sql
これは、単一のトランザクションとしてすべてのMySQLのデータのクリーンポイントインタイムスナップショットを作成します。次のようにあなたは、MySQLのデータのスナップショットを作ることができます。
たとえば、この午前0時にこのmysqldumpを起動すると、mysqldump出力のすべてのデータは深夜からのものになります。すべてのデータがInnoDBストレージエンジンを使用していれば、データをMySQLに追加することができます.MongoDBは、バックアップ中であっても、真夜中以降にMySQLに追加された新しいデータを参照できます。
MyISAMテーブルがある場合は、それらをInnoDBに変換する必要があります。追いかけてみましょう。ここでは、InnoDBテーブルにすべてのMyISAMテーブルを変換するスクリプトを作る方法です。
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データ用のReplica Setをセットアップすると、レプリカに対してmongodumpを使用できます。 mongodumpは特定の時点ではないので、レプリカを切断して(変更をやり直さないように)、レプリカ上でmongodumpを実行する必要があります。レプリカをマスタに再確立します。 Mongodumpを切断されたレプリカセットに対して使用できるかどうかは、開発者または10genから確認してください。
共通の目標
ポイント・イン・タイムが本当に問題になる場合は、すべてのOSのクロックが同じ同期時刻とタイムゾーンを持っていることを確認しますしてください。このような同期を実行する必要がある場合は、mysqldとmongodを再起動する必要があります。すると、mysqldumpとmongodumpのcrontabジョブが同時に終了します。個人的には、MongoDBに投稿されたいと思っているmysqlのIDが計上されることを保証するために、mongodumpを約30秒遅らせるでしょう。
同じサーバー上でmysqldとmongodを実行している場合、MongoDBレプリケーションは必要ありません。 00:00:00(真夜中)にmysqldumpを起動し、00:30:00(深夜30秒後)にmongodumpを起動するだけです。
私はモンゴーで経験が豊富ではなく、これを試して成功した人から聞きたいですがそのようなMongoDBのデータに対して厳密なリレーショナル・インテグリティを保持しようとしています。スケールの完全性を犠牲にすることの貿易を行うために特別に設計されました:/ –
あなたは何をやったのですか? – Aerik