mongodb是一款非关系型数据库。

安装:

        在epel yum源里面有,yum install mongodb-server mongodb


配置文件:

        配置文件在 /etc/mongod.conf 

        dbpath = /var/lib/mongodb        数据文件位置

        bind_ip = 127.0.0.1            注释掉这行

        httpinterface = true           开启接口

        rest = true                          加上这行

        修改完成之后启动数据库,systemctl start mongod,使用 mongo 命令进入客户端。

常用配置:

        fork={true|false}:是否在后台运行

        bind_ip:指定监听地址

        port=27017:默认监听端口,当启动httpd接口时会启动28017

        httpinterface:可以通过web页面监控mongodb状态信息

        maxConns:最大连接数

mongodb命令行

        mongodb的命令行操作,使用mongo即可登录到mongodb数据库,

常用命令:

        help                  帮助命令

        db.help()

        db.status()        数据库状态,统计数据

        db.serverStatus()

        show dbs          查看有多少个数据库

        show collections    显示数据库中的所有集合

        db.getCollectionNames()    显示collection名称及列表

CRUD操作:

        创建数据库:不用创建数据库,会在插入数据时自动创建。

        db.表名.insert({ key:val, key2:val })

查看数据:

        db.mycoll.find()

                比较操作符:$gt 大于,{field : { $gt : value} }、$gte、$lt、$lte、$、ne、$in、$nin

                比较操作:$gt, {field: {$gt: value}}、$gte、$lt、$lte、$ne、$in、$nin

                逻辑操作:$or, $and, $not,  {$or: [{},{}]}

                存在性判断:$exists

                值类型判断: $type

        db.mycoll.find().limit() ,count() ,skip()

        db.mycoll.findOne()

删除数据:

        db.mycoll.remove({ title : "标题" })

        db.mycoll.remove({ age : { $gt : 18 } })

        db.mycoll.remove()

修改数据:

        db.mycoll.update()

        db.mycoll.update( { age : { $gt : 20 } } , { name : 'hello' } , false ,true )

        第一部分 { age : { $gt : 20 } } 为要查询的条件,第二部分 { name : 'hello' } 为要修改的值,后面两个参数中第一个参数 false 表示如果记录不存在是否插入新的记录,第二个为是否多记录查询,默认只操作查询第一条记录。

删除表:

        db.collectionname.drop()

删除库:

        use databasesname

        db.dropDatabase()

创建索引:

        db.表名.ensuresIndex( {name:1} , { unique : true } ) name为字段名称,后面的unique表示创建的类型为唯一索引。

        db.collections.dropIndex(index_name)

        db.collections.dropIndexes()

        db.collectionsgetIndexes()

        db.collections.reIndex()

mongodb复制功能:

        mongodb的复制功能有两种,一种是master/slave 和MySQL一样,但是现在已经很少用到了,被弃用了。还有一种叫 replica set,复制集,副本集,这种结构可以实现自动故障转移,更易恢复,这种复制在架构上同MySQL,一个节点可以写其他节点只能读,服务于同一个数据集的多个mongodb实例。

        mongodb主节点将数据保存在操作日志oplog中,从节点通过oplog来复制数据并应用于本地的。从节点不断发送心跳信息来监测主节点是否在线。当副本集联系不到直接点超过十秒,就会触发重新选举一个新的主节点,心跳信息传递每隔两秒传递一次,选举有一个仲裁者节点arbiter,也就说至少有三个节点。


数据导入导出

导出数据:

        导出某张表/collections到文件。

mongoexport  -d  databasename  -c  collectionsname  -o output.txt

                -d 数据库名称

                -c 表名称或者叫collection

                -o 输出文件名称

                -h 数据库宿主机的hostname/IP

                -u 数据库的用户名,username

                -p 数据库的密码,password

                -f  要导出那些列,field

                -q 导出数据的过滤条件


        导出为CSV格式:

mongoexport  -d databasesname  -c  collectionname --CSV  -f field1,field2  -o  output.csv
mongoexport  -d testdb -c students --csv -f name,age -q '{age:{$gt:20}}' -o output.csv


导入数据:

mongoimport  -d dbname  -c  collectionname  input.filename

                -h 数据库宿主机的IP

                -u 数据库的用户名

                -p 数据库的密码

                -d 数据库的名字

                -c collection的名字

                -f 要导入那些列


数据备份恢复

数据备份:

        mongodump、mongorestore 和 mongoimport、mongoexport的区别在于,前者导出的数据是二进制的,后者导出的是文本是语句。前者对于不同的版本可能不兼容,后者则没有这个问题。

mongodump -h  hostname -d  dbname -o output.directory

                -h hostname

                -d 数据库名

                -o 输出目录名称,是个层级目录,每个表名一个目录

        不加任何参数只要使用 mongodump 命令就可以将整个表导出,每个表为一个目录,不过仅限于本机。

加验证数据备份:

        备份所有库:

mongodump --port 27017 -uadmin -p123456 --authenticatonDatabase admin -o directory

 

        备份单个库:

mongodump --port 27017 -uadmin -p123456 --authenticationDatabase admin -d databasename -o directory

 

        备份单张表/数据集:

mongodump --port 27017 -uadmin -p123456 --authenticationDatabase admin -d databasename -c collectionname -o directory

备份时候压缩:

mongodump --host prd-bondmcf001 -u admin -p innodealing --authenticationDatabase admin --gzip  -d  databasename -c  collectionname -o outputname

        在备份时候加上--gzip参数即可,恢复时也加入--gzip参数。


数据恢复:

        mongorestore 是在shell命令行中运行的命令,

        mongorestore -h hostname -d dbname  directory_of_data

                -h hostname

                -d 数据库名

        后面的目录为导出的数据目录,如果直接使用mongorestore  directory_of_data,这样可以将数据直接导入,仅限于本机操作。

加验证的恢复:

        恢复整个数据库:

mongorestore --port 27017 -uadmin -p123456 --authenticationDatabase admin  data_path_directory

        后面的 data_path_directory 是数据存放的目录,而且是个父级目录,就是使用mongodump导出时的目录,这个目录下面有对应与数据表的目录,使用的这个目录就是库目录。

        恢复单个库:

mongorestore --port 27017 -uadmin -p123456 --authenticationDatabase admin -d databasename --dir /backup_dir

        恢复某张表:

       data_path_directory

mongorestore --port 27017 -uadmin -p123456 --authenticationDatabase admin -d dbname  -c myTest /root/backuptest_my/test/myTest.bson

                -u 用户名

                -p 密码

                -d 数据库名

                --port 端口号

        这个目录 data_path_directory 就是对应的数据表说在目录。


忘记密码


修改配置:

vim /etc/mongodb.conf
#auth = true # 注释掉,重启mongodb

修改密码:

mongo #直接登录
show dbs;
use admin # 切换到 admin 用户下
db.system.users.find() # 查看当前的用户
db.system.users.remove({}) # 删除现有用户
db.createUser({user:"admin",pwd:"123456",roles:["root"]}) # 创建新的超管账号

导出所有数据:

mongodump --host 192.168.199.254 --port 27017 -o all-data.mongodb