본문 바로가기
Database/MongoDB

[MongoDB] Ubuntu MongoDB(몽고DB) 설치˙설정˙데이터베이스 및 사용자 생성˙완전삭제 하기

by 검은냥냥이 2023. 5. 27.

MongoDB 설치

sudo apt update
sudo apt install -y wget curl gnupg2 software-properties-common apt-transport-https ca-certificates lsb-release

종속성 설치

# ubuntu 24.04
curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | \
   sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg \
   --dearmor
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
sudo apt update
sudo apt install mongodb-org

# ubuntu 22.04
curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc|sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/mongodb-7.gpg
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu $(lsb_release -cs)/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.0g-2ubuntu4_amd64.deb
sudo dpkg -i ./libssl1.1_1.1.0g-2ubuntu4_amd64.deb
sudo apt update
sudo apt install -y mongodb-org

# ubuntu 20.04 / 18.04
curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc|sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/mongodb-7.gpg
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu $(lsb_release -cs)/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
sudo apt update
sudo apt install -y mongodb-org

현재 Stable Version인 7.0 설치 (특정 버전 설치가 필요한 경우 아래의 링크를 통해 확인 후 변경 설치)

 

Release Notes — MongoDB Manual

 

www.mongodb.com

 

MongoDB 설치

mongod --version

ubuntu mongod --version

설치된 버전확인

 

MongoDB 실행

sudo systemctl enable --now mongod

재부팅시 서비스 자동 실행

# 서비스 실행
sudo service mongod start
# 서비스 상태
sudo service mongod status
# 서비스 멈춤
sudo service mongod stop
# 서비스 재시작
sudo service mongod restart

그외 상태값 확인

 

MongoDB 여러번 설치 후 삭제시 서비스 실행이 안될때

ubuntu mongod start error

/var/log/mongodb/mongod.log

mongod 서비스 로그 확인

{"t":{"$date":"2023-05-27T10:50:32.377+00:00"},"s":"E",  "c":"NETWORK",  "id":23024,   "ctx":"initandlisten","msg":"Failed to unlink socket file","attr":{"path":"/tmp/mongodb-27017.sock","error":"Operation not permitted"}}

# 아래와 비슷한 문구가 있는지 확인
/tmp/mongodb-27017.sock

위와 비슷한 .sock 문구가 있는지 확인

sudo rm -rf /tmp/mongodb-27017.sock

# 서비스 실행
sodu service mongod start

위 파일을 수동으로 삭제 후 서비스 재실행

 

MongoDB 바인딩 수정 & 암호 인증 활성화

sudo vi /etc/mongod.conf

설정 파일 열기

net:
  port: 27017
  bindIp: 0.0.0.0

바인딩 아이피를 기존 127.0.0.1에서 0.0.0.0으로 변경

security:
  authorization: enabled

파일에서 security 부분 주석 해제 후 수정하기

이 기능이 활성화된 경우 사용자는 로그인하고 데이터베이스를 읽고 편집하려면 암호를 입력해야 합니다. 보통 프로덕트 환경일때 사용하시면 됩니다.

sudo service mongod restart

서비스 재시작

 

MongoDB 기본 데이터 경로 변경 (필요시)

sudo service mongod stop

서비스 멈춤

sudo mkdir -p /newdata/mongo
sudo chown -R mongodb:mongodb  /newdata/mongo

필요한 경로를 만들고 데이터를 저장할 수 있는 적절한 권한을 부여합니다.

sudo rsync -av /var/lib/mongodb  /newdata/mongo

이전 경로의 내용을 새 디렉터리에 복사해야 합니다.

sudo rsync -av /var/lib/mongodb  /newdata/mongo

그런 다음 이전 디렉터리의 이름을 백업 파일로 바꿉니다.

sudo mv /var/lib/mongodb /var/lib/mongodb.bak

이제 새 디렉터리에 대한 심볼릭 링크를 만듭니다.

sudo ln -s /newdata/mongo /var/lib/mongodb
sudo systemctl daemon-reload
sudo systemctl start mongod

MongoDB 서비스를 다시 시작합니다.

 

MongoDB 데이터베이스 연결 및 사용자 · 데이터베이스 생성

mongosh

ubuntu mongosh

MongoDB 연결

use admin

데이터베이스 스위칭

# 사용자 생성
db.createUser(
{
user: "아이디",
pwd: "비밀번호",
roles: [
      { role: 'userAdminAnyDatabase', db: 'admin' },
      { role: 'readWriteAnyDatabase', db: 'admin' }
    ],
}
)

권한을 부여한 사용자 생성

권한 설명
userAdminAnyDatabase 이 역할은 모든 데이터베이스에 대한 사용자 관리 권한을 제공합니다. 사용자 생성, 수정, 삭제 등의 작업을 수행할 수 있습니다. 해당 역할을 가진 사용자는 모든 데이터베이스의 사용자 관리 작업을 수행할 수 있습니다.
readWriteAnyDatabase 이 역할은 모든 데이터베이스에 대한 읽기 및 쓰기 권한을 제공합니다. 해당 역할을 가진 사용자는 모든 데이터베이스에서 문서를 읽고 쓸 수 있습니다.

 

db.updateUser("아이디", {
  roles: [
      { role: 'userAdminAnyDatabase', db: 'admin' },
      { role: 'readWriteAnyDatabase', db: 'admin' }
    ],
  pwd: "비밀번호"
})

or

db.updateUser("아이디", {
  roles:[ { role: 'root', db: 'admin' } ],
  pwd: "비밀번호"
})

사용자 수정 (role 권한은 관리자)

db.dropUser("아이디")

사용자 삭제

명령어 설명
show dbs 사용 가능한 데이터베이스를 확인할 수 있습니다.
db.stats() 현재 데이터베이스의 통계 정보를 표시합니다. 데이터베이스 크기, 컬렉션 수 등을 확인할 수 있습니다.
use <switch> MongoDB에서 관리자 데이터베이스에 접근하기 위한 명령
만약, 아래와 같이 하는 경우 user라는 데이터베이스를 생성 후 접근하게 된다.
EX) use user
show databases 현재 MongoDB 인스턴스에 있는 모든 데이터베이스의 목록을 표시합니다.
db.dropDatabase() 현재 데이터베이스를 삭제합니다. 이 명령어를 실행하기 전에 데이터베이스를 선택해야 합니다.
show users 현재 데이터베이스에 등록된 사용자 계정의 목록이 출력됩니다. 각 사용자 계정은 사용자 이름, 소속 데이터베이스, 역할 등의 정보를 포함합니다.
show collections 컬렉션 목록을 확인합니다.
db.collection.drop() 지정한 컬렉션을 삭제합니다.

그외 명령어

mongosh -u 아이디 -p --authenticationDatabase 데이터베이스명

위에서 생성한 데이터베이스와 사용자로 자격 증명으로 셸에 로그인하여 사용자가 생성되었는지 확인합니다.

 

MongoDB 권한 생성 및 특정 테이블 권한만 부여

먼저, `use test` 형태의 명령어로 데이터베이스 스위칭을 해주셔야 합니다. 스위칭 하지 않으면 아래에 권한을 생성할때 `db: "test(데이터 베이스 이름)"` 이부분에서 다른 `db`를 지정해도 스위칭한 데이터베이스로 입력됩니다.

db.createUser({
  user: "아이디",
  pwd: "비밀번호",
  roles: []
})

권한이 없는 유저 생성

 

db.createRole({
  role: "testRole(권한이름)",
  privileges: [
    {
      resource: { db: "test(데이터 베이스 이름)", collection: "" },
      actions: ["find", "insert", "update", "remove"]
    }
  ],
  roles: []
})

권한 생성 (이 역할은 "readWrite" 권한만 가지도록 설정할 수 있습니다.)

 

db.createRole({
  role: "testRole(권한이름)",
  privileges: [
    {
      resource: { db: "test(데이터 베이스 이름)", collection: "documents" },
      actions: ["find", "insert", "update", "remove"]
    }
  ],
  roles: []
})

만약, 특정 컬렉션만 부여하고 싶은 경우

위의 권한의 경우는 `test` 데이터베이스에 `documents`의 컬렉션만 접근 관리가 가능함

 

db.getRoles()

생성된 권한 확인

 

db.grantRolesToUser("아이디", [{ role: "testRole(권한이름)", db: "test(데이터 베이스 이름)" }])

특정 사용자에게 권한 부여

 

db.dropRole("testRole(권한이름)")

업데이트는 없어서 권한 삭제

 

MongoDB 완전삭제

sudo service mongod stop

서비스 중단

sudo apt remove mongodb-org*
sudo apt remove mongodb*

패키지 삭제

sudo apt -y autoremove

남은 패키지 삭제

sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongodb

데이터 및 로그 삭제

sudo apt list --installed | grep mongo

mongo로 설치된 패키지 확인

728x90
사업자 정보 표시
레플라 | 홍대기 | 경기도 부천시 부일로 519 화신오피스텔 1404호 | 사업자 등록번호 : 726-04-01977 | TEL : 070-8800-6071 | Mail : support@reafla.co.kr | 통신판매신고번호 : 호 | 사이버몰의 이용약관 바로가기

'Database > MongoDB' 카테고리의 다른 글

[MongoDB] 데이터베이스 백업 및 복구 가이드  (0) 2024.08.08