编译和部署Mongodb5.0.5的arm64版本

MongoDB源码编译

准备安装包

下载地址Release r5.0.5 · mongodb/mongo (github.com)

选择版本


上传/opt/package

解压mongo-r5.0.5.tar.gz

tar -zxvf /opt/package/mongo-r5.0.5.tar.gz -C /opt/package

查看构建文档 /opt/package/mongo-r5.0.5/docs/building.md

编译条件

所以编译MongoDB前需要满足上面的条件

安装gcc

下载地址gcc-9.5.0.tar.gz

上传/opt/package

解压gcc-9.5.0.tar.gz

tar -zxvf /opt/package/gcc-9.5.0.tar.gz -C /opt/package

安装依赖

# 安装依赖
yum -y install bzip2 wget
# 进入gcc-9.5.0目录
cd /opt/package/gcc-9.5.0
# 在解压根目录中执行
./contrib/download_prerequisites

编译

# 创建编译目录
cd ../ && mkdir gcc-build-9.5.0 && cd gcc-build-9.5.0
# 配置
../gcc-9.5.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
# 用32核心编译
# 需要等待很久,视机器性能而定
make -j32
# 安装
make install
# 切换gcc到新版本
update-alternatives --install /usr/bin/gcc gcc /opt/gcc-5.3.0/gcc-5.3.0

升级Python

因为centos7用yum安装的python3版本是3.6.8(估计是这个系统的yum源没更新适配),我们需要升级到3.7.x版本

下载源码地址找到3.7版本: Python Source Releases | Python.org

请添加图片描述

解压后切换到解压包目录,进行预编译 -> 编译 -> 编译安装

# 安装依赖

yum groupinstall -y "Development tools"
yum install -y openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel

# 预编译,设置安装目录为/usr/local/python3。安装目录可以自定义

./configure --prefix=/usr/local/python3

# 编译。因为CPU8核,所以设置-j8加快编译速度

make -j8

# 编译安装

make install -j8

安装Python模块

# 安装 scons
pip3 install scons
# 安装环境
yum install python3-devel
# 安装Python模块
python3 -m pip install -r /opt/package/mongo-r5.0.5/etc/pip/compile-requirements.txt

编译安装

python3 buildscripts/scons.py DESTDIR=/opt/software/mongodb install-core MONGO_VERSION=5.0.5
编译过程报错
In function 'char* strncpy(char*, const char*, size_t)',
inlined from 'mongo::mozjs::JSStringWrapper::JSStringWrapper(int32_t)' at src/mongo/scripting/mozjs/jsstringwrapper.cpp:48:12:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:106:34: error: 'char* __builtin_strncpy(char*, const char*, long unsigned int)' specified bound 64 equals destination size [-Werror=stringop-truncation]
106 | return _builtin_strncpy_chk (dest, __src, __len, __bos (_dest));

在这里插入图片描述
方法1:

后来发现官方的构建文档也有说明

在这里插入图片描述

要忽略这个警告可以加上–disable-warnings-as-errors 这个参数

方法2:需要修改mongo的代码,估计是这个版本官方的一个bug,在mongo源码目录下

vi src/mongo/scripting/mozjs/jsstringwrapper.cpp

# 找到48行删除,添加两行

    strncpy(_buf, formatted.c_str(), sizeof(_buf) - 1);
    _buf[sizeof(_buf) - 1] = '\0';

在这里插入图片描述

修改之后的代码如下:
在这里插入图片描述

配置Mongdb

上面我们加了DESTDIR=/opt/software/mongodb,构建好的mongodb就在这个目录下了

设置环境变量

编辑 /etc/profile

vim /etc/profile

在末尾添加内容

#MongoDB Env
export MONGODB_HOME=/opt/software/mongodb
export PATH=$PATH:$MONGODB_HOME/bin

立即生效

source /etc/profile

创建文件夹

创建数据库文件夹

mkdir -p /mnt/data/mongodb/db

创建日志文件夹

mkdir -p /mnt/data/mongodb/logs

修改配置文件

创建配置文件mongodb.conf

文件路径:/opt/software/mongodb/bin/mongodb.conf

vim /opt/software/mongodb/bin/mongodb.conf
dbpath = /mnt/data/mongodb/db #数据文件存放目录
logpath = /mnt/data/mongodb/logs/mongod.log #日志文件存放目录
journal=false
auth=true
# bind_ip_all = true                 # 任何机器可以连接
# bind_ip = 127.0.0.1,192.168.0.3     # 本机和192.168.0.3可以访问
bind_ip = 0.0.0.0
port = 27017                        # 实例运行在27017端口(默认)
logappend = true                   # 启动时 添加还是重写日志文件
fork = true                         # 是否后台运行

清理压缩生成的mongo文件

linux中的strip命令简介------给文件脱衣服
本来生成的文件大小都是GB级别
在这里插入图片描述
使用strip命令清理mongodb/bin下的三个文件
在这里插入图片描述
瞬间变成几十M!!!

启动MongoDB

启动

mongod -f /opt/software/mongodb/bin/mongodb.conf

启动过程报错

在这里插入图片描述
这是因为链接的libstdc++版本有点低

strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
在这里插入图片描述
在上面a安装gcc的路径搜索

find ./ -name libstdc++.so.6*

在这里插入图片描述

拷贝到/usr/lib64路径下

cp ./aarch64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.28 /lib64/

# 把原来的软链接删除
mv /lib64/libstdc++.so.6 /lib64/libstdc++.so.6_back

# 创建新的软链接
ln -s /lib64/libstdc++.so.6.0.28 /lib64/libstdc++.so.6

再次使用命令启动就行啦!!!

登录网址

192.168.0.151:27017

有以下内容表示MongoDB启动成功
在这里插入图片描述

创建超级用户

MongoDB 没有无敌用户root,只有能管理用户的用户 userAdminAnyDatabase

连接mongoDB服务器端

mongo

在这里插入图片描述

进入admin数据库

use admin

创建用户

用户权限列表:

Read:允许用户读取指定数据库。

readWrite:允许用户读写指定数据库。

dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile。

userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户。

clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。

readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限。

readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限。

userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限。

dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。

root:只在admin数据库中可用,超级账号,超级权限。

模板:

db.createUser({
     user:用户名,
     pwd:密码, 
     roles:[
      { role:权限类型, db:可访问的db}]
})

例:

创建超级用户

db.createUser({
       user: "root",
       pwd: "root_123",
       roles: [ { role: "root", db: "admin" } ]
      })

创建数据库

连接MongoDB

指定用户进入MongoDB: mongo admin -u 用户名 -p 密码

mongo admin -u root -p
Enter password:
root_123
创建数据库
# 没有则会自动创建
use ga

访问MongoDB

用Navicat连接MongoDB

在这里插入图片描述

测试连接,能连接成功即可

操作MongoDB

启动MongoDB
mongod -f /opt/software/mongodb/etc/mongodb.conf
关闭MongoDB

使用超级用户登录MongoDB

mongo admin -u root -p
Enter password:
root_123

进入admin数据库

use admin

关闭MongoDB

db.shutdownServer();
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值