存档三月 2021

Mongodb 数据库




Mongodb 数据库



mongodb 4.0.23 单机部署

    # wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.23.tgz
    # tar -zxvf mongodb-linux-x86_64-4.0.23.tgz -C /usr/local/               \\ 二进制包 直接解压即可
    # cd /usr/local/
    # mv mongodb-linux-x86_64-4.0.23 mongodb
    # mkdir -p /usr/local/mongodb/{data,etc,log}
    # ln -s /usr/local/mongodb/bin/* /usr/local/bin/     \\ 软连接到 PATH 目录
    # mongod -v                                           \\ 可查看到版本
    # echo 'mongod -f /usr/local/mongodb/etc/mongodb.conf' >> /etc/rc.d/rc.local
    # chmod +x /etc/rc.d/rc.local
    # vim ./etc/mongodb.conf                        \\ 创建配置文件
        dbpath=/usr/local/mongodb/data               \\ 数据库路径
        logpath=/usr/local/mongodb/log/mongodb.log    \\ 日志文件路径
        logappend=true                                 \\ 表示日志文件末尾追加日志
        port=27017                                      \\ 启用端口号
        fork=true                                        \\ 在后台运行
        #bind_ip=172.21.34.204,127.0.0.1                  \\ 绑定ip 默认只有127.0.0.1 需要外网访问可以开启 可绑定多个ip
    # mongod -f ./etc/mongodb.conf                         \\ 启动
    # ss -tnl                                               \\ 27017被监听
    # mongo --host=127.0.0.1 --port=27017                    \\ 连接  本机 # mongo   即可
        > show dbs;                  \\ 需要添加 管理用户 默认没有任何用户 添加 root用户 权限为root最大权限 管理admin表格
        > use admin;                  \\ 默认使用test库 但是没有显示 因为此库没有任何数据 所有不显示
        > db.createUser( {user: "root",pwd: "123456",roles: [ { role: "root", db: "admin" } ]})
        > show users;                   \\ 查看 当前数据库的 用户
    # pkill mongod                       \\ 关掉 mongod
    # vim ./etc/mongodb.conf
        auth=true                          \\ 开启验证     关闭此项不需要验证  第一次需把此项注释掉 配置完用户在开启
    # mongod -f /usr/local/mongodb/etc/mongodb.conf   \\ 重新启动 设置的密码已经生效 需要使用 密码
    # mongo
        > use admin                 \\ 使用 admin 库     如果admin不存在 在 创建admin库
        > db.auth('root','123456')   \\ 验证
                                      \\ 以下为一些常用命令
        > show dbs                     \\ 查看所有数据库  MongoDB用户权限分配的操作是针对某个库来说的... ... ... ...
        > show databases;               \\ 查看所有数据库
        > show users                     \\ 显示用户      刚创建的数据库没有任何用户 需要创建用户
        > db                              \\ 查询 当前所在的数据库
        > show tables                      \\ 查询所有 集合  表
        > show collections                  \\ 查询所有 集合 表
        > db stats()                         \\ 查看 当前 数据库的状态
        > db.version()                        \\ 查看 mongodb 版本
        > db.dropDatabase()                    \\ 删除当前正在使用的数据库
        > db.system.users.find()                \\ 查询所有用户
        > db.system.users.remove({user:"root"})  \\ 删除用户 root


创建数据库
    > use teo           \\ 创建数据库
    > db                 \\ 显示当前使用的数据库
    > show dbs            \\ 显示所有数据库 然而并没有刚创建的
    > db.runoob.insert({"name":"111"})       \\ 需要随便插入一条数据 才能显示数据库
    > show dbs


创建用户
    > db.createUser( {user: "root",pwd: "123456",roles: [ { role: "root", db: "admin" } ]})
        user:用户名
        pwd:密码
        roles:指定用户的角色,可以用一个空数组给新用户设定空角色;
               在roles字段,可以指定内置角色和用户定义的角色。role里的角色可以选:
                1. 数据库用户角色:read、readWrite;
                2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
                3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
                4. 备份恢复角色:backup、restore;
                5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
                6. 超级用户角色:root 还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
                7. 内部角色:__system

                Read:允许用户读取指定数据库
                readWrite:允许用户读写指定数据库
                dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
                userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
                clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
                readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
                readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
                userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
                dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
                root:只在admin数据库中可用。超级账号,超级权限。


其他的一些命令

    > db.collection_name.find()     \\ 查所有满足条件数据
    > db.collection_name.findOne()   \\ 查满足条件的一条数据
    > db.collection_name.count()      \\ 统计集合下面有多少数量的数据
    > db.collection_name.drop()        \\ 删除集合
 

........................................................................................................................


MongoDB 集群
   
    主从复制 Master-Slaver: 是一种主从副本的模式,目前已经不推荐使用。
    副本集 Replica Set: 模式取代了 Master-Slaver 模式,是一种互为主从的关系。Replica Set 将数据复制多份保存,
                       不同服务器保存同一份数据,在出现故障时自动切换,实现故障转移,在实际生产中非常实用。
    分片 Sharding: 模式适合处理大量数据,它将数据分开存储,不同服务器保存不同的数据,所有服务器数据的总和即为整个数据集。


1. mongodb 4.0.23 集群部署   Replica Set模式   副本集

    主节点   172.21.34.204 27017
    从节点   172.21.34.204 27018
    仲裁节点 172.21.34.204 27019        \\ 仲裁节点本身并不存储数据,主要的作用是决定哪一个备节点在主节点挂掉之后提升为主节点

    # wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.23.tgz
    # tar zxvf mongodb-linux-x86_64-4.0.23.tgz -C /usr/local/               \\ 二进制包 直接解压即可
    # cd /usr/local/
    # mv mongodb-linux-x86_64-4.0.23 mongodb
    # mkdir -p /usr/local/mongodb/{data/{27017,27018,27019},etc,log,run}
    # ln -s /usr/local/mongodb/bin/* /usr/local/bin/        \\ 软连接到 PATH 目录
    # mongod -v                                              \\ 可查看到版本
    # cd /usr/local/mongodb/etc
    # vim /usr/local/mongodb/etc/mongodb_27017.conf
        dbpath=/usr/local/mongodb/data/27017                    \\ 数据库路径
        logpath=/usr/local/mongodb/log/mongodb_27017.log         \\ 日志文件路径
        pidfilepath=/usr/local/mongodb/run/mongodb_27017.pid      \\ pid 路径
        directoryperdb=true
        logappend=true                                              \\ 使用追加的方式写日志
        replSet=testrs                       \\ 设置副本集名称,在各个配置文件中,其值必须相同
        bind_ip=127.0.0.1,172.21.34.204       \\ 绑定ip 默认只有127.0.0.1
        port=27017                             \\ 启用端口号
        oplogSize=10000
        fork=true                                \\ 在后台运行
        noprealloc=true
        #auth=true                                 \\ 开启验证  此2项为注释 在下面有开启验证的时候 在开
        #keyFile=/usr/local/mongodb/keyfile         \\ key 文件目录 用于验证节点

    # cp mongodb_27017.conf mongodb_27018.conf        \\ 三台配置 基本一样 复制 稍加修改即可
    # cp mongodb_27017.conf mongodb_27019.conf
    # sed -i 's/27017/27018/g' mongodb_27018.conf
    # sed -i 's/27017/27019/g' mongodb_27019.conf

    # mongod -f /usr/local/mongodb/etc/mongodb_27017.conf  \\ 启动 主服务器
    # mongod -f /usr/local/mongodb/etc/mongodb_27018.conf   \\ 启动 从服务器
    # mongod -f /usr/local/mongodb/etc/mongodb_27019.conf    \\ 启动 仲裁服务器
    # ss -tnl
    # pkill mongod

    # mongo 172.21.34.204:27017        \\ 配置 副本集
        testrs:PRIMARY> use admin
        testrs:PRIMARY> cfg={ _id:"testrs", members:[ {_id:0,host:'172.21.34.204:27017',priority:2}, 
        testrs:PRIMARY> {_id:1,host:'172.21.34.204:27018',priority:1},
        testrs:PRIMARY> {_id:2,host:'172.21.34.204:27019',arbiterOnly:true}] }; \\ 启动 副本集 priority:0 永远不能为主节点
        rs.initiate(cfg)                                 \\ 使配置生效 后 会出现 testrs:PRIMARY>   cfg为随便启动名字
            testrs:SECONDARY>                             \\ 集群的标志 有此证明集群启动成功

        testrs:PRIMARY> rs.conf()                           \\ 查看副本集的配置信息
        testrs:PRIMARY> rs.status()                          \\ 查看副本集 状态
        testrs:PRIMARY> db.printSecondaryReplicationInfo()    \\ 查看备份节点的复制信息

     # mongo 172.21.34.204:27017             \\ 添加认证 添加了两个用户 root为系统管理员  admin为数据库管理员,管理所有数据库
        testrs:PRIMARY> show dbs
        testrs:PRIMARY> use admin
        testrs:PRIMARY> show collections
        testrs:PRIMARY> db.system.users.find()
        testrs:PRIMARY> db.createUser({user:"root",pwd:"123456",roles:[{role:"root",db:"admin"}]}) \\ 添加系统管理员 root 
        testrs:PRIMARY> db.auth('system','123456')  \\ 添加管理员用户认证,认证之后才能管理所有数据库    ↓ 添加数据库管理员 
        testrs:PRIMARY> db.createUser({user:"admin",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db:"admin"}]}) \\ 
    # mongo 172.21.34.204:27017 -u root -p 123456 --authenticationDatabase admin      \\ 可以连接     ↑ 用来管理所有数据库
    # mongo 172.21.34.204:27017 -u admin -p 123456 --authenticationDatabase admin      \\ 这两条好像没啥大用
    # vim /usr/local/mongodb/etc/mongodb_27017.conf     \\ 在所有配置文件中开启认证   27018 27019 也需要添加 
        auth=true
        keyFile=/usr/local/mongodb/keyfile
    # openssl rand -base64 21 > keyfile                    \\ 生成秘钥 长度最好是3的倍数 上面为21位 否则可能认证失败
    # chmod 600 /usr/local/mongodb/keyfile
    # cat /usr/local/mongodb/keyfile

    # pkill mongod                                            \\ 重启 服务器 使验证生效
    # mongod -f /usr/local/mongodb/etc/mongodb_27017.conf      \\ 启动 主服务器
    # mongod -f /usr/local/mongodb/etc/mongodb_27018.conf       \\ 启动 从服务器
    # mongod -f /usr/local/mongodb/etc/mongodb_27019.conf        \\ 启动 仲裁服务器

    # mongo 172.21.34.204:27017
        testrs:PRIMARY> use admin
        testrs:PRIMARY> db.auth('root','123456')          \\ 验证
        testrs:PRIMARY> rs.status()

    复制测试
        mongo 172.21.34.204:27017           \\ 主库 创建数据
            for(var i=0;i<10;i++){db.customer.insert({"name":"user"+i})}
            WriteResult({ "nInserted" : 1 })
            db.customer.count()
                10

        mongo 172.21.34.204:27018          \\ 在从库查看已经可以看到数据
            rs.secondaryOk()
            db.customer.count()
                10

    故障转移测试
        # mongod --shutdown --dbpath /usr/local/mongodb/data/27017     \\ 关闭 主服务器
        # mongo 172.21.34.204:27018                                     \\ 来接 从服务器
            testrs:PRIMARY> rs.status()                         \\ 查看状态  可以看到此节点已经是主节点 PRIMARY
                "name" : "172.21.34.204:27017",                  \\ 可以 看到 27017 已经 挂掉了
                "stateStr" : "(not reachable/healthy)",
        # mongod -f /usr/local/mongodb/etc/mongodb_27017.conf      \\ 启动 27017 主服务器
        # mongo 172.21.34.204:27017                                 \\ 可看到 依然为主服务器
            testrs:PRIMARY> rs.status()


2. mongodb 4.0.23 集群部署  分片 Sharding        未配置 可参考 一下网站搭建

    https://blog.csdn.net/weixin_40292351/article/details/103476410?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control

    https://blog.csdn.net/liver_life/article/details/100562949?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control


关于 mongod 添加 systemctl 启动项

    # vim /etc/init.d/mongod               \\ 添加 启动项        带改
        ulimit -SHn 655350
        #!/bin/sh
        # chkconfig: - 64 36
        # description:mongod
        case $1 in
        start)
        /usr/local/mongodb/bin/mongod --maxConns 20000 --config /usr/local/mongodb/etc/mongodb.conf
        ;;
        stop)
        /usr/local/mongodb/bin/mongo 172.21.34.204:27017/admin --eval "db.shutdownServer()"
        #/usr/local/mongodb/bin/mongo 172.21.34.204:27017/admin --eval "db.auth('root', '123456');db.shutdownServer()"
        ;;
        status)
        /usr/local/mongodb/bin/mongo 172.21.34.204:27017/admin --eval "db.stats()"
        #/usr/local/mongodb/bin/mongo 172.21.34.204:27017/admin --eval "db.auth('root', '123456');db.stats()"
        ;;
        esac







change_nicode_php转换nicode编码.php


<?php /* php index.php 使用php转换nicode编码类似& #x674E;&# x665F; 把要转换的文件title.txt放到同级目录 */?>
<?php 
file_put_contents("./w.txt", html_entity_decode(file_get_contents("./title.txt")));
?>


注: 保存到 index.php即可