MongoDB Operation
Vận hành MongoDB
Cài đặt MongoDB
Windows
(1) Tải xuống và giải nén
Truy cập vào trang web chính thức để tải xuống MongoDB và chọn phiên bản phù hợp tại: Download MongoDB Community Server | MongoDB
(2) Tạo thư mục dữ liệu
MongoDB lưu trữ dữ liệu trong thư mục db. Tuy nhiên, thư mục này không được tự động tạo ra, chúng ta cần tạo nó sau khi cài đặt.
Ví dụ: D:\Tools\Server\mongodb\mongodb-4.4.0\data\db
(3) Chạy dịch vụ MongoDB
mongod --dbpath D:\Tools\Server\mongodb\mongodb-4.4.0\data\db
(4) Kết nối với MongoDB từ máy khách
Bạn có thể kết nối với MongoDB bằng cách chạy lệnh mongo.exe
trong cửa sổ dòng lệnh.
(5) Cấu hình dịch vụ MongoDB
Linux
(1) Cài đặt bằng gói cài đặt
Trước khi cài đặt, chúng ta cần cài đặt các gói phụ thuộc cho các nền tảng Linux.
Red Hat/CentOS:
sudo yum install libcurl openssl
Ubuntu 18.04 LTS ("Bionic")/Debian 10 "Buster":
sudo apt-get install libcurl4 openssl
Ubuntu 16.04 LTS ("Xenial")/Debian 9 "Stretch":
sudo apt-get install libcurl3 openssl
(2) Tạo thư mục dữ liệu
Mặc định, MongoDB sẽ khởi tạo hai thư mục sau khi khởi động:
- Thư mục lưu trữ dữ liệu: /var/lib/mongodb
- Thư mục ghi nhật ký: /var/log/mongodb
Trước khi khởi động, chúng ta có thể tạo hai thư mục này và đặt quyền đọc và ghi cho người dùng hiện tại:
sudo mkdir -p /var/lib/mongo
sudo mkdir -p /var/log/mongodb
sudo chown `whoami` /var/lib/mongo # Đặt quyền
sudo chown `whoami` /var/log/mongodb # Đặt quyền
(3) Chạy dịch vụ MongoDB
mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork
Mở tệp /var/log/mongodb/mongod.log và kiểm tra thông tin sau, nếu xuất hiện, điều đó có nghĩa là khởi động thành công.
# tail -10f /var/log/mongodb/mongod.log
2020-07-09T12:20:17.391+0800 I NETWORK [listener] Listening on /tmp/mongodb-27017.sock
2020-07-09T12:20:17.392+0800 I NETWORK [listener] Listening on 127.0.0.1
2020-07-09T12:20:17.392+0800 I NETWORK [listener] waiting for connections on port 27017
(4) Kết nối với MongoDB từ máy khách
cd /usr/local/mongodb4/bin
./mongo
Thiết lập tên người dùng và mật khẩu
> use admin
chuyển sang db admin
> db.createUser({"user":"root","pwd":"root","roles":[{"role":"userAdminAnyDatabase","db":"admin"}]})
Thêm người dùng thành công: {
"user" : "root",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
>
Sao lưu và khôi phục dữ liệu
Sao lưu dữ liệu
Trong MongoDB, chúng ta sử dụng lệnh mongodump
để sao lưu dữ liệu MongoDB. Lệnh này cho phép xuất tất cả dữ liệu vào một thư mục được chỉ định.
Cú pháp lệnh mongodump
như sau:
mongodump -h dbhost -d dbname -o dbdirectory
- -h: Địa chỉ máy chủ MongoDB, ví dụ: 127.0.0.1, cũng có thể chỉ định cổng: 127.0.0.1:27017.
- -d: Tên cơ sở dữ liệu cần sao lưu, ví dụ: test.
- -o: Đường dẫn lưu trữ dữ liệu sao lưu, ví dụ: c:\data\dump. Trước khi sao lưu, thư mục này cần được tạo trước. Sau khi sao lưu hoàn tất, MongoDB sẽ tự động tạo một thư mục test trong thư mục dump, chứa dữ liệu sao lưu của cơ sở dữ liệu đó.
Các tham số tùy chọn cho lệnh mongodump
như sau:
Cú pháp | Mô tả | Ví dụ |
---|---|---|
mongodump --host HOST_NAME --port PORT_NUMBER | Sao lưu toàn bộ dữ liệu MongoDB | mongodump --host runoob.com --port 27017 |
mongodump --dbpath DB_PATH --out BACKUP_DIRECTORY | mongodump --dbpath /data/db/ --out /data/backup/ | |
mongodump --collection COLLECTION --db DB_NAME | Sao lưu một bộ sưu tập cụ thể | mongodump --collection mycol --db test |
【Ví dụ】Sao lưu toàn bộ dữ liệu
$ mongodump -h 127.0.0.1 --port 27017 -o test2
...
2020-09-11T11:55:58.086+0800 done dumping test.company (18801 documents)
2020-09-11T11:56:00.725+0800 [#############...........] test.people 559101/1000000 (55.9%)
2020-09-11T11:56:03.725+0800 [###################.....] test.people 829496/1000000 (82.9%)
2020-09-11T11:56:06.725+0800 [#####################...] test.people 884614/1000000 (88.5%)
2020-09-11T11:56:08.088+0800 [########################] test.people 1000000/1000000 (100.0%)
2020-09-11T11:56:08.350+0800 done dumping test.people (1000000 documents)
【Ví dụ】Sao lưu cơ sở dữ liệu cụ thể
mongodump -h 127.0.0.1 --port 27017 -d admin -o test3
Khôi phục dữ liệu
Trong MongoDB, chúng ta sử dụng lệnh mongorestore
để khôi phục dữ liệu đã được sao lưu.
Cú pháp lệnh mongorestore
như sau:
> mongorestore -h <hostname><:port> -d dbname <path>
--host <:port>
,-h <:port>
: Địa chỉ máy chủ MongoDB, mặc định là: localhost:27017.--db
,-d
: Cơ sở dữ liệu cần khôi phục, ví dụ: test, tên này cũng có thể khác với tên khi sao lưu, ví dụ: test2.--drop
: Trong quá trình khôi phục, trước tiên xóa dữ liệu hiện tại và sau đó khôi phục dữ liệu đã sao lưu. Điều này có nghĩa là sau khi khôi phục, dữ liệu đã được thêm hoặc sửa đổi sau khi sao lưu sẽ bị xóa, hãy sử dụng cẩn thận!<path>
: Thư mục chứa dữ liệu sao lưu. Bạn không thể chỉ định cùng lúc<path>
và tùy chọn--dir
,--dir
cũng có thể được sử dụng để chỉ định thư mục sao lưu.--dir
: Chỉ định thư mục sao lưu. Bạn không thể chỉ định cùng lúc<path>
và tùy chọn--dir
.
【Ví dụ】
$ mongorestore -h 127.0.0.1 --port 27017 -d test --dir test --drop
...
2020-09-11T11:46:16.053+0800 finished restoring test.tweets (966 documents, 0 failures)
2020-09-11T11:46:18.256+0800 [###.....................] test.people 164MB/1.03GB (15.6%)
2020-09-11T11:46:21.255+0800 [########................] test.people 364MB/1.03GB (34.6%)
2020-09-11T11:46:24.256+0800 [############............] test.people 558MB/1.03GB (53.0%)
2020-09-11T11:46:27.255+0800 [###############.........] test.people 700MB/1.03GB (66.5%)
2020-09-11T11:46:30.257+0800 [###################.....] test.people 846MB/1.03GB (80.3%)
2020-09-11T11:46:33.255+0800 [######################..] test.people 990MB/1.03GB (94.0%)
2020-09-11T11:46:34.542+0800 [########################] test.people 1.03GB/1.03GB (100.0%)
2020-09-11T11:46:34.543+0800 no indexes to restore
2020-09-11T11:46:34.543+0800 finished restoring test.people (1000000 documents, 0 failures)
2020-09-11T11:46:34.544+0800 1000966 document(s) restored successfully. 0 document(s) failed to restore.
Import và Export
Các công cụ mongoimport
và mongoexport
không thể đảm bảo lưu trữ tất cả các loại dữ liệu BSON phong phú một cách đáng tin cậy, vì JSON chỉ có thể đại diện cho một phần con của các loại dữ liệu BSON được hỗ trợ. Do đó, việc xuất và nhập dữ liệu có thể dẫn đến mất mát một số độ chính xác.
Thực hiện Import
Trong MongoDB, chúng ta sử dụng lệnh mongoimport
để nhập dữ liệu. Mặc định, mongoimport
sẽ nhập dữ liệu vào một MongoDB instance đang chạy trên máy chủ cục bộ và cổng 27017. Để nhập dữ liệu vào một instance MongoDB đang chạy trên máy chủ hoặc cổng khác, hãy chỉ định máy chủ và cổng bằng cách sử dụng các tùy chọn --host
và --port
. Sử dụng tùy chọn --drop
để xóa bộ sưu tập (nếu nó đã tồn tại) trước khi nhập dữ liệu. Điều này đảm bảo rằng bộ sưu tập chỉ chứa dữ liệu bạn muốn nhập.
Cú pháp lệnh mongoimport
như sau:
mongoimport -h IP --port PORT -u USERNAME -p PASSWORD -d DATABASE -c COLLECTION --type TYPE --headerline --upsert --drop FILENAME
【Ví dụ】Nhập dữ liệu vào một bảng
$ mongoimport -h 127.0.0.1 --port 27017 -d test -c book --drop test/book.dat
2020-09-11T10:53:56.359+0800 connected to: mongodb://127.0.0.1:27017/
2020-09-11T10:53:56.372+0800 dropping: test.book
2020-09-11T10:53:56.628+0800 431 document(s) imported successfully. 0 document(s) failed to import.
【Ví dụ】Nhập dữ liệu từ tệp JSON
$ mongoimport -h 127.0.0.1 --port 27017 -d test -c student --upsert test/student.json
2020-09-11T11:02:55.907+0800 connected to: mongodb://127.0.0.1:27017/
2020-09-11T11:02:56.068+0800 200 document(s) imported successfully. 0 document(s) failed to import.
【Ví dụ】Nhập dữ liệu từ tệp CSV
$ mongoimport -h 127.0.0.1 --port 27017 -d test -c product --type csv --headerline test/product.csv
2020-09-11T11:07:49.788+0800 connected to: mongodb://127.0.0.1:27017/
2020-09-11T11:07:51.051+0800 11 document(s) imported successfully. 0 document(s) failed to import.
【Ví dụ】Nhập một phần dữ liệu từ bảng
$ mongoimport -h 127.0.0.1 --port 27017 -d test -c product --type json --upsertFields name,price test/product.json
2020-09-11T11:14:05.410+0800 connected to: mongodb://127.0.0.1:27017/
2020-09-11T11:14:05.612+0800 11 document(s) imported successfully. 0 document(s) failed to import.
Thực hiện Export
Cú pháp lệnh như sau:
mongoexport -h <IP> --port <PORT> -u <USERNAME> -p <PASSWORD> -d <DATABASE> -c <COLLECTION> -f <FIELDS> -q <QUERY> --csv -o <FILENAME>
-f
: Chỉ định các trường cần xuất, phân tách bằng dấu phẩy,-f name,email,age
chỉ định xuất ba trường name, email, age.-q
: Có thể chỉ định truy vấn để xuất,-q '{ "uid" : "100" }'
chỉ định xuất dữ liệu với uid là 100.--csv
: Chỉ định định dạng tệp xuất là csv, điều này hữu ích vì hầu hết các cơ sở dữ liệu quan hệ đều hỗ trợ csv và có điểm chung này.
【Ví dụ】Xuất toàn bộ bảng
$ mongoexport -h 127.0.0.1 --port 27017 -d test -c product -o test/product.dat
2020-09-11T10:44:23.161+0800 connected to: mongodb://127.0.0.1:27017/
2020-09-11T10:44:23.177+0800 exported 11 records
【Ví dụ】Xuất bảng thành tệp JSON
$ mongoexport -h 127.0.0.1 --port 27017 -d test -c product --type json -o test/product.json
2020-09-11T10:49:52.735+0800 connected to: mongodb://127.0.0.1:27017/
2020-09-11T10:49:52.750+0800 exported 11 records
【Ví dụ】Xuất một phần trường từ bảng thành tệp CSV
$ mongoexport -h 127.0.0.1 --port 27017 -d test -c product --type csv -f name,price -o test/product.csv
2020-09-11T10:47:33.160+0800 connected to: mongodb://127.0.0.1:27017/
2020-09-11T10:47:33.176+0800 exported 11 records