Mongodb导入数据失败

在使用定时任务用脚本使用mongorestore操作mongodb库数据导入时(有两个集合数据大概是一个多G),偶尔会发生数据导入失败的情况,如导入数据一半失败后mongodb服务就会断开,昨天测试每隔半小时导入一次,四次中失败了一次,目前服务器内存,磁盘,以及脚本命令如下

img

img

img

img

推荐使用备份工具来做
https://www.cnblogs.com/dbabd/p/13139556.html

可以试着将导入数据的过程分批进行,以减少单次导入的数据量。
还有就是至少把日志捞出来才可以分析一下噻,定位一下具体失败的原因

–repair选项运行mongod服务。能修复mongodb数据库中的任何损坏,有可能解决mongorestore命令失败的问题

  • 这篇博客: mongodb导入数据变得很慢,解决办法中的 学习mongodb过程中遇到了一个棘手的问题,向mongos中导入大约1G的数据,变得越来越慢,甚至进度条一直不走了(之前也插入过1G数据,没遇到这种情况)。自己摸索了好久,终于解决。解决方法,与大家分享 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 一直停着不动
    开始我以为是不是数据处理的时候出了问题,然后我又将需要导入的数据重新预处理,之后操作,还是不行,也是上述情况。
    之后我又以为是mongodb集群崩了,重新搭建复制集+分片,再导入数据,还是上述问题。
    那既然不是mongodb的问题,数据的问题,那就是linux的问题了。

    查看了mongos.log(哈哈,后来才想到查看日志)

    [ShardRegistry] Ending idle connection to host 192.168.xxx.xxx:21000 because the pool meets constraints; 1 connections to that host remain open
    

    Google一下,大概是和什么“ 连接数 ” 有关

    查看了一下mongos.conf,是有一个这么玩意,但是我设置了呀

    #设置最大连接数
    maxConns=20000
    

    再连接mongos,查看最大连接数

    mongos> db.serverStatus().connections		//查询最大连接数
    { "current" : 1, "available" : 818, "totalCreated" : NumberLong(1) 
    

    有问题 ,当前mongodb最大连接数=current数值+available数值,这才819,与我设置的20000,相差甚远。后来晚上搜索一番,其实是于Linux默认进程能打开最大文件数有关

    修改
    第一步 编辑 /etc/security/limits.conf ,加入以下两行

    * soft nofile 65535      //应该大于上述最大连接数20000就可以
    * hard nofile 65535
    

    这里 * 表示所有用户, 但有的linux系统不认, 需要具体的用户名, 比如:

    root soft nofile 65535
    root hard nofile 65535

    第二步 编辑 etc/pam.d/login , 确保有如下行:

    session required pam_limits.so

    第三步 修改系统总限制
    修改 /etc/sysctl.conf, 加入

    fs.file-max = 6553560

    最后我重启使配置生效

    再次连接mongos

    mongos> db.serverStatus().connections
    { "current" : 1, "available" : 19999, "totalCreated" : 3, "active" : 1 }
    //最大连接数正好两万
    

    后来又执行mongoimport导入数据,顺利导入,还挺快
    导入1G数据大约耗时十多分钟
    这是我的解决方法,大家可以参考一下

可以使用得有点少,运行内存也要带点

以下是一些可能的原因

1、内存不足:当 MongoDB 服务器内存不足时,导入数据操作可能会失败。
2、网络问题:在导入数据时网络连接出现故障,则导入操作可能会中断。
3、数据库权限问题:用户没有足够的权限来执行导入操作,则导入操作可能会失败。
4、源文件损坏:数据文件已损坏,则导入操作可能会失败。
5、定时任务问题:如果定时任务本身存在问题,则导入操作可能会失败。

之前回答过类似的问题,可以看看:

  1. 检查网络连接:在导入数据时,特别是在数据量比较大时,网络不稳定或中断可能会导致数据导入失败。可以通过将网络连接优化为更稳定的连接方式,例如使用有线网络连接代替无线网络连接等来尝试解决该问题。
  2. 检查硬件资源:在导入数据时,需要耗费大量的计算机资源,特别是内存和硬盘容量。如果您的服务器内存和磁盘空间受限,可能会导致数据导入失败。可以考虑增加硬件资源(如增加内存和磁盘容量等)或者使用更优化的数据导入方式(例如将数据分批导入等)来解决该问题。
  3. 检查数据文件:导入数据时,如果数据文件格式不正确或者数据本身存在问题,也可能导致数据导入失败。可以尝试检查数据文件格式、类型和内容等,并尝试重新转换或处理数据,以便进行导入。
  4. 尝试使用 mongorestore 的更多配置项:mongorestore 命令有多个不同的配置项可以用于控制导入过程,并可避免一些导入中的常见问题。例如,您可以使用--numInsertionWorkersPerCollection参数来控制导入过程中的并发性,或者使用--writeConcern参数来控制数据完整性等。