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 설치 (특정 버전 설치가 필요한 경우 아래의 링크를 통해 확인 후 변경 설치)
MongoDB 설치
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 여러번 설치 후 삭제시 서비스 실행이 안될때
/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
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로 설치된 패키지 확인
'Database > MongoDB' 카테고리의 다른 글
[MongoDB] 데이터베이스 백업 및 복구 가이드 (0) | 2024.08.08 |
---|