整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

在 Linux 上配置 mongodb

在 Linux 上配置 mongodb

ongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

1.下载Linux安装包

如下图,放到本地的某个角落,要记得位置哦~

2.连接你的服务器

ssh root@你的IP //回车输入密码 

3.安装包上传

另开ssh窗口(command+n),如果是windows就打开新的cmd窗口,因为我们要操作本地文件,之前的窗口我们已经登了服务器了。传的方法很多,我只演示其中一种。
cd "安装包所在文件夹" // 去你刚才安装包放的位置
scp "本地文件" root@你的IP // 回车输入密码开始传送

如下图,我是传送到服务器的根目录下。其实不建议,你可以放在一个固有目录,比如/usr/local


ls -l //以列表的形式展开,我们可以看到已经下载成功了。

4.解压安装包

tar -zxvf mongodb-linux-x86_64-3.4.6.tgz //解压 不同文件有不同的解压命令,自己百度即可

5.填坑的一步

刚才说大家可以把每次安装的东东放到固定的文件夹,所以我把解压好的文件移到了 /usr/local/mongodb目录了,如果你已经放到了你喜欢的位置,可以跳过此步骤。如果你不知道怎么移,可以看下。
cd /user/local //进入local
mkdir mongodb //创建mongodb文件夹
cd / //进入根目录
mv mongodb-linux-x86_64-3.4.6 /usr/local/mongodb /*将刚才的解压包移入 /usr/local/mongodb*/

6.配置mongodb运行环境

mkdir data //创建data文件夹,存放数据库db文件  
mkdir logs //创建logs文件夹,存放日志文件  
cd logs //进入logs  
touch mongo.log //创建log文件  
cd .. //返回上一级  
mkdir etc //创建配置文件夹  
cd etc // 进入etc  
vim mongo.conf //编辑同时创建mongo.conf 文件

以下是mongo.conf文件里的代码,大家看好不要写错,进入文件之后要按一下键盘i才能开始编写代码。

dbpath=/usr/local/mongodb/data //路径一定要输入绝对的  
logpath=/usr/local/mongodb/logs/mongo.log //路径一定要输入绝对的  
logappend=true  
journal=true  
quiet=true  
port=27017 //端口

写好了按esc键退出,然后按shift+:会在最下面出现:然后输入wq,保存并退出的意思。


到了这一步就接近尾声了。

7.启动mongodb

cd mongodb/mongodb-linux-x86_64-3.4.6/bin //进入安装包的bin目录下 
mongod -f /usr/local/mongodb/etc/mongo.conf  //启动1方法  或 ./mongod -f /usr/local/mongodb/etc/mongo.conf  //启动2方法  

如果输入这个命令,出现如下图,没什么变化,只有光标闪烁。

8.本地测试是否成功

我用的可视化工具 Robo 3t,新建链接,address输入服务器地址,端口填你mongo.conf里配置的,基本都是27027。


点击保存,如下图操作,进行 Connect。


如果到了这一步基本就是成功啦。

9.小坑警示

我之前在mongo.conf 里 路径写的是相对的,就出现了下面的问题。

然后就是这样子的。

10.总结

方法有很多,我写的只是其中一种,自己也是第一次安装。其中也有点坑坑,遇到问题不要认输,总会解决的,写的不对不好的地方,希望大家不吝赐教~

本文地址:https://www.linuxprobe.com/linux-mongodb.html

.什么mongodb?

MongoDB 是一个基于分布式文件存储的数据库,由 C++ 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。 MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

2、MongoDB 概念

2.1、数据库

MongoDB 的单个实例可以容纳多个独立的数据库,每个数据库都有自己的集合和权限。 数据库通过名字来标识;数据库名为 UTF-8 字符串,需满足以下条件:

  • 不能是空字符串("")。
  • 不得含有 ' '(空格)、.、$、/、\ 和 >不得含有 ' '(空格)、.、$、/、\ 和 \0 (空字符)。< (空字符)。
  • 应全部小写。
  • 最多 64 字节。

内置数据库:

  • admin:管理数据库。将一个用户添加到这个数据库,则这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如关闭服务器。
  • local:这个数据永远不会被复制,可以用来存储限于本地单台服务器的集合。
  • config:当 MongoDB 使用分片时,config 数据库用于保存分片的相关信息。

2.2、文档(Document)

文档是一组键值(key-value)对(即 BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。一个简单的文档例子如下:

{"name":"李白", "age":30}

文档有如下特性:

  1. 文档中的键/值对是有序的。
  2. 文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。
  3. MongoDB 区分类型和大小写。
  4. MongoDB 的文档不能有重复的键。
  5. 文档的键是字符串。除了少数例外情况,键可以使用任意 UTF-8 字符。

文档键命名规范:

  • 键不能含有>键不能含有\0 (空字符)。这个字符用来表示键的结尾。< (空字符)。这个字符用来表示键的结尾。
  • .和$有特别的意义,只有在特定环境下才能使用。
  • 以下划线"_"开头的键是保留的(不是严格要求的)。

2.3、集合

集合就是文档组,类似于关系数据库中的表。集合没有固定的结构,可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。 比如,我们可以将以下不同数据结构的文档插入到同一集合中:

{"name":"杜甫", "age":29}
{"name":"李白", "age":30}
{"name":"白居易", "age":31, "height":175}

集合名的命名规范:

  • 集合名不能是空字符串""。
  • 集合名不能含有>集合名不能含有\0字符(空字符),这个字符表示集合名的结尾。<>
  • 集合名字不能含有保留字符;集合名中不要有$。

Capped collections 是固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。和标准的集合不同,你必须要显式的创建一个 capped collection,指定一个集合的大小,单位是字节。固定集合的数据存储空间值提前分配的。固定集合不能删除一个文档,可以使用 drop() 方法删除整个集合。

2.4、MondoDB 和 RDBMS 的对比

RDBMS 术语/概念

MongoDB 术语/概念

解释/说明

database

database

数据库

table

collection

数据库表/集合

row

document

数据记录行/文档

column

field

数据字段/域

index

index

索引

table joins

$lookup


primary key

primary key

主键,MongoDB 自动将 _id 字段设置为主键

transaction

transaction


group by

aggregation


3.如何部署

mongodb有三种部署模式

  • Replica Set(副本集)
  • Sharded Cluster(分片)
  • Standalone MongoDB Instance(测试学习用)

实验目标

在k8s里面部署mongodb副本集

克隆项目

git clone https://github.com/mongodb/mongodb-enterprise-kubernetes.git

create namespace

kubectl create namespace mongodb

Create CustomResourceDefinitions

kubectl apply -f crds.yaml -n namespace

install the Operator

kubectl apply -f mongodb-enterprise.yaml  -n namespace

Projects

A Project object is a Kubernetes ConfigMap that points to an Ops Manager installation and a Project. This ConfigMap has the following structure:

$ cat my-project.yaml
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: my-project
  namespace: mongodb
data:
  projectName: myProjectName # this is an optional parameter
  orgId: 5b890e0feacf0b76ff3e7183 # this is an optional parameter
  baseUrl: https://my-ops-manager-or-cloud-manager-url

Apply this file to create the new Project:

kubectl apply -f my-project.yaml -n middleware

Credentials

kubectl -n mongodb create secret generic my-credentials --from-literal="user=my-public-api-key" --from-literal="publicApiKey=my-private-api-key" -n middleware

Creating a MongoDB Resource

kubectl apply -f samples/mongodb/minimal/replica-set.yaml -n mongodb

Create Admin Credentials Secret

kubectl create secret generic ops-manager-admin-secret  --from-literal=Username="user.name@example.com" --from-literal=Password="Passw0rd."  --from-literal=FirstName="User" --from-literal=LastName="Name" -n <namespace>

Create MongoDBOpsManager Resource

kubectl apply -f samples/ops-manager/ops-manager-external.yaml -n <namespace>

4.验证

为了从 Kubernetes 集群外部访问 Ops Manager UI,您必须在 Ops Manager 资源定义中启用 spec.externalConnectivity。最简单的方法是配置 LoadBalancer 服务类型。

测试Ops Manager UI

您将能够从 Operator 创建的 Service 对象中获取用于连接到 Ops Manager UI 的 URL。

访问http//:{节点ip}:31147

用户名和密码是前面创建的

测试mongodb连接

MongoDB Connection String:

mongodb://redacted-credentials@ops-manager-external-db-0.ops-manager-external-db-svc.middleware.svc.cluster.local:27017,ops-manager-external-db-1.ops-manager-external-db-svc.middleware.svc.cluster.local:27017,ops-manager-external-db-2.ops-manager-external-db-svc.middleware.svc.cluster.local:27017/?authMechanism=SCRAM-SHA-256&authSource=admin&connectTimeoutMS=20000&replicaSet=ops-manager-external-db&serverSelectionTimeoutMS=20000

用mongo compass客户端工具测试,可以登录

5.引用

  • https://www.mongodb.com/docs/kubernetes-operator/current/tutorial/deploy-replica-set/
  • http://www.liuhaihua.cn/archives/710761.html

所周知,NodeJS是一个基于Chrome V8 JavaScript引擎的运行时环境,用于服务器端和网络应用程序。并且它是支持跨平台的开放资源。NodeJS应用程序用纯JavaScript编写。

使用Node JS上传文件或图像到服务器

背景

几年前,如果你需要上传任何文件或图像到服务器,那么你得完全依赖于服务器端语言如C#和PHP。在JS革命之后,一切都改变了。今天我将告诉你如何使用NodeJS上传文件到服务器,甚至不需要写一行服务器端代码。希望你会喜欢。

创建空白的Node JS Web应用程序

在package.json中设置依赖关系

开始之前,我们首先要设置我们的依赖关系。为此,请打开package.json文件并粘贴代码。

{ "name": "node_js_file_upload", "version": "0.0.1", "description": "Node_JS_File_Upload", "main": "server.js", "dependencies": { "body-parser": "^1.15.2", "express": "^4.14.0", "multer": "^1.2.0"}, "author": { "name": "Sibeesh"}}

现在,运行NPM install命令,如下所示。

npm install

运行该命令后,可以看到解决方案中安装了依赖关系。

现在我们可以理解这些依赖关系是用来干什么的了。

express

根据Express Team,Express是一个极小且灵活的Node.js Web应用程序框架,为Web和移动应用程序提供了一组强大的功能。Express提供了基本Web应用程序功能的一个薄层,不会掩盖你知道和喜欢的Node.js功能。你可以随时在 这里 了解更多关于Express Package的信息。

multer

Multer是一个用于处理multipart / form-data的node.js中间件,主要用于上传文件。它构建在busboy基础上以提高效率。点击 这里 阅读更多关于multer包。

开始使用依赖关系

你可以按如下所示创建依赖关系的实例。

var Express=require('express');var multer=require('multer');var bodyParser=require('body-parser');var app=Express();app.use(bodyParser.json());

然后,创建说明应该在哪里以及如何保存文件/图像的storage。

var Storage=multer.diskStorage({ destination: function (req, file, callback) {callback(null, "./Images");}, filename: function (req, file, callback) {callback(null, file.fieldname + "_" + Date.now() + "_" + file.originalname);}});

每个文件包含以下信息:

fieldname:在窗体中指定的字段名

originalname:用户计算机上文件的名称

encoding:文件的编码类型

mimetype:文件的MIME类型

size:文件的大小(以字节为单位)

destination:保存文件的文件夹

filename:目标文件的名称

path:上传文件的完整路径

buffer:整个文件的Buffer

现在请创建multer对象如下。

var upload=multer({ storage: Storage }).array("imgUploader", 3); //Field name and max count

这里multer接受我们在上一步中创建的storage作为参数。函数

array(fieldname[, maxCount])

接受文件数组,所有文件名都为fieldname。

现在我们该写post和get请求了:

app.get("/", function (req, res) {res.sendFile(__dirname + "/index.html");});app.post("/api/Upload", function (req, res) {upload(req, res, function (err) { if (err) { return res.end("Something went wrong!");} return res.end("File uploaded sucessfully!.");});});

这里/ api / Upload是我们将要设置的操作名称,在我们马上就会创建的HTML页面上。最后,但并非最不重要的是,我们需要确保应用程序正在侦听我们的特定端口,在本例下,为port 2000。

app.listen(2000, function (a) { console.log("Listening to port 2000");});

创建HTML页面并设置上传

你可以使用jquery-3.1.1.min.js和jquery.form.min.js的引用创建如下所示的页面。

<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head><meta charset="utf-8" /><title>Upload images to server using Node JS</title><script src="Scripts/jquery-3.1.1.min.js"></script><script src="Scripts/jquery.form.min.js"></script></head><body><form id="frmUploader" enctype="multipart/form-data" action="api/Upload/" method="post"><input type="file" name="imgUploader" multiple /><input type="submit" name="submit" id="btnSubmit" value="Upload" /></form></body></html>

请注意,用于表单的ecctype必须是multipart / form-data,操作必须与我们在API中设置的相同。

创建Ajax提交事件

现在创建ajax事件,在事件中我们将调用我们的API。

<script> $(document).ready(function () { var options={ beforeSubmit: showRequest, // pre-submit callback success: showResponse // post-submit callback }; // bind to the form's submit event $('#frmUploader').submit(function () { $(this).ajaxSubmit(options); // always return false to prevent standard browser submit and page navigation return false; }); }); // pre-submit callback function showRequest(formData, jqForm, options) { alert('Uploading is starting.'); return true; } // post-submit callback function showResponse(responseText, statusText, xhr, $form) { alert('status: ' + statusText + '\n\nresponseText: \n' + responseText ); } </script>

ajaxSubmit函数是插件jquery.form.min.js的一部分,因此请确保你已经包含它。

运行应用程序

现在请运行你的应用程序。在运行应用程序之前,你总是可以将脚本文件设置为启动文件,要设置的话就右键单击项目并单击属性。

现在你可以打开命令提示符,你可以在命令提示符处手动定位项目,也可以使用“Open command prompt here”选项。要选择的话,请右键单击你的项目并选择如下选项。

现在在命令提示符中键入node server.js,这将确保你的服务器正在运行。如果一切ok的话,你可以看到如下窗口。

现在我们可以运行我们的网页,因为服务器已经准备就绪,请访问浏览器并输入网址http://localhost:2000。使用我们创建的文件上传器选择几个文件。

如果单击提交,你可以看到我们正在调用我们的方法操作,并且文件已上传。

你总是可以下载附带的源代码以查看完整的代码和应用程序。编码快乐!

结论

欢迎给出你宝贵的建议和反馈。

本文由华宇互联旗下领先品牌乐橙谷提供!