MongoDBのバックアップとmongodump、mongorestore MongoDBのバックアップをリストアし、mongodumpを復元し、mongorestore

MongoDBのバックアップとmongodumpを復元し、mongorestore

 

MongoDBのバックアップと復元

A、MongoDBのバックアップ

MongoDBは、いくつかの方法は、バックアップします:

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

例:

  1. 指定されたコレクションを除外

    mongodump  --db test --excludeCollection=users --excludeCollection=salaries
  2. 指定された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エンジン用

  • すべてのインデックスを再構築
  • 破損したデータを破棄

データ復旧プロセス:

  1. 既存のデータをバックアップまずバック

    我々は、すべての既存のデータのバックアップ・コピーの全体のディレクトリ内のすべてのファイルへのcpコマンドを使用することができます。

  2. 使用は--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は、いくつかの方法は、バックアップします:

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

例:

  1. 指定されたコレクションを除外

    mongodump  --db test --excludeCollection=users --excludeCollection=salaries
  2. 指定された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エンジン用

  • すべてのインデックスを再構築
  • 破損したデータを破棄

データ復旧プロセス:

  1. 既存のデータをバックアップまずバック

    我々は、すべての既存のデータのバックアップ・コピーの全体のディレクトリ内のすべてのファイルへのcpコマンドを使用することができます。

  2. 使用は--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

おすすめ

転載: www.cnblogs.com/zmsn/p/12000917.html
おすすめ