MongoDB 数据库

关系型数据库

  • 设计表的结构

    • 使用sql语句进行增删改查

      • 主键约束

      • 默认值

      • 非空

      • 唯一

非关系型数据库

  • 键值对没有表的关系,只有键值对的关系key-value

在MongoDB中是最像关系型数据库的非关系型数据库

  • 数据库->数据库

  • 数据表->集合

  • 表记录->(文档对象)

MongoDB不需要设计表结构,可以任意的添加数据不需要结构性

1.常用参数

mongod 是MongoDB系统的主要守护进程,用于处理数据请求,数据访问和执行后台管理操作,必须启动,才能访问MongoDB数据库。

在启动mongod时,常用的参数是:

  • --dbpath :存储MongoDB数据文件的目录

  • --directoryperdb:指定每个数据库单独存储在一个目录中(directory),该目录位于--dbpath指定的目录下,每一个子目录都对应一个数据库名字。Uses a separate directory to store data for each database. The directories are under the --dbpath directory, and each subdirectory name corresponds to the database name.

  • --logpath :指定mongod记录日志的文件

  • --fork:以后台deamon形式运行服务

  • --journal:开始日志功能,通过保存操作日志来降低单机故障的恢复时间

  • --config(或-f):配置文件,用于指定runtime options

  • --bind_ip :指定对外服务的绑定IP地址

  • --port :对外服务窗口

  • --auth:启用验证,验证用户权限控制

  • --syncdelay:系统刷新disk的时间,单位是second,默认是60s

  • --replSet :以副本集方式启动mongod,副本集的标识是setname

1.下载安装

  • 选择server版本下载

  • 启动服务报错

    ** WARNING: Access control is not enabled for the database.
    //没有启用访问控制,对数据库不安全

    使用admin数据库,创建新用户

    参考链接 https://blog.csdn.net/sunbocong/article/details/78106096

    use admin
    db.createUser({
    ... ... ... user:"zpliu",
    ... ... ... pwd:"mysql",
    ... ... ... roles:[{role:"useAdminAnyDatabase",db:"admin"}]
    ... ... ... })
    //执行结果
    Successfully added user: {
        "user" : "zpliu",
        "roles" : [
            {
                "role" : "userAdminAnyDatabase",
                "db" : "admin"
            }
        ]
    }

    开启控制访问,并且使用刚创建的用户进行登录

    mongod --auth
    //用户登录访问
     mongo  -u "zpliu" -p "mysql" --authenticationDatabase "admin"
  • 重启mongoDB报错

     Failed to set up listener: SocketException: Address already in use

    查看当前进程是否存在mongod进行,杀死,然后清空sock文件,在/tem/目录下

  • centos7中特有的错误

    参考: https://blog.csdn.net/sunbocong/article/details/78106096

    ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
    **        We suggest setting it to 'never'
    ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
    **        We suggest setting it to 'never'

    这是centos为了提升内存性能设置的单数据库厂商建议关闭;我就不管了

  • 使用远程连接数据库

  • 使用普通用户启动数据库

    没有权限进入数据存储目录,直接修改目录所有者即可

    Attempted to create a lock file on a read-only directory: /data/db, terminating
    
    chown MongoDBuser -R /data/db/

2.报错总结

  • 权限不足的问题

    一般是账户对当前的数据库没有相应的操作权限导致的

    "not authorized on admin to execute command "

Last updated