山间小草 發表於 2022-11-12 23:38:00

MongoDB导入导出备份数据

<p>需要提前安装<code>mongodb-database-tools</code>参考:centos离线安装mongodb-database-tools</p>
<h1>导出数据</h1>
<p>常用的导出有两种:<code>mongodump</code>和<code>mongoexport</code>,两种方式的区别:</p>
<p>1、mongodump导出的文件格式是bson,mongoexport导出的文件格式是json和csv,可读性高。</p>
<p>2、mongodump只能指定到集合,mongoexport可以指定到字段。</p>
<p>3、mongodump导出速度快,压缩率高,适合备份全库文件,mongoexport适合导出单个集合。</p>
<h2>mongodump</h2>
<pre class="language-bash highlighter-hljs"><code>mongodump -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c数据集(表) -o 文件保存路径</code></pre>
<p>&nbsp;常用参数:</p>
<table style="border-collapse: collapse; width: 100%; height: 252px; margin-left: auto; margin-right: auto" border="1">
<tbody>
<tr style="height: 21px">
<td style="width: 9.89011%; height: 42px; text-align: center" rowspan="2">连接选项</td>
<td style="width: 22.8238%; height: 21px">-h, --host=&lt;hostname&gt;</td>
<td style="width: 67.2861%; height: 21px">指定主机,格式:or[域名]or[域名:端口号],默认是:localhost:27017</td>
</tr>
<tr style="height: 21px">
<td style="width: 22.8238%; height: 21px">--port=&lt;port&gt;</td>
<td style="width: 67.2861%; height: 21px">指定mongo服务器端口号,默认27017</td>
</tr>
<tr style="height: 21px">
<td style="height: 42px; width: 9.89011%; text-align: center" rowspan="2">验证选项</td>
<td style="width: 22.8238%; height: 21px">-u, --username=&lt;username&gt;</td>
<td style="width: 67.2861%; height: 21px">用户身份验证的用户名</td>
</tr>
<tr style="height: 21px">
<td style="width: 22.8238%; height: 21px">-p, --password=&lt;password&gt;&nbsp;</td>
<td style="width: 67.2861%; height: 21px">用于身份验证的密码</td>
</tr>
<tr style="height: 21px">
<td style="height: 42px; width: 9.89011%; text-align: center" rowspan="2">空间选项</td>
<td style="width: 22.8238%; height: 21px">-d, --db=&lt;database-name&gt;</td>
<td style="width: 67.2861%; height: 21px">要使用的数据库</td>
</tr>
<tr style="height: 21px">
<td style="width: 22.8238%; height: 21px">-c, --collection=&lt;collection-name&gt;</td>
<td style="width: 67.2861%; height: 21px">要使用的集合</td>
</tr>
<tr style="height: 21px">
<td style="height: 84px; width: 9.89011%; text-align: center" rowspan="3">查询选项</td>
<td style="width: 22.8238%; height: 21px">-q, --query=</td>
<td style="width: 67.2861%; height: 21px">查询过滤器,作为v2 Extended JSON字符串,例如,' { ' x ':{ ' $ gt ':1 } } '</td>
</tr>
<tr style="height: 21px">
<td style="width: 22.8238%; height: 21px">--queryFile=</td>
<td style="width: 67.2861%; height: 21px">包含查询筛选器( v2扩展JSON)的文件的路径</td>
</tr>
<tr style="height: 42px">
<td style="width: 22.8238%; height: 42px">--readPreference=&lt;string&gt;|&lt;json&gt;</td>
<td style="width: 67.2861%; height: 42px">指定偏好模式(例如"最近" )或偏好json对象( e.g. ' { mode : '最近' , tagSets : [ { a : ' b ' } ] , maxStalenessSeconds : 123 } ')</td>
</tr>
<tr style="height: 21px">
<td style="height: 42px; width: 9.89011%; text-align: center" rowspan="2">输出选项</td>
<td style="width: 22.8238%; height: 21px">-o, --out=&lt;directory-path&gt;</td>
<td style="width: 67.2861%; height: 21px">输出目录,或者' - '表示stdout (默认值:' dump ' )</td>
</tr>
<tr style="height: 21px">
<td style="width: 22.8238%; height: 21px">--gzip</td>
<td style="width: 67.2861%; height: 21px">用Gzip压缩归档或集合输出</td>
</tr>
</tbody>
</table>
<p>更详细的参数可以使用<code>mongodump --help</code>查看或者参考官方文档:https://www.mongodb.com/docs/database-tools/</p>
<p>一些例子:</p>
<pre class="language-bash highlighter-hljs"><code>#导出所有数据到指定目录
mongodump -o /root/databak
#导出本机的nts库到指定数据库
mongodump -d nts -o /root/databak
#导出目标机192.168.1.108的nts库到指定数据库
mongodump -h 192.168.1.108 -d nts -o /root/databak
#导出nts库的firefox集合(表)到指定目录
mongodump -d nts -c firefox -o /root/databak</code></pre>
<p><img src="https://img2022.cnblogs.com/blog/2985032/202211/2985032-20221112225921169-1743999746.png"></p>
<h2>mongoexport</h2>
<pre class="language-bash highlighter-hljs"><code>mongoexport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 数据集(表) -f 字段(列1,列2,...) -o 保存的文件名称</code></pre>
<p>常用参数:</p>
<table style="border-collapse: collapse; width: 100%; height: 294px; margin-left: auto; margin-right: auto" border="1">
<tbody>
<tr style="height: 21px">
<td style="width: 9.89011%; height: 42px; text-align: center" rowspan="2">连接选项</td>
<td style="width: 23.8389%; height: 21px">-h, --host=&lt;hostname&gt;</td>
<td style="width: 66.271%; height: 21px">指定主机,格式:or[域名]or[域名:端口号],默认是:localhost:27017</td>
</tr>
<tr style="height: 21px">
<td style="width: 23.8389%; height: 21px">--port=&lt;port&gt;</td>
<td style="width: 66.271%; height: 21px">指定mongo服务器端口号,默认27017</td>
</tr>
<tr style="height: 21px">
<td style="height: 42px; width: 9.89011%; text-align: center" rowspan="2">验证选项</td>
<td style="width: 23.8389%; height: 21px">-u, --username=&lt;username&gt;</td>
<td style="width: 66.271%; height: 21px">用户身份验证的用户名</td>
</tr>
<tr style="height: 21px">
<td style="width: 23.8389%; height: 21px">-p, --password=&lt;password&gt;&nbsp;</td>
<td style="width: 66.271%; height: 21px">用于身份验证的密码</td>
</tr>
<tr style="height: 21px">
<td style="height: 42px; width: 9.89011%; text-align: center" rowspan="2">空间选项</td>
<td style="width: 23.8389%; height: 21px">-d, --db=&lt;database-name&gt;</td>
<td style="width: 66.271%; height: 21px">要使用的数据库</td>
</tr>
<tr style="height: 21px">
<td style="width: 23.8389%; height: 21px">-c, --collection=&lt;collection-name&gt;</td>
<td style="width: 66.271%; height: 21px">要使用的集合</td>
</tr>
<tr style="height: 21px">
<td style="height: 42px; text-align: center; width: 9.89011%" rowspan="3">输出选项</td>
<td style="width: 23.8389%; height: 21px">-f, --fields=&lt;field&gt;[,&lt;field&gt;]*</td>
<td style="width: 66.271%; height: 21px">指定列名,多个列名以逗号分隔。例如:-f "name,age"</td>
</tr>
<tr style="height: 21px">
<td style="width: 23.8389%; height: 21px">--type=&lt;type&gt;</td>
<td style="width: 66.271%; height: 21px">输出格式 json 或者 csv</td>
</tr>
<tr style="height: 21px">
<td style="width: 23.8389%; height: 21px">-o, --out=&lt;filename&gt;</td>
<td style="width: 66.271%; height: 21px">输出的文件名</td>
</tr>
<tr style="height: 21px">
<td style="height: 84px; width: 9.89011%; text-align: center" rowspan="3">查询选项</td>
<td style="width: 23.8389%; height: 21px">-q, --query=</td>
<td style="width: 66.271%; height: 21px">查询过滤器,作为v2 Extended JSON字符串,例如,' { ' x ':{ ' $ gt ':1 } } '</td>
</tr>
<tr style="height: 21px">
<td style="width: 23.8389%; height: 21px">--queryFile=</td>
<td style="width: 66.271%; height: 21px">包含查询筛选器( v2扩展JSON)的文件的路径</td>
</tr>
<tr style="height: 42px">
<td style="width: 23.8389%; height: 42px">--readPreference=&lt;string&gt;|&lt;json&gt;</td>
<td style="width: 66.271%; height: 42px">指定偏好模式(例如"最近" )或偏好json对象( e.g. ' { mode : '最近' , tagSets : [ { a : ' b ' } ] , maxStalenessSeconds : 123 } ')</td>
</tr>
</tbody>
</table>
<p>&nbsp;几个例子:</p>
<h3>导出json格式数据</h3>
<pre class="language-bash highlighter-hljs"><code>#导出nts库的chrome集合中的name列,保存为chrome.json文件
mongoexport -d nts -c chrome -f name -o chrome.json
#导出nts库的chrome集合,保存为chrome.json文件
mongoexport -d nts -c chrome -o chrome.json</code></pre>
<p><img src="https://img2022.cnblogs.com/blog/2985032/202211/2985032-20221112224939789-103954098.png"></p>
<h3>导出csv格式数据</h3>
<pre class="language-bash highlighter-hljs"><code>#导出nts库的browser集合中的name和version列,并保存为browser.csv文件
mongoexport -d nts -c browser -o /root/databakcsv/browser.csv -f name,version --csv</code></pre>
<p><img src="https://img2023.cnblogs.com/blog/2985032/202302/2985032-20230207153618926-1485446031.png"></p>
<p>打开csv文件,内容如下</p>
<p><img src="https://img2023.cnblogs.com/blog/2985032/202302/2985032-20230207153715803-747886441.png"></p>
<h1>恢复</h1>
<p>恢复经常用到<code>mongorestore</code>和<code>mongoimport</code>,两者区别:</p>
<p>1、mongorestore恢复的是mongodump导出的bson格式文件。</p>
<p>2、mongoimport恢复的是mongoexport导出的json格式文件。</p>
<p>3、bson是二进制文件,恢复时对mongo的版本有要求,尽量保持相同的版本,如果版本不同,可能会存在问。</p>
<p>4、json格式文件没有版本要求。</p>
<h2>mongorestore</h2>
<pre class="language-bash highlighter-hljs"><code>mongorestore -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 数据集(表) --drop 文件路径</code></pre>
<p>常用参数:</p>
<table style="border-collapse: collapse; width: 100%; height: 189px" border="1">
<tbody>
<tr style="height: 21px">
<td style="width: 9.89305%; height: 42px; text-align: center" rowspan="2">连接选项</td>
<td style="width: 25.2941%; height: 21px">-h, --host=&lt;hostname&gt;</td>
<td style="width: 64.8128%; height: 21px">指定主机,&nbsp;&nbsp; [域名]&nbsp;&nbsp; [域名:端口号]</td>
</tr>
<tr style="height: 21px">
<td style="width: 25.2941%; height: 21px">--port=&lt;port&gt;</td>
<td style="width: 64.8128%; height: 21px">指定mongo服务器端口号,默认27017</td>
</tr>
<tr style="height: 21px">
<td style="height: 42px; width: 9.89305%; text-align: center" rowspan="2">验证选项</td>
<td style="width: 25.2941%; height: 21px">-u, --username=&lt;username&gt;</td>
<td style="width: 64.8128%; height: 21px">用户身份验证的用户名</td>
</tr>
<tr style="height: 21px">
<td style="width: 25.2941%; height: 21px">-p, --password=&lt;password&gt;&nbsp;</td>
<td style="width: 64.8128%; height: 21px">用于身份验证的密码</td>
</tr>
<tr style="height: 21px">
<td style="height: 63px; text-align: center; width: 9.89305%" rowspan="3">空间选项</td>
<td style="width: 25.2941%; height: 21px">-d, --db=&lt;database-name&gt;</td>
<td style="width: 64.8128%; height: 21px">要使用的数据库,后期会弃用</td>
</tr>
<tr style="height: 21px">
<td style="width: 25.2941%; height: 21px">-c, --collection=&lt;collection-name&gt;</td>
<td style="width: 64.8128%; height: 21px">要使用的集合,后期会弃用</td>
</tr>
<tr style="height: 21px">
<td style="width: 25.2941%; height: 21px">--nsInclude=&lt;namespace-pattern&gt;</td>
<td style="width: 64.8128%; height: 21px">新版本建议用这个,例子:--nsInclude=${DATABASE}.${COLLECTION},注:使用nsInclude指定的库和集合必须存在,否则无效</td>
</tr>
<tr style="height: 21px">
<td style="width: 9.89305%; height: 21px; text-align: center">恢复选项</td>
<td style="width: 25.2941%; height: 21px">--drop</td>
<td style="width: 64.8128%; height: 21px">恢复前删除现有数据</td>
</tr>
</tbody>
</table>
<p>更详细的参数可以使用<code>mongorestore --help</code>查看或者参考官方文档:https://www.mongodb.com/docs/database-tools/</p>
<p>&nbsp;一些例子:</p>
<pre class="language-bash highlighter-hljs"><code>#恢复指定路径的备份数据,这里的路径是库的备份路径
mongorestore /root/databak
#恢复nts库
mongorestore -d nts /root/databak/nts
#将nts库数据还原到nts_new数据库中
mongorestore -d nts_new /root/databak/nts</code></pre>
<h2>mongoimport</h2>
<pre class="language-bash highlighter-hljs"><code>mongoimport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 数据集(表) -f 字段(列1,列2,...) --type 文件格式 --file 指定文件</code></pre>
<p>常用参数:</p>
<table style="border-collapse: collapse; width: 100%; height: 210px" border="1">
<tbody>
<tr style="height: 21px">
<td style="width: 9.89011%; height: 42px; text-align: center" rowspan="2">连接选项</td>
<td style="width: 25.2747%; height: 21px">-h, --host=&lt;hostname&gt;</td>
<td style="width: 64.8352%; height: 21px">指定主机,&nbsp;&nbsp; [域名]&nbsp;&nbsp; [域名:端口号]</td>
</tr>
<tr style="height: 21px">
<td style="width: 25.2747%; height: 21px">--port=&lt;port&gt;</td>
<td style="width: 64.8352%; height: 21px">指定mongo服务器端口号,默认27017</td>
</tr>
<tr style="height: 21px">
<td style="height: 42px; width: 9.89011%; text-align: center" rowspan="2">验证选项</td>
<td style="width: 25.2747%; height: 21px">-u, --username=&lt;username&gt;</td>
<td style="width: 64.8352%; height: 21px">用户身份验证的用户名</td>
</tr>
<tr style="height: 21px">
<td style="width: 25.2747%; height: 21px">-p, --password=&lt;password&gt;&nbsp;</td>
<td style="width: 64.8352%; height: 21px">用于身份验证的密码</td>
</tr>
<tr style="height: 21px">
<td style="height: 42px; width: 9.89011%; text-align: center" rowspan="2">空间选项</td>
<td style="width: 25.2747%; height: 21px">-d, --db=&lt;database-name&gt;</td>
<td style="width: 64.8352%; height: 21px">要使用的数据库</td>
</tr>
<tr style="height: 21px">
<td style="width: 25.2747%; height: 21px">-c, --collection=&lt;collection-name&gt;</td>
<td style="width: 64.8352%; height: 21px">要使用的集合</td>
</tr>
<tr style="height: 21px">
<td style="height: 63px; text-align: center; width: 9.89011%" rowspan="3">输入选项</td>
<td style="width: 25.2747%; height: 21px">-f, --fields=&lt;field&gt;[,&lt;field&gt;]*</td>
<td style="width: 64.8352%; height: 21px">指定列名,多个列名以逗号分隔。例如:-f "name,age"</td>
</tr>
<tr style="height: 21px">
<td style="width: 25.2747%; height: 21px">--file=&lt;filename&gt;</td>
<td style="width: 64.8352%; height: 21px">输入的文件,指定文件</td>
</tr>
<tr style="height: 21px">
<td style="width: 25.2747%; height: 21px">--type=&lt;type&gt;</td>
<td style="width: 64.8352%; height: 21px">输入的格式: json, csv, or tsv</td>
</tr>
<tr style="height: 21px">
<td style="text-align: center; width: 9.89011%; height: 21px">恢复选项</td>
<td style="width: 25.2747%; height: 21px">--drop</td>
<td style="width: 64.8352%; height: 21px">恢复前删除原集合数,不带该参数表示在原集合上追加</td>
</tr>
</tbody>
</table>
<p>例子:</p>
<pre class="language-bash highlighter-hljs"><code>#恢复tank库的systemset集合,恢复前清空这个集合的内容
mongorestore -d tank -c systemset --drop --file /home/databak/mongodb/tank/systemset.json</code></pre>
<p>&nbsp;end。</p>
<div class="notranslate" style="all: initial">&nbsp;</div><br><br>
来源:https://www.cnblogs.com/xujiecnblogs/p/16881292.html
頁: [1]
查看完整版本: MongoDB导入导出备份数据