最近接到任务要对mongodb数据进行迁移,第一次接触MongoDB时候确实有点懵,但数据库大同小异,可以对比理解,今天就对数据库整个安装迁移做个简单的笔记,整个过程比较简单,文章主要方便日后回顾
1、数据库安装
数据库选用的是通过tar进行安装,可以从官网下载tar包,地址如下:
1.1 安装包下载解压
下载 MongoDB 的 Linux 二进制压缩包,并解压到 /disk1/mongo 目录下,目录大家根据自己需要来就可以
cd /disk1
tar mongodb-linux-x86_64-rhel70-3.6.23.tgz -C /disk1/momgo
mv mongodb-linux-x86_64-rhel70-3.6.23 /disk1/mongo
1.2 配置文件整理
systemLog:
destination: file
path: /disk1/mongo/logs/mongod.log
logAppend: true
storage:
dbPath: /disk1/momgo/data
journal:
enabled: true
path跟dbPath根据自己需要来
1.3 启动mongodb数据库
./bin/mongod -f mongod.conf
-f 指定配置文件,注意配置文件的路径,我这里是在当前目录下执行
1.4 测试数据库是否正常启动
./bin/mongo 127.0.0.1
如果出现下述图片样式即可
到底为止mongodb数据库安装完成
2、数据库数据迁移
在刚才的启动过程中细心的同学发现没有进行权限控制,在生产中是不允许的,这时候我们需要添加权限以及用户及用户角色等
2.1 创建数据库
> use mydatabase;
switched to db mydatabase
> db.myCollection.insertOne({"name":30})
{
"acknowledged" : true,
"insertedId" : ObjectId("6465c3c9d40dc12de0f4d146")
}
> show dbs;
admin 0.000GB
local 0.000GB
mydatabase 0.000GB
2.2 创建用户
> use admin;
switched to db admin
> db.createUser(
... ... {user:"myuser",
... ... pwd:"mypasswd",
... ... roles:[{role:"readWrite",db:"mydatabase"}]
... ... });
Successfully added user: {
"user" : "myuser",
"roles" : [
{
"role" : "readWrite",
"db" : "mydatabase"
}
]
}
>
1、实际操作过程中将上述user,pwd,db等替换成自己实际需要即可,出现successfully added user则表示创建成功,也可以实际查询。
2、用户角色有很多种,这里是readWrite,读写权限,其他权限可以自行查阅
查询创建的用户
> use admin;
> show collections;
system.users
system.version
> db.system.users.find();
{ "_id" : "admin.myuser", "userId" : UUID("d450ba1b-86d2-4e1c-a531-031b7a5b71f3"), "user" : "myuser", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "Wq9mWH05WKbqhFnG2j9gHw==", "storedKey" : "h9FoE/rnnIeRXrNma73JDdrF0h8=", "serverKey" : "UrnLa2WUy95Ne5+zLbENlXHVAiI=" } }, "roles" : [ { "role" : "readWrite", "db" : "stockdetail" } ] }
> db.system.users.find({"user":"myuser"});
{ "_id" : "admin.myuser", "userId" : UUID("d450ba1b-86d2-4e1c-a531-031b7a5b71f3"), "user" : "myuser", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "Wq9mWH05WKbqhFnG2j9gHw==", "storedKey" : "h9FoE/rnnIeRXrNma73JDdrF0h8=", "serverKey" : "UrnLa2WUy95Ne5+zLbENlXHVAiI=" } }, "roles" : [ { "role" : "readWrite", "db" : "stockdetail" } ] }
>
1、首先切换数据库,类似于mysql操作
2、查看admin数据库下的集合,类似于mysql的show tables;
3、查看用户,也可以通过键值对指定查找
2.3 直接给新创建用户分配数据库的读写权限(这一步可以理解成合并了2.1和2.2)
- 使用以下命令切换到包含所需表的数据库
use mydatabase
mydatabase是需要被创建的数据库
将mydatabase替换为您要授权的数据库名称。
- 创建一个新的数据库用户,并将其分配给某个数据库。例如,如果您要为 mydatabase 创建一个名为 myuser 的新用户,请使用以下命令:
db.createUser({
user: "myuser",
pwd: "mypassword",
roles: [{ role: "readWrite", db: "mydatabase" }]
})
将 myuser 和 mypassword 替换为您要创建的用户名和密码。
如果需要授予用户不同的角色或权限,请更改 roles 字段中的内容。
完成后,断开与 MongoDB 的连接。
2.4 通过navicat客户端或者命令行登录数据库
[root@20230505-0001 mongodb]# ./bin/mongo 127.0.0.1:27017/mydatabase -u myuser -p stockdetail
MongoDB shell version v3.6.23
connecting to: mongodb://127.0.0.1:27017/stockdetail?gssapiServiceName=mongodb
2023-05-18T15:30:43.634+0800 E QUERY [thread1] Error: Authentication failed. :
connect@src/mongo/shell/mongo.js:275:13
@(connect):1:6
exception: connect failed
通过命令行发现连接失败,所以需要开启用户身份认证
关闭mongodb后在配置文件中加入如下配置后重启数据库即可\
security:
authorization: enabled
2.4 再次验证数据库登录
[root@20230505-0001 mongodb]# ./bin/mongo 127.0.0.1:27017/mydatabase -u stockdetail -p stockdetail
MongoDB shell version v3.6.23
connecting to: mongodb://127.0.0.1:27017/stockdetail?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("74790931-bd21-409f-9147-22186a098148") }
MongoDB server version: 3.6.23
> show collections;
mytabl
>
从上述可以看到已经可以正常登录
2.5 数据库数据导出
从老库中将数据导出采用自动工具mongoexport,具体命令如下
./mongodb/bin/mongoexport -h 127.0.0.1 -d mydatabase -c stock_detail --username=myuser --password='mypasswd' -o /disk1/mongo_stockdetail/stock_detail.json
其中-h表示host,-d表示数据库,-c表示对应的collection -o表示保存路径
从下图中可以看到数据正常导出
2.6 数据库数据导入
从新库中将数据导出采用自动工具mongoimport,具体命令如下
./bin/mongoimport -h 127.0.0.1 --port 27017 -d mydatabase -u myuser -p mypasswd -c stock_detail --file /disk1/mdata/stock_detail.json
mongoimport -h 数据库所在主机地址 --port 数据库的端口 -d 要导入的数据库名字 -u 数据库的账号 -p 数据库的账号对应的密码 -c 集合名称 --file json文件路径
2.6 验证导入数据
[root@20230505-0001 mongodb]# ./bin/mongo 127.0.0.1:27017/mydatabase -u myuser -p mypasswd
MongoDB shell version v3.6.23
connecting to: mongodb://127.0.0.1:27017/stockdetail?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("a85bc47f-2d10-4909-b299-926c9f8fe6b5") }
MongoDB server version: 3.6.23
> show collections;
mytabl
stock_detail //当导入的集合
从上面可以看书数据导入正常