心旅程 發表於 2020-7-7 10:08:00

MongoDB 逻辑还原工具mongorestore

<p>mongorestore是官方提供用来还原导入由mongodump导出生成的二进制备份文件的工具,通常与mongodump配合使用,关于mongodump工具的使用可以参考另一篇博文:<strong>MongoDB 逻辑备份工具mongodump</strong></p>
<p>主要概要说明与mongodump一致,本文同样基于MongoDB 4.2 社区版本。</p>
<h2 id="主要选项">主要选项</h2>
<p>通过执行选项<code>--help</code>选项获得:</p>
<pre><code class="language-sh">mongorestore --help
Usage:
mongorestore &lt;options&gt; &lt;directory or file to restore&gt;

Restore backups generated with mongodump to a running server.
</code></pre>
<p>选项分为几个大类:</p>
<ul>
<li><strong>general options</strong>:通用选项</li>
<li><strong>connection options</strong>:连接选项</li>
<li><strong>ssl options</strong>:安全连接选项</li>
<li><strong>authentication options</strong>:验证选项</li>
<li><strong>kerberos options</strong>:基于kerboeros验证选项</li>
<li><strong>namespace options</strong>:命名空间选项</li>
<li><strong>uri options</strong>:mongodb uri连接串选项</li>
<li><strong>input options</strong>:输入选项</li>
<li><strong>restore options</strong>:还原选项</li>
<li><strong>verbosity options</strong>:显示选项</li>
</ul>
<h3 id="general-options通用选项">general options(通用选项)</h3>
<pre><code class="language-sh">--help      # 打印工具使用方式,选项说明。
--version   # 打印工具版本并退出。
</code></pre>
<h3 id="connection-options连接选项">connection options(连接选项)</h3>
<pre><code class="language-sh">-h, --host=&lt;hostname&gt;   # 指定连接的实例主机名或者IP地址。                                 
    --port=&lt;port&gt;       # 指定连接的实例端口号。                                 
</code></pre>
<ul>
<li><strong>Standalone(单实例)</strong></li>
</ul>
<p>只指定选项<code>--host</code></p>
<pre><code class="language-sh">mongorestore --host="192.168.196.128:27017" dump/
</code></pre>
<p>同时指定选项<code>--host</code>和<code>--port</code></p>
<pre><code class="language-sh">mongorestore --host="192.168.196.128" --port=27017 dump/
</code></pre>
<ul>
<li><strong>Replica Set(副本集)</strong></li>
</ul>
<p>对于副本集的连接,mongorestore总是连接副本集的主节点Primary。</p>
<pre><code class="language-sh">mongorestore --host="dbabdSet/192.168.196.128:27017,192.168.196.128:27018,192.168.196.128:27019" dump/
</code></pre>
<p>也可以单独指定副本集的Primary节点进行连接(同单实例的连接方式)。</p>
<h3 id="ssl-options安全连接选项">ssl options(安全连接选项)</h3>
<pre><code class="language-sh">--ssl                                                
--sslCAFile=&lt;filename&gt;                              
--sslPEMKeyFile=&lt;filename&gt;                           
--sslPEMKeyPassword=&lt;password&gt;                        
--sslCRLFile=&lt;filename&gt;                              
--sslAllowInvalidCertificates         
--sslAllowInvalidHostnames
--sslFIPSMode
</code></pre>
<p>关于ssl安全加密协议连接,本文不过多的赘述,详情可以参考官方文档:<strong>https://docs.mongodb.com/manual/reference/program/mongorestore/#cmdoption-mongorestore-ssl</strong>。</p>
<h3 id="authentication-options验证选项">authentication options(验证选项)</h3>
<p>主要用于验证连接实例的用户的合法性。</p>
<pre><code class="language-sh">-u, --username=&lt;username&gt;                   # 指定连接用户
-p, --password=&lt;password&gt;                   # 指定连接用户密码
--authenticationDatabase=&lt;database-name&gt;    # 指定连接用户验证数据库
--authenticationMechanism=&lt;mechanism&gt;       # 指定连接验证机制
</code></pre>
<p>注意:</p>
<p>如果需要在导入时显示指示输入密码,而不是直接写在选项中,则在指定<code>--username</code>选项的同时,不指定<code>--password</code>或者为<code>--password</code>选项指定一个空值,如:<strong>--password ""</strong>。</p>
<h3 id="kerberos-optionskerboeros验证选项"><strong>kerberos options(kerboeros验证选项)</strong></h3>
<p>该选项主要是基于kerberos验证机制的连接验证选项,kerberos只有MongoDB企业版才支持,本文基于社区版本,有关kerberos可以参考官方文档:<strong>https://docs.mongodb.com/manual/core/kerberos/</strong>。</p>
<h3 id="namespace-options命名空间选项">namespace options(命名空间选项)</h3>
<p>主要是指定需要导入还原的数据库和集合。</p>
<pre><code class="language-sh">-d, --db=&lt;database-name&gt;                            # 指定从BSON文件需要还原的数据库名
-c, --collection=&lt;collection-name&gt;                  # 指定从BSON文件需要还原的集合名
--excludeCollection=&lt;collection-name&gt;               # 指定还原时需要排除的集合名,如多个可以多次指定
--excludeCollectionsWithPrefix=&lt;collection-prefix&gt;# 指定还原时需要排除的集合名前缀
--nsExclude=&lt;namespace-pattern&gt;                     # 指定还原时需要排除的命名空间,可以理解为数据库和集合组合过滤,如                                                       "test.myCollection", "reporting.*", "dept*.bar"
--nsInclude=&lt;namespace-pattern&gt;                     # 指定还原时需要包含的命名空间,可以理解为数据库和集合组合过滤
--nsFrom=&lt;namespace-pattern&gt;                        # 指定接受命名空间进行匹配还原,使用最少匹配原则
--nsTo=&lt;namespace-pattern&gt;                        # 指定接受命名空间进行匹配还原重命名,使用最少匹配原则
</code></pre>
<p>注意:</p>
<p>选项<code>-d</code>和<code>-c</code>指定备份文件需要还原成的数据库名和集合名,如果实例中没有对应数据库或集合,则创建并还原导入数据,当指定这两个选项时,还原文件必须为<strong>BSON</strong>格式的文件,这两个选项在未来更新的版本将会被废弃,建议使用选项<code>--nsInclude</code>替代。</p>
<p>对于选项<code>--nsInclude</code>指定的命名空间在备份文件当中没有对应的数据库或集合,则数据不会被还原导入。</p>
<p>选项<code>--nsFrom</code>和<code>--nsTo</code>主要是为了在还原时改变备份文件中的数据库和集合原来的命名空间,一般这两个选项结合着使用。</p>
<h3 id="input-options输入选项">input options(输入选项)</h3>
<p>影响mongorestore导入时的行为选项。</p>
<pre><code class="language-sh">--objcheck                                           # 指定在还原插入对象时进行校验合法性
--oplogReplay                                        # 指定还原后回放oplog达到完整基于时间点的还原
--oplogLimit=&lt;seconds&gt;[:ordinal]                     # 指定oplog还原开始的时间戳
--oplogFile=&lt;filename&gt;                               # 指定需要进行回放的oplog文件
--archive=&lt;filename&gt;                                 # 指定需要进行还原的归档文件,如果不指定值,则该选项值默认获取标                                                                                                               准输入值
--restoreDbUsersAndRoles                           # 指定还原数据库中关于用户名和角色定义
--dir=&lt;directory-name&gt;                               # 指定还原的目录,'-' 为标准输入
--gzip                                             # 指定对采用压缩格式保存的导入文件进行解压
</code></pre>
<p>注意:</p>
<p>如果备份文件为归档文件类型并且进行了压缩,则在还原时需要同时指定选项<code>--archive</code>和<code>--gzip</code>。</p>
<h3 id="restore-options还原选项">restore options(还原选项)</h3>
<p>主要为mongorestore还原导入选项。</p>
<pre><code class="language-sh">--drop                                             # 指定导入集合数据时先删除原集合
--dryRun                                             # 指定进行预导入,不进行真正的还原导入操作
--writeConcern=&lt;write-concern&gt;                     # 指定导入数据时的写入优先级,如--writeConcern majority,                                                      --writeConcern '{w:3, wtimeout: 500, fsync: true,                                                      j: true}'
--noIndexRestore                                     # 指定还原不导入索引
--convertLegacyIndexes                               # 指定导入时移除失效索引,并且重建索引
--noOptionsRestore                                 # 阻止mongorestore对已还原的集合执行收集选项操作
--keepIndexVersion                                 # 阻止mongorestore还原时升级已存在的索引版本
--maintainInsertionOrder                           # 指定还原导入时插入文档的顺序性
-j, --numParallelCollections=                        # 指定还原导入集合并行度,默认值:4
--numInsertionWorkersPerCollection=                  # 指定还原导入每个集合插入操作并行度,默认值:1
--stopOnError                                        # 指定还原导入时出现错误后中止执行,少量文档还是有可能插入
--maintainInsertionOrder                           # 指定还原导入时出现错误后立刻中止执行
--bypassDocumentValidation                           # 指定跳过文档的合法性校验
--preserveUUID                                       # 指定还原导入时保持集合原始的UUIDS
</code></pre>
<p>注意:</p>
<p><code>--drop</code>选项指定在还原导入集合时先删除原先实例中存在的同名集合,该选项不会在运行实例中删除备份文件中没有的数据库或集合。</p>
<p><code>--maintainInsertionOrder</code>选项从版本4.2开始引入,如果指定该选项,mongorestore在还原导入文档时以实际导出时的插入顺序一致,这其中包括批量写文档的顺序以及在批量中文档的插入顺序,在早期版本中只能保证批量写文档的顺序。如果指定该选项同时也指定了选项<code>--stopOnError</code>和设置选项<code>--numInsertionWorkersPerCollection= 1</code>,默认值:false。</p>
<p><code>--numParallelCollections</code>选项指定还原时插入集合的并行数,默认值:4。</p>
<p><code>--numInsertionWorkersPerCollection</code>选项指定还原导入当前集合的插入工作进程数,默认值:1。</p>
<p><code>--stopOnError</code>选项指定在mongorestore还原导入时一出错就中止,默认情况下, 当mongorestore遇到主键重复或文档较验失败等错误时,导入进程并不会中止。</p>
<h3 id="verbosity-options显示选项">verbosity options(显示选项)</h3>
<p>指定导出时log输出的显示的详细级别。</p>
<pre><code class="language-sh">-v, --verbose=&lt;level&gt;# 指定日志输出详细级别,如:-vvvvv 或 指定数值
--quiet                # 指定不输出任何日志信息
</code></pre>
<h2 id="使用示例">使用示例</h2>
<h3 id="还原所有数据库">还原所有数据库</h3>
<pre><code class="language-sh">mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
heck --dir /data/mongodump/full/
</code></pre>
<h3 id="还原指定数据库">还原指定数据库</h3>
<pre><code class="language-sh">mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
heck --nsInclude=dbabd.* --dir /data/mongodump/full/
</code></pre>
<h3 id="还原指定数据库和指定集合">还原指定数据库和指定集合</h3>
<pre><code class="language-sh">mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
heck --nsInclude=dbabd.orders --dir /data/mongodump/full/
</code></pre>
<p>或</p>
<pre><code class="language-sh">mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
heck -d dbabd --dir /data/mongodump/full/dbabd/orders.bson
</code></pre>
<p>或</p>
<pre><code class="language-sh">mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
heck -d dbabd -c orders --dir /data/mongodump/full/dbabd/orders.bson
</code></pre>
<h3 id="指定排除一个或多个集合进行还原">指定排除一个或多个集合进行还原</h3>
<pre><code class="language-sh">mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
heck --excludeCollection=orders --dir /data/mongodump/full/
</code></pre>
<p>或</p>
<pre><code class="language-sh">mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
heck --nsExclude=dbabd.orders --dir /data/mongodump/full/
</code></pre>
<h3 id="还原压缩格式的备份">还原压缩格式的备份</h3>
<pre><code class="language-sh">mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
heck --gzip --nsInclude=dbabd.orders --dir /data/mongodump/gzip/
</code></pre>
<p>或</p>
<pre><code class="language-sh">mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
heck --gzip -d dbabd --dir /data/mongodump/gzip/dbabd/orders.bson.gz
</code></pre>
<p>或</p>
<pre><code class="language-sh">mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
heck --gzip -d dbabd -c orders --dir /data/mongodump/gzip/dbabd/orders.bson.gz
</code></pre>
<h3 id="还原以归档文件形式存在的备份">还原以归档文件形式存在的备份</h3>
<pre><code class="language-sh">mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin -
-objcheck --nsInclude=dbabd.orders --archive=/data/mongodump/dbabd_orders.archive
</code></pre>
<h3 id="还原集合时如果存在先清除原集合">还原集合时如果存在先清除原集合</h3>
<pre><code class="language-sh">mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --drop --objc
heck --dir /data/mongodump/full/
</code></pre>
<h2 id="注意">注意</h2>
<p>mongorestore在还原导入过程中只执行插入操作,并不执行更新操作,如果还原导入已存在的实例中的数据库或集合有已存在相同<code>_id</code>的文档,mongorestore并不会覆盖。</p>
<p>mongorestore不导入<strong>system.profile</strong>集合数据。</p>
<p>对于开启了访问控制机制的实例,mongorestore要执行还原导入操作的话至少需要具有<strong>restore</strong>角色权限。</p>
<h2 id="总结">总结</h2>
<p>本文简要梳理了MongoDB逻辑备份还原工具mongorestore的使用,mongorestore主要是与mongodump进行搭配,面对的问题也与mongodump如出一辙,在较大数据量的实例还原消耗的时间过长,同时重建索引也比较令人头疼。</p>
<h2 id="参考">参考</h2>
<p><strong>https://docs.mongodb.com/database-tools/mongorestore</strong></p>
<p><strong>https://docs.mongodb.com/manual/reference/program/mongorestore/#cmdoption-mongorestore-ssl</strong></p>
<p><strong>https://docs.mongodb.com/manual/core/kerberos</strong></p>
<p><strong>https://www.cnblogs.com/dbabd/p/13139556.html</strong></p>
<p><strong>☆〖本人水平有限,文中如有错误还请留言批评指正!〗☆</strong></p>


</div>
<div id="MySignature" role="contentinfo">
    <div id="dbabdSignature">   
      <div>作者:H_Johnny</div>
      <div>出处:http://www.cnblogs.com/dbabd/</div>
      <div>本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。</div>
      <div>如果您觉得文章不错,请帮忙点击右下角的推荐,谢谢!
    </div></div><br><br>
来源:https://www.cnblogs.com/dbabd/p/13259147.html
頁: [1]
查看完整版本: MongoDB 逻辑还原工具mongorestore