> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/on-premises/vi/bao-tri/updating-mongodb.md).

# Cập nhật MongoDB

{% hint style="info" %}
Bất kỳ bản phát hành mới nào của Server CE/Server Pro sẽ cho biết mọi thay đổi về phiên bản MongoDB được hỗ trợ trong [ghi chú phát hành](https://docs.overleaf.com/on-premises/release-notes).
{% endhint %}

### Tôi có nên cập nhật MongoDB không?

Bạn nên **chỉ** cân nhắc cập nhật phiên bản MongoDB của bạn nếu bạn đang lên kế hoạch nâng cấp bản cài đặt Server CE/Server Pro của mình.

Nếu bạn đang chạy phiên bản MongoDB mới hơn phiên bản được khuyến nghị cho phiên bản hiện tại (hoặc mục tiêu) của bạn thì không cần thực hiện thay đổi nào.

{% hint style="warning" %}
Bạn không bao giờ nên hạ cấp phiên bản MongoDB của mình.
{% endhint %}

Nếu bạn gặp một sự cố cụ thể mà bạn nghĩ có thể liên quan đến phiên bản MongoDB hiện tại của mình, hãy thoải mái [tạo một vấn đề](https://github.com/overleaf/overleaf/issues) nếu bạn là người dùng Server CE hoặc liên hệ Hỗ trợ Overleaf nếu bạn là người dùng Server Pro.

### Kiểm tra phiên bản MongoDB của bạn

Mở `mongo` shell sẽ ngay lập tức in ra phiên bản hiện tại.

Người dùng Overleaf Toolkit:

```bash
bin/docker-compose exec mongo mongod --version
phiên bản db v5.0.24
Thông tin bản dựng: {
    "version": "5.0.24",
    "gitVersion": "f034f0c51b3dffef4b8c9452d77ede9888f28f66",
    "openSSLVersion": "OpenSSL 1.1.1f  31 Mar 2020",
    "modules": [],
    "allocator": "tcmalloc",
    "environment": {
        "distmod": "ubuntu2004",
        "distarch": "x86_64",
        "target_arch": "x86_64"
    }
}
```

Người dùng Docker Compose:

```bash
docker compose exec mongo mongod --version
phiên bản db v5.0.24
Thông tin bản dựng: {
    "version": "5.0.24",
    "gitVersion": "f034f0c51b3dffef4b8c9452d77ede9888f28f66",
    "openSSLVersion": "OpenSSL 1.1.1f  31 Mar 2020",
    "modules": [],
    "allocator": "tcmalloc",
    "environment": {
        "distmod": "ubuntu2004",
        "distarch": "x86_64",
        "target_arch": "x86_64"
    }
}

```

### Quy trình cập nhật

Việc cập nhật phiên bản MongoDB trong quá trình nâng cấp bản cài đặt Server CE/Server Pro của bạn như sau:

1. Quyết định phiên bản Server CE/Server Pro mà bạn dự định nâng cấp lên.
2. Tìm phiên bản MongoDB được khuyến nghị bởi bản phát hành Server CE/Server Pro cụ thể đó.
3. Làm theo hướng dẫn để nâng cấp MongoDB lên phiên bản mục tiêu.
4. Nâng cấp phiên bản image của Server CE/Server Pro và khởi động lại phiên bản.

Khuyến nghị của chúng tôi là luôn nâng cấp **Server CE/Server Pro** lên phiên bản mới nhất hiện có, vì điều đó luôn được đảm bảo là được hỗ trợ (chỉ dành cho người dùng Server Pro).

{% hint style="danger" %}
Khi thực hiện nâng cấp Server CE/Pro, chúng tôi khuyến nghị nâng cấp lên bản phát hành mới nhất của phiên bản chính đang triển khai **trước** khi nâng cấp lên bản phát hành mới nhất của **phiên bản chính tiếp theo** . Nếu bản triển khai của bạn lạc hậu hơn một phiên bản chính so với bản mới nhất, bạn sẽ phải thực hiện nâng cấp nhiều bước.

Ví dụ: nếu bạn đang chạy 3.5.10, bạn sẽ cần nâng cấp lên 3.5.13 -> Thực hiện di chuyển Full Project History -> 4.2.9 -> 5.5.4.

Bạn nên **không bao giờ** bỏ qua các phiên bản chính (3.5.10 -> 5.5.4). Nếu bạn đang sử dụng Toolkit và lạc hậu hơn một phiên bản chính so với bản mới nhất, bạn phải **không** sử dụng `bin/upgrade` script vì bạn sẽ cần thực hiện nâng cấp thủ công nhiều bước.
{% endhint %}

{% hint style="warning" %}
Điều quan trọng là phải đảm bảo bạn tạo một [bản sao lưu nhất quán](/on-premises/vi/bao-tri/data-and-backups.md#performing-a-consistent-backup) **trước** ở mỗi lần nâng cấp major version để cho phép bạn quay lại nếu cần.
{% endhint %}

#### Thông tin hỗ trợ phiên bản

Trong trường hợp bạn quyết định quay về một phiên bản cũ hơn, bảng này cho thấy phiên bản MongoDB được khuyến nghị cho các bản phát hành Server CE/Server Pro trước đó, nhưng bạn nên **không bao giờ** hạ cấp phiên bản MongoDB của mình.

<table><thead><tr><th width="175">Server CE/Server Pro</th><th width="139" align="center">Phiên bản MongoDB</th><th align="center">Phiên bản tương thích tính năng tối thiểu</th><th align="center">Phiên bản tối đa được Node.js Driver hỗ trợ</th></tr></thead><tbody><tr><td>2.0.x</td><td align="center">3.4</td><td align="center">-</td><td align="center">-</td></tr><tr><td>2.1.x đến 2.4.x</td><td align="center">3.6</td><td align="center">-</td><td align="center">-</td></tr><tr><td>>=2.5.0</td><td align="center">4.0</td><td align="center">-</td><td align="center">-</td></tr><tr><td>>=3.1.0</td><td align="center">4.2</td><td align="center">-</td><td align="center">-</td></tr><tr><td>>=3.2.0</td><td align="center">4.4</td><td align="center">-</td><td align="center">-</td></tr><tr><td>>=4.2.0</td><td align="center">5.0</td><td align="center">-</td><td align="center">-</td></tr><tr><td>>=5.1.0</td><td align="center">6.0</td><td align="center">-</td><td align="center">-</td></tr><tr><td>>=5.3.1</td><td align="center">6.0</td><td align="center">5.0</td><td align="center">8.0</td></tr><tr><td>>=5.5.0</td><td align="center">6.0</td><td align="center">6.0</td><td align="center">8.0</td></tr><tr><td>6.0.0</td><td align="center">8.0</td><td align="center">8.0</td><td align="center">8.0</td></tr></tbody></table>

{% hint style="danger" %}
Phiên bản tương thích tính năng tối thiểu ở trên dựa trên phiên bản MongoDB tương ứng được khuyến nghị sử dụng với phiên bản Overleaf hiển thị. Nếu bạn dự định sử dụng phiên bản cao hơn, MongoDB sẽ có yêu cầu tối thiểu riêng.
{% endhint %}

Bạn có thể xem bảng tương thích quy định các phiên bản được hỗ trợ của MongoDB Node.js driver để sử dụng với MongoDB [tại đây](https://www.mongodb.com/docs/drivers/node/current/reference/compatibility/).

Bạn có thể xem trạng thái hết vòng đời cho từng phiên bản MongoDB [tại đây](https://endoflife.date/mongodb).

#### Nâng cấp MongoDB

MongoDB yêu cầu **nâng cấp từng bước**. Điều đó có nghĩa là bạn không thể đi thẳng từ, chẳng hạn `4.0` đến `5.0`. Bạn cần trước tiên cập nhật `4.2` đến `4.4`, rồi sau đó `5.0`.

{% hint style="info" %}
MongoDB sử dụng các số chẵn cho các phiên bản ổn định của họ.
{% endhint %}

#### **Hướng dẫn cập nhật khi chạy MongoDB bên ngoài Docker**

Dưới đây là các liên kết tới hướng dẫn cập nhật từ mongodb.com khi nâng cấp MongoDB.

* [Ghi chú phát hành MongoDB - nâng cấp MongoDB từ `4.2` đến `4.4`](https://www.mongodb.com/docs/v4.4/release-notes/4.4-upgrade-standalone/)
* [Ghi chú phát hành MongoDB - nâng cấp MongoDB từ `4.4` đến `5.0`](https://www.mongodb.com/docs/v5.0/release-notes/5.0-upgrade-replica-set/)
* [Ghi chú phát hành MongoDB - nâng cấp MongoDB từ `5.0` đến `6.0`](https://www.mongodb.com/docs/v6.0/release-notes/6.0-upgrade-replica-set/)
* [Ghi chú phát hành MongoDB - nâng cấp MongoDB từ `6.0` đến `7.0`](https://www.mongodb.com/docs/manual/release-notes/7.0-upgrade-replica-set/#std-label-7.0-upgrade-replica-set)
* [Ghi chú phát hành MongoDB - nâng cấp MongoDB từ `7.0` đến `8.0`](https://www.mongodb.com/docs/manual/release-notes/8.0-upgrade-replica-set/#std-label-8.0-upgrade-replica-set)

{% hint style="info" %}
Hướng dẫn cho `5.0` và cao hơn sẽ chỉ tới cài đặt replica set, thay vì standalone. Vì Server Pro/CE 4.0.1+ sử dụng giao dịch, MongoDB cần được chạy dưới dạng replica set.
{% endhint %}

{% hint style="warning" %}
Tài liệu cho MongoDB 3.2 đến 4.2 hiện có sẵn qua <https://www.mongodb.com/docs/legacy/>
{% endhint %}

**Hướng dẫn cơ bản**

Trong hầu hết các trường hợp, việc cập nhật yêu cầu thiết lập một cờ tương thích trước khi thực sự cập nhật phiên bản mongo. Các bước như sau:

1. Thiết lập cờ tương thích như mô tả trong ghi chú phát hành MongoDB (xem các ví dụ bên dưới).
2. Sau đó cập nhật image mongo:
   1. **Người dùng Toolkit** Cập nhật `MONGO_VERSION`, ví dụ `MONGO_VERSION=6.0`
   2. **Người dùng Docker Compose** Cập nhật phiên bản của `mongo` thẻ image,\
      ví dụ `services -> mongo -> image: mongo:6.0`;

**Ví dụ: Nâng cấp MongoDB từ `5.0` đến `6.0`**

Hãy bắt đầu bằng cách đảm bảo chúng ta đang chạy MongoDB `6.0`:

Người dùng Overleaf Toolkit:

```bash
bin/docker-compose exec mongo mongod --version
# phiên bản db v5.0.24
```

Người dùng Docker Compose:

```bash
docker compose exec mongo mongod --version
# phiên bản db v5.0.24
```

Theo [hướng dẫn nâng cấp](https://docs.mongodb.com/manual/release-notes/3.6-upgrade-standalone/#upgrade-version-path), yêu cầu duy nhất là có `featureCompatibilityVersion` được đặt thành `5.0`. Chúng ta làm điều đó bằng cách mở một MongoDB shell và chạy lệnh được chỉ định:

Người dùng Overleaf Toolkit:

```bash
bin/mongo
# Phiên bản MongoDB shell v5.0.24
# ...
# overleaf:PRIMARY> db.adminCommand( { setFeatureCompatibilityVersion: "5.0" } )
# { 
# "ok" : 1,
# ...
# }
overleaf:PRIMARY> exit
# tạm biệt
```

{% hint style="info" %}
Người dùng Docker Compose có thể chạy `docker compose exec mongo mongosh` để vào shell và chạy các lệnh giống như người dùng Toolkit.
{% endhint %}

Người dùng Overleaf Toolkit:

Sau đó, chúng ta sẽ dừng các phiên bản Server CE/Server Pro và MongoDB bằng `bin/stop` lệnh, đặt `MONGO_VERSION=6.0` trong `config/overleaf.rc`, rồi khởi động lại `mongo` dịch vụ bằng `bin/up mongo`) để xác minh rằng việc cập nhật diễn ra suôn sẻ.

Cuối cùng, chúng ta sẽ cập nhật phiên bản image của Server CE/Server Pro lên phiên bản mục tiêu và tạo lại tất cả các dịch vụ bằng `bin/up -d` lệnh.

Người dùng Docker Compose:

Sau đó, chúng ta sẽ dừng các phiên bản Server CE/Server Pro và MongoDB bằng `docker compose stop` lệnh, cập nhật [`docker-compose.yml`](https://github.com/overleaf/overleaf/blob/4b1babd4ea634ab12c54e9a9aea7db0e8a500941/docker-compose.yml) tệp để dùng `image: mongo:6.0`, rồi khởi động lại `mongo` dịch vụ bằng `docker compose up mongo` lệnh để xác minh rằng việc cập nhật diễn ra suôn sẻ.

Cuối cùng, chúng ta sẽ cập nhật phiên bản image của Server CE/Server Pro lên phiên bản mục tiêu và tạo lại tất cả các dịch vụ bằng `docker compose up` lệnh.

**Ví dụ: Nâng cấp MongoDB từ `6.0` đến `7.0` (người dùng toolkit)**

Bắt đầu bằng cách đảm bảo rằng bạn đang chạy MongoDB `6.0` bằng `mongod --version` các lệnh ở trên.

Theo [hướng dẫn nâng cấp](https://www.mongodb.com/docs/manual/release-notes/7.0-upgrade-replica-set/#std-label-7.0-upgrade-replica-set), yêu cầu duy nhất là có `featureCompatibilityVersion` được đặt thành `6.0`. Chúng ta làm điều đó bằng cách mở một MongoDB shell và chạy lệnh `db.adminCommand({ setFeatureCompatibilityVersion: "6.0" })` .

Người dùng Overleaf Toolkit:

```bash
bin/mongo
# ...
# overleaf:PRIMARY> db.adminCommand( { setFeatureCompatibilityVersion: "6.0" } )
# { 
# "ok" : 1,
# ...
# }
overleaf:PRIMARY> exit
# tạm biệt
```

Sau đó, chúng ta sẽ dừng các phiên bản Server CE/Server Pro và MongoDB bằng `bin/stop` lệnh, đặt `MONGO_VERSION=7.0` trong `config/overleaf.rc`, rồi khởi động lại `mongo` dịch vụ bằng `bin/up mongo`) để xác minh rằng việc cập nhật diễn ra suôn sẻ.

Cuối cùng, chúng ta sẽ cập nhật phiên bản image của Server CE/Server Pro lên phiên bản mục tiêu và tạo lại tất cả các dịch vụ bằng `bin/up -d` lệnh.

**Ví dụ: Nâng cấp MongoDB từ `7.0` đến `8.0` (người dùng toolkit)**

Bắt đầu bằng cách đảm bảo rằng bạn đang chạy MongoDB `7.0` bằng `mongod --version` các lệnh ở trên.

Theo [hướng dẫn nâng cấp](https://www.mongodb.com/docs/manual/release-notes/8.0-upgrade-replica-set/#std-label-8.0-upgrade-replica-set), yêu cầu duy nhất là có `featureCompatibilityVersion` được đặt thành `7.0`. Chúng ta làm điều đó bằng cách mở một MongoDB shell và chạy lệnh `db.adminCommand({ setFeatureCompatibilityVersion: "7.0", confirm: true })`. Lưu ý rằng giờ đây điều này yêu cầu thêm `confirm: true` tham số.

```bash
bin/mongo
# ...
# overleaf:PRIMARY> db.adminCommand( { setFeatureCompatibilityVersion: "7.0", confirm: true } )
# { 
# "ok" : 1,
# ...
# }
overleaf:PRIMARY> exit
# tạm biệt
```

Sau đó, chúng ta sẽ dừng các phiên bản Server CE/Server Pro và MongoDB bằng `bin/stop` lệnh, đặt `MONGO_VERSION=8.0` trong `config/overleaf.rc`, rồi khởi động lại `mongo` dịch vụ bằng `bin/up mongo`) để xác minh rằng việc cập nhật diễn ra suôn sẻ.

Cuối cùng, chúng ta sẽ cập nhật phiên bản image của Server CE/Server Pro lên phiên bản mục tiêu và tạo lại tất cả các dịch vụ bằng `bin/up -d` lệnh.

#### Các lệnh tương đương cho người dùng docker compose

Đối với người dùng docker compose, các lệnh tương đương là:

* `docker compose exec mongo mongod --version` để hiển thị phiên bản mongo
* `docker compose exec mongo mongosh` để khởi động một mongo shell cho các lệnh quản trị
* `docker compose stop` lệnh để dừng máy chủ
* Chỉnh sửa [`docker-compose.yml`](https://github.com/overleaf/overleaf/blob/4b1babd4ea634ab12c54e9a9aea7db0e8a500941/docker-compose.yml) tệp để dùng `image: mongo:6.0` để nâng cấp phiên bản mongo
* `docker compose up mongo` để khởi động lại dịch vụ mongo và xác minh rằng việc cập nhật diễn ra suôn sẻ
* Chỉnh sửa [`docker-compose.yml`](https://github.com/overleaf/overleaf/blob/4b1babd4ea634ab12c54e9a9aea7db0e8a500941/docker-compose.yml) tệp để dùng `image: sharelatex:VERSION` để nâng cấp phiên bản image
* `docker compose up` để tạo lại tất cả các dịch vụ.

### Tạo vai trò tùy chỉnh

Trong phiên bản `5.5.1`, chúng tôi đã giới thiệu một kiểm tra khởi động để xác minh phiên bản tương thích tính năng cho MongoDB. Nếu cơ sở dữ liệu MongoDB của bạn sử dụng xác thực (ví dụ: xác thực cơ bản), `sharelatex` container có thể không khởi động, hiển thị lỗi "*không được phép trên admin để thực thi lệnh*".

Để khắc phục điều này, bạn có thể tạo một vai trò mới trong MongoDB và gán nó cho tài khoản người dùng được dùng để truy cập cơ sở dữ liệu theo hướng dẫn bên dưới, hoặc đặt `ALLOW_MONGO_ADMIN_CHECK_FAILURES=true` để cho phép kiểm tra thất bại mà không ngăn việc triển khai khởi động.

{% hint style="success" %}
Vai trò mới này **chỉ** cấp quyền đọc các tham số máy chủ MongoDB trên toàn cụm và có thể được tái sử dụng cho mục đích giám sát,
{% endhint %}

{% code overflow="wrap" %}

```bash
# Người dùng Toolkit
$ bin/docker-compose exec -it mongo mongosh -u {{YOUR-ADMIN-USERNAME}} -p

# Chuyển sang cơ sở dữ liệu "admin" bằng
overleaf [direct: primary] sharelatex> use admin
đã chuyển sang db admin
overleaf [direct: primary] admin> 

# Tạo một vai trò mới với quyền dùng "getParamter". Sao chép và dán hàm bên dưới vào shell và nhấn phím Enter

db.createRole(
  {
    role: "clusterParameterReader",
    privileges: [
      {
        resource: { cluster: true },
        actions: ["getParameter"]    
      }
    ],
    roles: [] 
  }
);

# Chuyển lại sang cơ sở dữ liệu "sharelatex" 
use sharelatex
đã chuyển sang db sharelatex
overleaf [direct: primary] sharelatex> 

# Gán vai trò mới "clusterParameterReader" cho người dùng cơ sở dữ liệu của bạn bằng cách sao chép và dán hàm bên dưới vào shell rồi nhấn phím Enter 
db.grantRolesToUser(
  "{{YOUR-DATABASE-USER}}",
  [
    { role: "clusterParameterReader", db: "admin" }
  ]
);

# Gõ exit rồi nhấn Enter để thoát MongoDB shell
# Chạy bin/up -d để khởi động ngăn xếp triển khai
$ bin/up -d
```

{% endcode %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/on-premises/vi/bao-tri/updating-mongodb.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
