Mengubah direktori penyimpanan data MongoDB

184

Sampai sekarang saya belum menentukan direktori data MongoDB dan hanya memiliki satu partisi primer 30 GB.

Saya baru saja kehabisan ruang dan menambahkan hard disk baru. Bagaimana saya bisa mentransfer data saya (yang tampaknya dalam /var/lib/mongodb/) dan mengkonfigurasi MongoDB sehingga semuanya berjalan dari disk baru tanpa mempengaruhi instalasi saya yang ada?

Mark Gill
sumber
Anda juga harus memastikan izin Anda pada titik mount baru memiliki r + x: sudo chmod o+rx /mediamisalnya jika titik mount Anda media. R + x harus tersedia untuk grup dan pengguna 'lain' dari titik mount pertama.
kata

Jawaban:

219

Jawaban singkatnya adalah bahwa --dbpathparameter dalam MongoDB akan memungkinkan Anda untuk mengontrol darimana MongoDB membaca dan menulis datanya.

mongod --dbpath / usr / local / mongodb-data

Akan mulai mongodb dan memasukkan file /usr/local/mongodb-data.

Bergantung pada distribusi dan instalasi MongoDB Anda, Anda juga dapat mengonfigurasi mongod.conffile untuk melakukan ini secara otomatis:

# Store data in /usr/local/var/mongodb instead of the default /data/db
dbpath = /usr/local/var/mongodb

Paket 10gen Linux resmi ( Ubuntu / Debian atau CentOS / Fedora ) dikirimkan dengan file konfigurasi dasar yang diletakkan di dalamnya /etc/mongodb.conf, dan layanan MongoDB membacanya saat dijalankan. Anda bisa membuat perubahan di sini.

Brendan W. McAdams
sumber
9
Pada debian saya kotak mongodb.conf itu, tidak mongod.conf
UpTheCreek
12
Saya memperbarui /etc/mongodb.confper solusi ini. Kemudian, setelah memulai mongod, saya melihat /data/dbitu digunakan. Mengapa memperbarui mongodb.conf tidak memengaruhi tempat mongod menyimpan db? (Perhatikan bahwa menggunakan --dbpathargumen berhasil.
Kevin Meredith
Di kotak Fedora saya /etc/mongodb.confdan memperbarui yang berfungsi dengan baik untuk saya.
tuxdna
4
Direktori data baru haruslah chownmilik pengguna mongod untuk skrip mulai layanan.
Pete Garafano
bagaimana saya melakukan chown?
chovy
102

Diselesaikan dalam 2 menit downtime :)
Gerakkan folder Anda, tambahkan symlink, lalu tune izin.

sudo service mongod stop
sudo mv mongodb /new/disk/mongodb/
sudo ln -s /new/disk/mongodb/ /var/lib/mongodb
sudo chown mongodb:mongodb /new/disk/mongodb/
sudo service mongod start

# test if mongodb user can access new location:
sudo -u mongodb -s cd /new/disk/mongodb/
# resolve other permissions issues if necessary
sudo usermod -a -G <newdisk_grp> mongodb
DmitrySandalov
sumber
3
Saya pikir ini harus menjadi jawabannya. Saya selalu menemukan tautan simbolis untuk menjadi solusi yang sangat baik dan saya mempromosikan solusi apa pun yang menggunakannya untuk mengubah konfigurasi dll.
guy mograbi
Mungkin tidak perlu usermod. Anda melewatkan izin + x yang dapat dieksekusi untuk pengguna "lain" di pohon dbpath chmod -R o+x /<home>. lihat: stackoverflow.com/a/38193187/205049
oori
Saya mengikuti petunjuk ini (menggunakan dbpath di disk lain), saya masih mendapatkan Permission denied: "/var/lib/mongodb"Ini adalah bagaimana / home / ../mongodb/mongodb/ terlihat seperti: drwxrwxr-x 3 mongodb mongodb 4096 oct 13 09:32 ../ drwxr-xr-x 2 mongodb nogroup 4096 oct 13 09:29 journal/ -rw------x 1 mongodb nogroup 67108864 sep 23 14:44 local.0* -rw------x 1 mongodb nogroup 16777216 sep 23 14:44 local.ns* -rwxr-xr-x 1 mongodb mongodb 0 oct 13 09:29 mongod.lock*
Machinerium
1
perlu klarifikasi ke mana ke folder mana Anda berada saat menjalankan mvperintah, jika Anda menjalankan perintah mv dari dalam lib, Anda tidak lagi memiliki mongodb lnuntuk
Andy
1
Saya telah mencoba solusi Anda tetapi ketika saya me-restart aplikasi itu memberikan kesalahan berikut - 2019-11-18T18: 58: 45.215 + 1100 I STORAGE [initandlisten] pengecualian di initAndListen: 28596 Tidak dapat menentukan status file kunci di direktori data / var / lib / mongo: boost :: filesystem :: status: Izin ditolak: "/var/lib/mongo/mongod.lock", terminating
Arun chauhan
33

Perintah berikut akan bekerja untuk Anda, jika Anda ingin mengubah jalur default. Cukup ketik ini di direktori bin mongodb.

mongod --dbpath=yourdirectory\data\db

Jika Anda ingin memindahkan data yang ada juga, maka cukup salin semua folder dari direktori data yang ada \ db ke direktori baru sebelum Anda menjalankan perintah.

Dan juga menghentikan layanan mongodb yang ada yang sedang berjalan.

Yogesh Sanchihar
sumber
1
Ini bekerja di Linux juga. Saya telah membuat direktori bernama "data" di sebelah skrip mondod dan menjalankannya seperti ini: ./mongod --dbpath = data
cagdasalagoz
29

Buat file bernama mongod.cfg di folder MongoDB jika Anda tidak memilikinya. Dalam kasus saya: C: \ Users \ ivanbtrujillo \ MongoDB

Kemudian, edit mongod.cfg dengan notepad dan tambahkan baris dengan yang berikut (dbpath khusus kami):

dbpath=C:\Users\ivanbtrujillo\MongoDB\data\db

Dalam file ini Anda juga harus menentukan logpath. File mongod.cfg saya adalah:

logpath=C:\Users\ivanbtrujillo\MongoDB\log\mongo.log
dbpath=C:\Users\ivanbtrujillo\MongoDB\data\db

Jika Anda menggunakan mongoDB sebagai layanan windows, Anda harus mengubah kunci ini dan menentukan file mongod.cfg.

Untuk menginstal mongodb sebagai layanan windows jalankan perintah ini:

**"C:\Users\ivanbtrujillo\MongoDB\bin\mongod.exe" --config "C:\Users\ivanbtrujillo\MongoDB\mongod.cfg" install**

Buka regedit.exe dan pergi ke rute berikut:

HKEYLOCALMACHINE\SYSTEM\CurrentControlSet\services\MongoDB

Layanan MongoDB tidak berfungsi, kita harus mengedit kunci ImagePath, menghapus kontennya dan meletakkan yang berikut ini:

**"C:\Users\ivanbtrujillo\MongoDB\bin\mongod.exe" --config "C:\Users\ivanbtrujillo\MongoDB\mongod.cfg" 
--logpath="C:\Users\ivanbtrujillo\MongoDB\log\mongo.log" service**

Kami menunjukkan ke mongo file konfigurasi dan logpath-nya.

Kemudian ketika Anda init layanan mongodb, itu berfungsi.

Berikut ini adalah tutorial lengkap untuk menginstal mongoDB di windows: http://ivanbtrujillo.herokuapp.com/2014/07/24/installing-mongodb-as-a-service-windows/

Semoga ini bisa membantu,

ivanbtrujillo
sumber
1
MongoDB 2.6 dan yang lebih baru menggunakan file konfigurasi YAML. Format lama masih didukung untuk kompatibilitas mundur, tetapi Anda mungkin ingin menggunakan yang baru. Detail di sini .
gronostaj
Variabel dbpath juga ada untuk linux. Lihat di /etc/mongod.conf.
xpros
23

Salin konten /var/lib/mongodbke /data/db. File yang seharusnya Anda cari harus memiliki nama seperti your_db_name.nsdan di your_dbname.nmana nangka dimulai dengan 0. Jika Anda tidak melihat file seperti itu /var/lib/mongodb, cari di sistem file Anda.

Setelah disalin, gunakan --dbpath=/data/dbketika memulai MongoDB melalui mongodperintah.

lobster1234
sumber
apakah ada cara untuk mewujudkan hal ini setiap kali server restart?
user4951
1
@ Jim, Anda dapat menambahkan sakelar ini ke skrip shell yang memulai mongodb. Biasanya itu adalah /etc/init.d/mongod atau /etc/init.d/mongodb.
lobster1234
19

Inilah yang saya lakukan, semoga bermanfaat bagi orang lain:

Langkah:

  1. Hentikan layanan Anda yang menggunakan mongodb
  2. Stop mongod - cara saya melakukan ini adalah dengan file rc saya /etc/rc.d/rc.mongod stop, jika Anda menggunakan sesuatu yang lain, seperti systemd Anda harus memeriksa dokumentasi Anda bagaimana melakukannya
  3. Buat direktori baru di harddisk baru -mkdir /mnt/database
  4. Pastikan mongodb memiliki hak istimewa untuk membaca / menulis dari direktori itu (biasanya chown mongodb:mongodb -R /mnt/database/mongodb) - terima kasih @DanailGabenski.
  5. Salin folder data mongodb Anda ke lokasi baru -cp -R /var/lib/mongodb/ /mnt/database/
  6. Hapus folder database lama -rm -rf /var/lib/mongodb/
  7. Buat tautan simbolis ke folder basis data baru -ln -s /mnt/database/mongodb /var/lib/mongodb
  8. Mulai mongod -/etc/rc.d/rc.mongod start
  9. Periksa log mongod Anda dan lakukan pengecekan kewarasan (coba mongosambungkan ke database Anda untuk melihat apakah semuanya baik-baik saja)
  10. Mulai layanan Anda yang Anda hentikan di poin 1

Tidak perlu mengatakan bahwa Anda harus berhati-hati ketika melakukan ini, terutama dengan rm -rftetapi saya pikir ini adalah cara terbaik untuk melakukannya.

Anda tidak boleh mencoba menyalin dir database saat mongod sedang berjalan, karena mungkin ada layanan yang menulis / membaca darinya yang akan mengubah konten database Anda.

drinchev
sumber
1
Meskipun jawaban yang lama, itu berhasil sebagian untuk saya. Anda juga perlu memastikan pengguna mongodb memiliki direktori baru dan symlik agar berfungsi. chown mongodb:mongodb -R /mnt/database/mongodb
Danail Gabenski
3
Pada poin 5, buat perintah agar terlihat seperti cp -rp / var / lib / mongodb / / mnt / database / Ini akan menjaga kepemilikan dan izin folder tetap utuh.
Ketan Ghumatkar
Saya telah mencoba solusi Anda tetapi ketika saya me-restart aplikasi itu memberikan kesalahan berikut - 2019-11-18T18: 58: 45.215 + 1100 I STORAGE [initandlisten] pengecualian di initAndListen: 28596 Tidak dapat menentukan status file kunci di direktori data / var / lib / mongo: boost :: filesystem :: status: Izin ditolak: "/var/lib/mongo/mongod.lock", terminating
Arun chauhan
10

Jika diinstal melalui apt-getUbuntu 12.04, jangan lupa chown -R mongodb:nogroup /path/to/new/directory. Juga, ubah konfigurasi di /etc/mongodb.conf.

Sebagai pengingat, mongodb-10genpaket sekarang dimulai melalui pemula, sehingga skrip konfigurasi masuk/etc/init/mongodb.conf

Saya baru saja melalui ini, semoga googler bermanfaat :)

Roberto
sumber
1

Bagi saya, pengguna itu mongodbukanmongodb

sudo chown mongod:mongod /newlocation

Anda dapat melihat log untuk kesalahan jika layanan gagal:

/var/log/mongodb/mongod.log

AKU P
sumber
0

Di debian / ubuntu, Anda harus mengedit skrip /etc/init.d/mongodb. Sungguh, file ini harus menarik pengaturan dari /etc/mongodb.conf tetapi sepertinya tidak menarik direktori default (mungkin bug)

Ini sedikit hack, tetapi menambahkan ini ke skrip membuatnya mulai dengan benar:

Menambahkan:

DBDIR=/database/mongodb

perubahan:

DAEMON_OPTS=${DAEMON_OPTS:-"--unixSocketPrefix=$RUNDIR --config $CONF run"}

untuk:

DAEMON_OPTS=${DAEMON_OPTS:-"--unixSocketPrefix=$RUNDIR --dbpath $DBDIR --config $CONF run"}
FGiorlando
sumber
bagaimana jika Anda ingin meletakkan database di direktori home Anda alih-alih root?
JesseBoyd