MongoDBのバックアップとmongodumpを復元し、mongorestore
ディレクトリ
MongoDBのバックアップと復元
A、MongoDBのバックアップ
MongoDBは、いくつかの方法は、バックアップします:
- mongodump
- システムスナップショット(ないここでは詳細に説明し、公式サイトの具体的な内容:ファイルシステムのスナップショットとバックアップ)
- CPやrsyncの
1、mongodump
公式にMongoDBをmongodumpバックアップツールである、それは、MongoDBのデータベースからデータを読み込むファイルとBSONを生成し、データのバックアップとのMongoDBデータベースを少量回復するのに適したmongodump、大規模なデータのバックアップに適してすることはできません。
デフォルトでは、ローカルデータベースのコンテンツmongodumpは、内部を取得できません。
削減は、我々はインデックスを再構築する必要があるので、インデックスをバックアップしません、データベース内でのみバックアップ文書をmongodump。
バックアッププロセスのmongodサービス中のパフォーマンスへの影響をMongodump、我々はビジネスのピーク時間で動作することをお勧めします。我々のデータのバックアップの場合、我々はエラーが発生しやすい裏打ちされたシステムメモリ、より大きい。
mongodサービスの実装でMongodumpは、まだサービスを提供することができ、データを修正することができ、我々はパラメータ--oplogを追加した場合、それをバックアップし、それがこの時間を記録されます私たちは、復元したい場合はoplog動作時間でありますまた、そこにログインしている、我々はmongorestore --oplogReplay回復を使用することができます
1.1、一般的に使用されるコマンドとパラメータをmongodump
公式文書:mongodump
ダンプという名前Mongodumpデフォルトの出力ディレクトリ、ダンプ出力ディレクトリのパスが含まれている場合は、適用範囲を指示します。デフォルトでは、バックアップの圧縮ではありません。
パラメータ:
--host <hostname><:port>, -h <hostname><:port> # 指定备份的主机ip和端口号,默认值localhost:27017
--port # 指定端口号 默认27017
--username <username>, -u <username> # 指定用户名
--password <password>, -p <password> # 指定密码
--authenticationDatabase <dbname> # 指定认证的数据库
--authenticationMechanism <name> # 指定认证的算法 ,默认值 SCRAM-SHA-1
--db <database>, -d <database> # 指定备份的数据库,未指定的话,备份所有的数据库,但不包含local库
--collection <collection>, -c <collection> # 指定备份的集合,未指定则备份指定库中的所有集合。
--query <json>, -q <json> # 指定 json 作为查询条件。来备份我们过滤后的数据。
--queryFile <path> # 指定 json 文档路径,以该文档的内容作为查询条件,来备份我们过滤后的数据。
--quit # 通过抑制 MongoDB的复制,连接等活动,来实现备份。
--gzip # 开启压缩,3.2版本后可以使用,输出为文件的话会带有后缀.gz
--out <path>, -o <path> # 输出的目录路径
--repir # 修复数据时使用 下面有详细介绍
--oplog # mongodump 会将 mongodump 执行期间的 oplog 日志 输出到文件 oplog.bson,这就意味着从备份开始到备份结束的数据操作我们都可以记录下来。
--archive <file> # 输出到单个存档文件或者是直接输出。
--dumpDbUsersAndRoles # 只有在 使用 --db 时才适用,备份数据库的包含的用户和角色。
--excludeCollection string # 排除指定的集合,如果要排除多个,使用多个--excludeCollection
--numParallelCollections int, -j int # 并行导出的集合数,默认为4
--ssl # 指定 TLS/SSL 协议
--sslCAFile filename # 指定认证文件名
--sslPEMKeyFile <filename>
--sslPEMKeyPassword <value>
--sslCRLFile <filename>
--sslAllowInvalidCertificates
--sslAllowInvalidHostnames
--sslFIPSMode
例:
-
指定されたコレクションを除外
mongodump --db test --excludeCollection=users --excludeCollection=salaries
-
指定されたIP、ポート、ユーザ名、認証、圧縮、出力ディレクトリ
mongodump --host mongodb1.example.net --port 37017 --username user --password "pass" --gzip --out /opt/backup/mongodump-2019-04-17
1.2、注意
私たちは、その後でデータの万枚、のこのコレクションのデータセットを削除するとOplogは10000件の、削除レコードを持っています。
オペレーティング・レコードが急速に覆われているの内側にこのような動作は、以前のOplogにつながります。
私たちがバックアップしたときだから、あなたはバックアップ間隔時間に注意を払う必要があり、記録時間Oplogは(どのくらいログすなわちOplogレコード)をカバーしました。前者と後者を上回ります。
例:
私たちのバックアップ計画は、1日1日よりOplog記録保持時間大きいのデータをバックアップすることです。
バックアップ戦略上のレプリカセットのためのものであるようOplog開口部は、オープンにオープンレプリカ設定する必要があります。
2、CPやrsyncの
私たちは、直接データファイルをコピーすることができますが、我々はそうでない場合、我々は、ファイルが無効でコピーし、ファイルをコピーする前にMongoDBの操作を停止する必要があります。
3、突然単一ノード閉まりた後、どのようにデータを回復します
以下は、単一ノードのためであることに注意してください。
予期しないシャットダウンノードの後、我々はノードを再、ログのエラーには、次を発見しました。
2018-10-24T18:05:18.248-0400 W STORAGE [initandlisten] Detected unclean shutdown - mongod.lock is not empty. ... 2018-10-24T17:24:53.122-0400 E STORAGE [initandlisten] Failed to get the cursor for uri: table:collection-2-6854866147293273505 2018-10-24T17:24:53.122-0400 E STORAGE [initandlisten] This may be due to missing data files. ... ... ***aborting after fassert() failure
そして、データ・ストレージ・mongod.lockパスにファイルがあります。
我々は使用することができ mongod --repair
、データを回復します。
WiredTigerエンジン上のMongoDB 4.0.3では、以下のことを行うには、このコマンドを使用します
- すべてのインデックスを再構築
- 破損したデータを破棄
- 不完全なスタブファイルのメタデータを作成します。
MMAPv1エンジン用
- すべてのインデックスを再構築
- 破損したデータを破棄
データ復旧プロセス:
-
既存のデータをバックアップまずバック
我々は、すべての既存のデータのバックアップ・コピーの全体のディレクトリ内のすべてのファイルへのcpコマンドを使用することができます。
-
使用は--repairのmongod
# 针对 所有数据库 mongod --repair # 针对 单个数据库 mongod --dbpath /opt/mongodb/data/djx --repair
通常の状況では、手動で削除してはならない
mongod.lock
ファイルを。代わりに、データベースを復元するために、上記の手順を使用します。重症例では、使用が破損したファイルは、データベースを起動し、データベースからデータを回復しようとすること、ファイルを削除することができますが、リスクがあります。
図4は、バックアップデータを表示します
我々は直視ではない、我々は見るためのツールを通じて(MongoDBは来るのインストール)bsondumpことができます参照してください、すべてのバイナリデータの一部です。
[root@djx uu_dev]# bsondump order_detail.bson
2019-04-17T16:14:51.430+0800 549 objects found
{"_id":{"$oid":"5cae98d0f23d932dscdfc2ff"}}
{"_id":{"$oid":"5cae98d0f23d932dscdfca00"}}
{"_id":{"$oid":"5cae98d1f23d932dscdfca31"}}
{"_id":{"$oid":"5cae98d1f23d932dscdfca32"}}
二、MongoDBの削減
1、mongorestore特長
mongorestore
あなたは、新しいデータベースを作成したり、既存のデータベースにデータを追加することができますが、mongorestore
唯一の実行insert
操作が行われていないupdate
操作を。既存のデータベースに文書を復元する場合は、データベース内の既存の文書というこの手段_id
の値と文書が復元したい_id
値は、同じデータベースの元の値によってカバーされていません。- インデックスを再構築し、
mongorestore
インデックスを再構築。 mongorestore
回復していないsystem.profile
データを
2、mongorestore共通パラメータ
--help # 查看帮助
--quiet # 通过抑制 MongoDB的复制,连接等活动,来实现数据恢复。
--host <hostname><:port>, -h <hostname><:port> # 指定恢复的主机ip和端口号,默认值localhost:27017
--port # 指定端口号 默认27017
--username <username>, -u <username> # 指定用户名
--password <password>, -p <password> # 指定密码
--authenticationDatabase <dbname> # 指定认证的数据库
--authenticationMechanism <name> # 指定认证的算法 ,默认值 SCRAM-SHA-1
--objcheck # 开启验证,验证还原操作,确保没有无效的文档插入数据库。会有较小的性能影响
--oplogReplay # 恢复备份数据并将 mongodump 执行期间的操作(记录在导出的日志)恢复。
--oplogLimit # 指定恢复
--oplogFile # 指定 Oplog 路径
--keepIndexVersion # 阻止mongorestore在还原过程中将索引升级到最新版本。
--restoreDbUsersAndRoles # 还原指定的数据库用户和角色。
--maintainInsertionOrder # 默认值为False,如果为 True,mongorestore 将按照输入源的文档顺序插入,否则是 随机执行插入。
--numParallelCollections int, -j int # 指定并行恢复的集合数。
--numInsertionWorkersPerCollection int # 默认值为 1,指定每个集合恢复的并发数,大数据量导入增加该值可提高 恢复速度。
--gzip # 从压缩文档中 恢复。
--archive # 从归档文件中恢复。
--dir # 指定还原数据储存目录。
図3に示すように、還元の例
mongorestore --collection people --db accounts dump/
mongorestore --host mongodb1.example.net --port 37017 --username user --password "pass" /opt/backup/mongodump-2011-10-24
mongorestore --gzip --archive=test.20150715.gz --db test
mongorestore --archive=test.20150715.archive --db test
ディレクトリ
MongoDBのバックアップと復元
A、MongoDBのバックアップ
MongoDBは、いくつかの方法は、バックアップします:
- mongodump
- システムスナップショット(ないここでは詳細に説明し、公式サイトの具体的な内容:ファイルシステムのスナップショットとバックアップ)
- CPやrsyncの
1、mongodump
公式にMongoDBをmongodumpバックアップツールである、それは、MongoDBのデータベースからデータを読み込むファイルとBSONを生成し、データのバックアップとのMongoDBデータベースを少量回復するのに適したmongodump、大規模なデータのバックアップに適してすることはできません。
デフォルトでは、ローカルデータベースのコンテンツmongodumpは、内部を取得できません。
削減は、我々はインデックスを再構築する必要があるので、インデックスをバックアップしません、データベース内でのみバックアップ文書をmongodump。
バックアッププロセスのmongodサービス中のパフォーマンスへの影響をMongodump、我々はビジネスのピーク時間で動作することをお勧めします。我々のデータのバックアップの場合、我々はエラーが発生しやすい裏打ちされたシステムメモリ、より大きい。
mongodサービスの実装でMongodumpは、まだサービスを提供することができ、データを修正することができ、我々はパラメータ--oplogを追加した場合、それをバックアップし、それがこの時間を記録されます私たちは、復元したい場合はoplog動作時間でありますまた、そこにログインしている、我々はmongorestore --oplogReplay回復を使用することができます
1.1、一般的に使用されるコマンドとパラメータをmongodump
公式文書:mongodump
ダンプという名前Mongodumpデフォルトの出力ディレクトリ、ダンプ出力ディレクトリのパスが含まれている場合は、適用範囲を指示します。デフォルトでは、バックアップの圧縮ではありません。
パラメータ:
--host <hostname><:port>, -h <hostname><:port> # 指定备份的主机ip和端口号,默认值localhost:27017
--port # 指定端口号 默认27017
--username <username>, -u <username> # 指定用户名
--password <password>, -p <password> # 指定密码
--authenticationDatabase <dbname> # 指定认证的数据库
--authenticationMechanism <name> # 指定认证的算法 ,默认值 SCRAM-SHA-1
--db <database>, -d <database> # 指定备份的数据库,未指定的话,备份所有的数据库,但不包含local库
--collection <collection>, -c <collection> # 指定备份的集合,未指定则备份指定库中的所有集合。
--query <json>, -q <json> # 指定 json 作为查询条件。来备份我们过滤后的数据。
--queryFile <path> # 指定 json 文档路径,以该文档的内容作为查询条件,来备份我们过滤后的数据。
--quit # 通过抑制 MongoDB的复制,连接等活动,来实现备份。
--gzip # 开启压缩,3.2版本后可以使用,输出为文件的话会带有后缀.gz
--out <path>, -o <path> # 输出的目录路径
--repir # 修复数据时使用 下面有详细介绍
--oplog # mongodump 会将 mongodump 执行期间的 oplog 日志 输出到文件 oplog.bson,这就意味着从备份开始到备份结束的数据操作我们都可以记录下来。
--archive <file> # 输出到单个存档文件或者是直接输出。
--dumpDbUsersAndRoles # 只有在 使用 --db 时才适用,备份数据库的包含的用户和角色。
--excludeCollection string # 排除指定的集合,如果要排除多个,使用多个--excludeCollection
--numParallelCollections int, -j int # 并行导出的集合数,默认为4
--ssl # 指定 TLS/SSL 协议
--sslCAFile filename # 指定认证文件名
--sslPEMKeyFile <filename>
--sslPEMKeyPassword <value>
--sslCRLFile <filename>
--sslAllowInvalidCertificates
--sslAllowInvalidHostnames
--sslFIPSMode
例:
-
指定されたコレクションを除外
mongodump --db test --excludeCollection=users --excludeCollection=salaries
-
指定されたIP、ポート、ユーザ名、認証、圧縮、出力ディレクトリ
mongodump --host mongodb1.example.net --port 37017 --username user --password "pass" --gzip --out /opt/backup/mongodump-2019-04-17
1.2、注意
私たちは、その後でデータの万枚、のこのコレクションのデータセットを削除するとOplogは10000件の、削除レコードを持っています。
オペレーティング・レコードが急速に覆われているの内側にこのような動作は、以前のOplogにつながります。
私たちがバックアップしたときだから、あなたはバックアップ間隔時間に注意を払う必要があり、記録時間Oplogは(どのくらいログすなわちOplogレコード)をカバーしました。前者と後者を上回ります。
例:
私たちのバックアップ計画は、1日1日よりOplog記録保持時間大きいのデータをバックアップすることです。
バックアップ戦略上のレプリカセットのためのものであるようOplog開口部は、オープンにオープンレプリカ設定する必要があります。
2、CPやrsyncの
私たちは、直接データファイルをコピーすることができますが、我々はそうでない場合、我々は、ファイルが無効でコピーし、ファイルをコピーする前にMongoDBの操作を停止する必要があります。
3、突然単一ノード閉まりた後、どのようにデータを回復します
以下は、単一ノードのためであることに注意してください。
予期しないシャットダウンノードの後、我々はノードを再、ログのエラーには、次を発見しました。
2018-10-24T18:05:18.248-0400 W STORAGE [initandlisten] Detected unclean shutdown - mongod.lock is not empty. ... 2018-10-24T17:24:53.122-0400 E STORAGE [initandlisten] Failed to get the cursor for uri: table:collection-2-6854866147293273505 2018-10-24T17:24:53.122-0400 E STORAGE [initandlisten] This may be due to missing data files. ... ... ***aborting after fassert() failure
そして、データ・ストレージ・mongod.lockパスにファイルがあります。
我々は使用することができ mongod --repair
、データを回復します。
WiredTigerエンジン上のMongoDB 4.0.3では、以下のことを行うには、このコマンドを使用します
- すべてのインデックスを再構築
- 破損したデータを破棄
- 不完全なスタブファイルのメタデータを作成します。
MMAPv1エンジン用
- すべてのインデックスを再構築
- 破損したデータを破棄
データ復旧プロセス:
-
既存のデータをバックアップまずバック
我々は、すべての既存のデータのバックアップ・コピーの全体のディレクトリ内のすべてのファイルへのcpコマンドを使用することができます。
-
使用は--repairのmongod
# 针对 所有数据库 mongod --repair # 针对 单个数据库 mongod --dbpath /opt/mongodb/data/djx --repair
通常の状況では、手動で削除してはならない
mongod.lock
ファイルを。代わりに、データベースを復元するために、上記の手順を使用します。重症例では、使用が破損したファイルは、データベースを起動し、データベースからデータを回復しようとすること、ファイルを削除することができますが、リスクがあります。
図4は、バックアップデータを表示します
我々は直視ではない、我々は見るためのツールを通じて(MongoDBは来るのインストール)bsondumpことができます参照してください、すべてのバイナリデータの一部です。
[root@djx uu_dev]# bsondump order_detail.bson
2019-04-17T16:14:51.430+0800 549 objects found
{"_id":{"$oid":"5cae98d0f23d932dscdfc2ff"}}
{"_id":{"$oid":"5cae98d0f23d932dscdfca00"}}
{"_id":{"$oid":"5cae98d1f23d932dscdfca31"}}
{"_id":{"$oid":"5cae98d1f23d932dscdfca32"}}
二、MongoDBの削減
1、mongorestore特長
mongorestore
あなたは、新しいデータベースを作成したり、既存のデータベースにデータを追加することができますが、mongorestore
唯一の実行insert
操作が行われていないupdate
操作を。既存のデータベースに文書を復元する場合は、データベース内の既存の文書というこの手段_id
の値と文書が復元したい_id
値は、同じデータベースの元の値によってカバーされていません。- インデックスを再構築し、
mongorestore
インデックスを再構築。 mongorestore
回復していないsystem.profile
データを
2、mongorestore共通パラメータ
--help # 查看帮助
--quiet # 通过抑制 MongoDB的复制,连接等活动,来实现数据恢复。
--host <hostname><:port>, -h <hostname><:port> # 指定恢复的主机ip和端口号,默认值localhost:27017
--port # 指定端口号 默认27017
--username <username>, -u <username> # 指定用户名
--password <password>, -p <password> # 指定密码
--authenticationDatabase <dbname> # 指定认证的数据库
--authenticationMechanism <name> # 指定认证的算法 ,默认值 SCRAM-SHA-1
--objcheck # 开启验证,验证还原操作,确保没有无效的文档插入数据库。会有较小的性能影响
--oplogReplay # 恢复备份数据并将 mongodump 执行期间的操作(记录在导出的日志)恢复。
--oplogLimit # 指定恢复
--oplogFile # 指定 Oplog 路径
--keepIndexVersion # 阻止mongorestore在还原过程中将索引升级到最新版本。
--restoreDbUsersAndRoles # 还原指定的数据库用户和角色。
--maintainInsertionOrder # 默认值为False,如果为 True,mongorestore 将按照输入源的文档顺序插入,否则是 随机执行插入。
--numParallelCollections int, -j int # 指定并行恢复的集合数。
--numInsertionWorkersPerCollection int # 默认值为 1,指定每个集合恢复的并发数,大数据量导入增加该值可提高 恢复速度。
--gzip # 从压缩文档中 恢复。
--archive # 从归档文件中恢复。
--dir # 指定还原数据储存目录。
図3に示すように、還元の例
mongorestore --collection people --db accounts dump/
mongorestore --host mongodb1.example.net --port 37017 --username user --password "pass" /opt/backup/mongodump-2011-10-24
mongorestore --gzip --archive=test.20150715.gz --db test
mongorestore --archive=test.20150715.archive --db test