mongodb数据库的安装、基本操作、数据备份整理

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
日志服务 SLS,月写入数据量 50GB 1个月
简介:

mongodb数据库


1.安装

  1)下载源码包:

    http://downloads.mongodb.org/linux/mongodb-linux-x86_64-2.6.4.tgz

  2)解压缩源码包:

    tar -zxvf /usr/local/src/mongodb-linux-x86_64-2.6.4.tgz

  3)mkdir -p /usr/local/mongodb

    cp -R -n /usr/local/src/mongodb-linux-x86_64-2.6.4/* /usr/local/mongodb/

  4)设置环境变量:(此方法只对当前登录用户有效)

    vim ~/.bash_profile

       export PATH=/usr/local/mongodb/bin:$PATH

    source ~/.bash_profile #使新配置环境生效

    =================================================

    全局用户环境配置

    vim /etc/profile

       export PATH=/usr/local/mongodb/bin:$PATH

    source /etc/profile

    =================================================

2.启动mongodb

  1)创建数据库的数据目录和日志目录

    mkdir -p /home/data/mongodb/data

    mkdir -p /home/data/mongodb/logs

    ==============================================================================================================

    常用mongod命令参数:

    -h [ --help ]             查看帮助

    --version                 查看版本信息

    -f [ --config ] arg       指定配置文件

    --port arg                指定端口号

    --dbpath arg (=/data/db/) 指定数据存放目录

    --quiet                   指定静默模式

    --logpath arg             指定log文件存放目录

    --logappend               指定日志是以追加的方式写入日志文件

    --fork                    以创建子进程的方式运行

    --cpu                     周期性的显示cpu和io的使用情况

    --noauth                  无认证模式运行

    --auth                    认证模式运行

    --objcheck                对客户端输入数据的有效性检查

    --quota                   开启数据库配额的管理

    --quotaFiles arg          规定每个数据库允许的文件数

    --nocursors               diagnostic/debugging option 调试诊断选项

    --nohints                 ignore query hints 忽略查询命中率

    --nohttpinterface         disable http interface 关闭http接口,默认是28017

    --noscripting             disable scripting engine 关闭脚本引擎

    --noprealloc              disable data file preallocation 关闭数据库文件大小预分配

    --smallfiles              use a smaller default file size 使用较小的默认文件大小

    --nssize arg (=16)        .ns file size (in MB) for new databases 新数据库ns文件的默认大小

    --diaglog arg             0=off 1=W 2=R 3=both 7=W+some reads 提供的方式,是只读,只写,

                              还是读写都行,还是主要写+部分的读模式

    --sysinfo                 print some diagnostic system information 打印系统诊断信息

    --upgrade                 upgrade db if needed 如果需要就更新数据库

    --repair                  run repair on all dbs 修复所有的数据库

    --notablescan             do not allow table scans 不运行表扫描

    --syncdelay arg (=60)     seconds between disk syncs (0 for never) 系统同步刷新磁盘的时间,

                              默认是60s 

    Replication options:

    --master                  master mode 主复制模式

    --slave                   slave mode 从复制模式

    --source arg              when slave: specify master as <server:port> 当为从时,指定主的地址和端口

    --only arg                when slave: specify a single database to replicate 当为从时,指定需要从主复制的单一库

    --pairwith arg            address of server to pair with  

    --arbiter arg             address of arbiter server 仲裁服务器,在主主中和pair中用到

    --autoresync              automatically resync if slave data is stale 自动同步从的数据

    --slavedelay arg          specify delay (in seconds) to be used when applying master ops to slave 指从复制检测的间隔

    --oplogSize arg           size limit (in MB) for op log 指定操作日志的大小

    --opIdMem arg             size limit (in bytes) for in memory storage of op ids指定存储操作日志的内存大小

    Sharding options:

    --configsvr           declare this is a config db of a cluster 指定shard中的配置服务器

    --shardsvr            declare this is a shard db of a cluster 指定shard服务器

   =====================================================================================================================

  2)开启服务

    /usr/local/mongodb/bin/mongod --dbpath /home/data/mongodb/data/ --logpath=/home/data/mongodb/logs/mongod.log --logappend --auth --port=27017 --fork &

    ###指定数据存放目录、日志目录及文件名称、日志写入采用追加的形式、后台执行

    #配置环境之后,直接这样使用:

      mongod --dbpath /home/data/mongodb/data/ --logpath=/home/data/mongodb/logs/mongod.log --logappend --auth --port=27017 --fork &

    ###查看进程运行情况 ps aux|grep [m]ongod

  3)设置开机自启动

    将mongodb启动项目追加入rc.local保证mongodb在服务器开机时启动

    echo "/usr/local/mongodb/bin/mongod --dbpath /home/data/mongodb/data/ --logpath=/home/data/mongodb/logs/mongod.log --logappend --auth --port=27017 --fork" >> /etc/rc.local

  4)使用自带客户端连接

    /usr/local/mongodb/bin/mongo

    ========================

      > show databases;

      admin  (empty)

      local  0.078GB

    ========================

     若数据库出现如不能连上,则是一个data目录下的mongod.lock文件的问题,可以用如下的修复的命令,

     mongod --repair

    ========================

  4)关闭服务:

    killall mongod  [kill [pid]]

3.mongod数据的使用

  1)用户管理(备注:首先要进入一个数据库:>use test;)

    添加用户:

     >db.addUser("root","1234");默认是拥有weiw数据库所有权限(读写权限false)

     >db.addUser("swht","1234",true);拥有这个数据库的只读权限

  =====================================================================

   > db.addUser("root","1234");

   WARNING: The 'addUser' shell helper is DEPRECATED. Please use 'createUser' instead

   Successfully added user: { "user" : "root", "roles" : [ "dbOwner" ] }

   > db.addUser("swht","1234",true);

   WARNING: The 'addUser' shell helper is DEPRECATED. Please use 'createUser' instead

   Successfully added user: { "user" : "swht", "roles" : [ "read" ] }

  ======================================================================

    查看所有用户:

     >db.system.users.find();

    删除用户:

     >db.system.users.remove({user:"root"});

     >db.removeUser("root");

    创建超级用户:

     进入admin数据库

      >use admin

     在admin中创建的所有用户都是超级用户,可以操作任何的数据库

      >db.addUser("admin","admin");默认是拥有所有数据库所有权限

      >db.addUser("admin1","admin",true);拥有所有数据库的只读权限

  1)新建集合集

   =====================================================

    > db.user.insert({uid:1,username:"Falcon.C",age:25});

    WriteResult({ "nInserted" : 1 })

    > db.user.insert({uid:2,username:"swht",age:24});

    WriteResult({ "nInserted" : 1 })

   ======================================================    

  2)查询数据:

   ======================================================

    > db.user.find();

     { "_id" : ObjectId("5480085a2fcd6b18cad71ddd"), "uid" : 1, "username" : "Falcon.C", "age" : 25 }

     { "_id" : ObjectId("5480088e2fcd6b18cad71dde"), "uid" : 2, "username" : "swht", "age" : 24 }

    > db.user.find({uid:1});

     { "_id" : ObjectId("5480085a2fcd6b18cad71ddd"), "uid" : 1, "username" : "Falcon.C", "age" : 25 }

   ======================================================   

    > show databases;

    admin  (empty)

    local  0.078GB

    test   0.078GB

   ======================================================

   备注:查询数据的方式很丰富,有类似于SQL的条件查询,还支持丰富的查询还有limit ,sort ,findOne,distinct等

  3)更新数据

   更新的条件还有$unset、$push 、$pushAll 、$pop 、$pull 、$pullAll

  4)获取帮助:

   ==========================================================

   > help

   HELP

         show dbs                     show database names

         show collections             show collections in current database

         show users                   show users in current database

         show profile                 show most recent system.profile entries with time >= 1ms

         use <db name>                set curent database to <db name>

         db.help()                    help on DB methods

         db.foo.help()                help on collection methods

         db.foo.find()                list objects in collection foo

         db.foo.find( { a : 1 } )     list objects in foo where a == 1

         it                           result of the last line evaluated; use to further iterate

   > db.help();

         DB methods:

         db.addUser(username, password) 添加数据库授权用户

         db.auth(username, password)    访问认证

         db.cloneDatabase(fromhost) 克隆数据库

         db.commandHelp(name) returns the help for the command

         db.copyDatabase(fromdb, todb, fromhost) 复制数据库

         db.createCollection(name, { size : ..., capped : ..., max : ... } ) 创建表

         db.currentOp() displays the current operation in the db

         db.dropDatabase()        删除当前数据库

         db.eval(func, args) run code server-side

         db.getCollection(cname) same as db['cname'] or db.cname

         db.getCollectionNames()        获取当前数据库的表名

         db.getLastError() - just returns the err msg string

         db.getLastErrorObj() - return full status object

         db.getMongo() get the server connection object

         db.getMongo().setSlaveOk() allow this connection to read from the nonmaster member of a replica pair

         db.getName()

         db.getPrevError()

         db.getProfilingLevel()

         db.getReplicationInfo()

         db.getSisterDB(name) get the db at the same server as this onew

         db.killOp() kills the current operation in the db

         db.printCollectionStats()   打印各表的状态信息

         db.printReplicationInfo()        打印主数据库的复制状态信息

         db.printSlaveReplicationInfo()        打印从数据库的复制状态信息

         db.printShardingStatus()                打印分片状态信息

         db.removeUser(username) 删除数据库用户

         db.repairDatabase() 修复数据库

         db.resetError()

         db.runCommand(cmdObj) run a database command. if cmdObj is a string, turns it into { cmdObj : 1 }

         db.setProfilingLevel(level) 0=off 1=slow 2=all

         db.shutdownServer()

         db.version() current version of the server

   > db.foo.help(); user为表名

         DBCollection help

         db.foo.count()                统计表的行数

         db.foo.dataSize()        统计表数据的大小

         db.foo.distinct( key ) - eg. db.foo.distinct( 'x' )                按照给定的条件除重

         db.foo.drop() drop the collection 删除表

         db.foo.dropIndex(name) 删除指定索引

         db.foo.dropIndexes() 删除所有索引

         db.foo.ensureIndex(keypattern,options) - options should be an object with these possible fields: name, unique, dropDups 增加索引

         db.foo.find( [query] , [fields]) - first parameter is an optional query filter. second parameter is optional set of fields to return. 根据条件查找数据

         e.g. db.foo.find( { x : 77 } , { name : 1 , x : 1 } )

         db.foo.find(...).count()

         db.foo.find(...).limit(n) 根据条件查找数据并返回指定记录数

         db.foo.find(...).skip(n)

         db.foo.find(...).sort(...) 查找排序

         db.foo.findOne([query]) 根据条件查询只查询一条数据

         db.foo.getDB() get DB object associated with collection 返回表所属的库

         db.foo.getIndexes() 显示表的所有索引

         db.foo.group( { key : ..., initial: ..., reduce : ...[, cond: ...] } ) 根据条件分组

         db.foo.mapReduce( mapFunction , reduceFunction , <optional params> )

         db.foo.remove(query) 根据条件删除数据

         db.foo.renameCollection( newName ) renames the collection 重命名表

         db.foo.save(obj) 保存数据

         db.foo.stats() 查看表的状态

         db.foo.storageSize() - includes free space allocated to this collection 查询分配到表空间大小

         db.foo.totalIndexSize() - size in bytes of all the indexes 查询所有索引的大小

         db.foo.totalSize() - storage allocated for all data and indexes 查询表的总大小

         db.foo.update(query, object[, upsert_bool]) 根据条件更新数据

         db.foo.validate() - SLOW 验证表的详细信息

         db.foo.getShardVersion() - only for use with sharding

   ==========================================================

4.数据库备份与还原

  1)常规的文件json数据导出与导入

  #数据导出 mongoexport

  /usr/local/mongodb/bin/mongoexport  -h 192.168.1.200 -u root -p1234 -d my_mongodb -c user -o data_bak.dat

  #导出某个数据库中的某张表并存放到指定目录的指定文件

  ==============================================

  参数说明:

   -h 指定数据库主机地址

   -u 指定用户名

   -p 指定用户名密码

   -d 指明使用的库, 本例中为” my_mongodb”

   -c 指明要导出的表, 本例中为”user”

   -o 指明要导出的文件名, 本例中为”data_bak.dat”

  ===============================================

   #查看集合(数据表)

    show collections

    删除集合

    db.table_name.drop()

   #查看数据库

    show dbs

    删除整个库

    > show dbs

    admin  0.078GB

    local  0.078GB

    test   0.078GB

    > db

    test

    > db.ttlsa_com.getDB()

    test

    > show collections

    system.indexes

    user

    > db.dropDatabase()

    { "dropped" : "test", "ok" : 1 }

    > db

    test

    > show dbs

    admin  0.078GB

    local  0.078GB


  #数据导入mongoimport

   /usr/local/mongodb/bin/mongoimport -h 192.168.1.200 -u root -p1234 -d my_mongodb -c user  data_bak.dat

   #导入数据,指定数据库、数据表&&备份的文件路径

   2)使用mongodump进行备份

   /usr/local/mongodb/bin/mongodump -h 127.0.0.1:27017 -u root -p1234 -d test -o /opt/test.bak

   ===============================================

   -h:MongDB所在服务器地址和端口

   -d:需要备份的数据库实例

   -o:备份的数据存放位置,在备份完成后,系统自动在dump目录下建立一个lietou目录,这个目录里面存放该数据库实例的备份数据。

   ========================================

   /usr/local/mongodb/bin/mongorestore -h 127.0.0.1:27017-u root -p1234 -d test  --directoryperdb /opt/test.bak/test

   #还原的时候后面要加上备份数据库的名字,因为备份时系统会自动将所备份的数据库文件放到一个与数据库名称相同的文件目录下,而这个目录就在我们备份文件的目录

   =================================================

   -h:MongoDB所在服务器地址

   -d:需要恢复的数据库实例,当然这个名称也可以和备份时候的不一样,比如test2  

   --directoryperdb:备份数据所在位置,这里为什么要多加一个数据库名称   

   --drop:恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!

  ====================================================

  导出库:

  mongodump -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -o 文件存在路径 

    如果没有用户谁,可以去掉-u和-p。

    如果导出本机的数据库,可以去掉-h。

    如果是默认端口,可以去掉--port。

    如果想导出所有数据库,可以去掉-d。

  恢复库:

  mongorestore -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 --drop 文件存在路径

    --drop的意思是,先删除所有的记录,然后恢复。


                                                                   qongbo.song@apicloud.com

                                                                      2014-12-05整理分享










本文转自 南非波波 51CTO博客,原文链接:http://blog.51cto.com/nanfeibobo/1586744,如需转载请自行联系原作者
相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
11天前
|
存储 NoSQL 关系型数据库
非关系型数据库-MongoDB技术(二)
非关系型数据库-MongoDB技术(二)
|
11天前
|
NoSQL 关系型数据库 MongoDB
非关系型数据库-MongoDB技术(一)
非关系型数据库-MongoDB技术(一)
|
16天前
|
存储 SQL 关系型数据库
MySQL的安装&数据库的简单操作
本文介绍了数据库的基本概念及MySQL的安装配置。首先解释了数据库、数据库管理系统和SQL的概念,接着详细描述了MySQL的安装步骤及其全局配置文件my.ini的调整方法。文章还介绍了如何启动MySQL服务,包括配置环境变量和使用命令行的方法。最后,详细说明了数据库的各种操作,如创建、选择和删除数据库的SQL语句,并提供了实际操作示例。
58 13
MySQL的安装&数据库的简单操作
|
4天前
|
存储 NoSQL 前端开发
前端轻量级数据库mongodb
【10月更文挑战第2天】MongoDB 是一个基于分布式文件存储的开源数据库系统,不属于前端轻量级数据库,而是后端数据库。它使用 BSON 格式存储数据,支持复杂的数据结构,适用于内容管理系统、物联网等领域。MongoDB 通过动态模式和面向对象的数据存储方式,提供了灵活的数据模型。在 Web 应用中,它通常作为后端存储,通过 API 与前端交互,实现高效的数据管理和实时更新。
|
1月前
|
关系型数据库 Java MySQL
"解锁Java Web传奇之旅:从JDK1.8到Tomcat,再到MariaDB,一场跨越数据库的冒险安装盛宴,挑战你的技术极限!"
【9月更文挑战第6天】在Linux环境下安装JDK 1.8、Tomcat和MariaDB是搭建Java Web应用的关键步骤。本文详细介绍了使用apt-get安装OpenJDK 1.8、下载并配置Tomcat,以及安装和安全设置MariaDB(MySQL的开源分支)的方法。通过这些步骤,您可以快速构建一个稳定、高效的开发和部署环境,并验证各组件是否正确安装和运行。这为您的Java Web应用提供了一个坚实的基础。
37 0
|
2月前
|
C# 开发者 Windows
全面指南:WPF无障碍设计从入门到精通——让每一个用户都能无障碍地享受你的应用,从自动化属性到焦点导航的最佳实践
【8月更文挑战第31天】为了确保Windows Presentation Foundation (WPF) 应用程序对所有用户都具备无障碍性,开发者需关注无障碍设计原则。这不仅是法律要求,更是社会责任,旨在让技术更人性化,惠及包括视障、听障及行动受限等用户群体。
51 0
|
2月前
|
Java 前端开发 Spring
技术融合新潮流!Vaadin携手Spring Boot、React、Angular,引领Web开发变革,你准备好了吗?
【8月更文挑战第31天】本文探讨了Vaadin与Spring Boot、React及Angular等主流技术栈的最佳融合实践。Vaadin作为现代Java Web框架,与其他技术栈结合能更好地满足复杂应用需求。文中通过示例代码展示了如何在Spring Boot项目中集成Vaadin,以及如何在Vaadin项目中使用React和Angular组件,充分发挥各技术栈的优势,提升开发效率和用户体验。开发者可根据具体需求选择合适的技术组合。
36 0
|
2月前
|
存储 SQL NoSQL
探索数据存储的多样性:深入比较Entity Framework Core与NoSQL数据库MongoDB的特性与应用
【8月更文挑战第31天】在现代软件开发中,选择合适的数据存储方案对应用性能至关重要。本文通过对比Entity Framework Core(EF Core)和MongoDB,探讨两者的特点及适用场景。EF Core作为.NET生态中的ORM,简化了SQL数据库的交互;MongoDB则是一种灵活的NoSQL文档数据库,适合处理大量非结构化数据。两者在数据模型、查询方式及性能上各有优势,选择时需根据具体应用需求决定。理解这些差异有助于做出更合理的技术选型。
32 0
|
18天前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
20天前
|
存储 SQL 关系型数据库
使用MySQL Workbench进行数据库备份
【9月更文挑战第13天】以下是使用MySQL Workbench进行数据库备份的步骤:启动软件后,通过“Database”菜单中的“管理连接”选项配置并选择要备份的数据库。随后,选择“数据导出”,确认导出的数据库及格式(推荐SQL格式),设置存储路径,点击“开始导出”。完成后,可在指定路径找到备份文件,建议定期备份并存储于安全位置。
160 11
下一篇
无影云桌面