> For the complete documentation index, see [llms.txt](https://ayakaleaf-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://ayakaleaf-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ẽ chỉ ra mọi thay đổi đối với 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ỉ** chỉ nên cân nhắc cập nhật phiên bản MongoDB của bạn nếu bạn dự định nâng cấp phiên bản 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 cho rằng có thể liên quan đến phiên bản MongoDB hiện tại của mình, đừng ngần ngại [báo cáo sự cố](https://github.com/overleaf/overleaf/issues) nếu bạn là người dùng Server CE hoặc liên hệ với Bộ phận 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
db version v5.0.24
Build Info: {
    "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
db version v5.0.24
Build Info: {
    "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 phiên bản 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 định nâng cấp lên.
2. Tìm phiên bản MongoDB được khuyến nghị bởi chính bản phát hành Overleaf Server CE/Server Pro đó.
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ì nó luôn được đảm bảo đượ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 bạn nên nâng cấp lên bản phát hành mới nhất của major version đ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 **tiếp theo** major version. Nếu bản triển khai của bạn đang lạc hậu hơn một major version so với bản mới nhất, bạn sẽ cần 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 Toàn bộ Lịch sử Dự án -> 4.2.9 -> 5.5.4.

Bạn nên **không bao giờ** bỏ qua các major version (3.5.10 -> 5.5.4). Nếu bạn đang dùng Toolkit và đang lạc hậu hơn một major version 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 một nâng cấp nhiều bước thủ công.
{% endhint %}

{% hint style="warning" %}
Điều quan trọng là phải đảm bảo rằng bạn thực hiện 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** cho mỗi lần nâng cấp major version để bạn có thể khôi phục 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ề 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 cũ hơn của Server CE/Server Pro, 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 hỗ trợ bởi trình điều khiển Node.js</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 được 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 chỉ định các phiên bản được hỗ trợ của trình điều khiển MongoDB Node.js để 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 của 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**

Đây là các liên kết đến 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 chỉ tới một bản 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ó 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. Đặt 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 rằng chúng ta đang chạy MongoDB `6.0`:

Người dùng Overleaf Toolkit:

```bash
bin/docker-compose exec mongo mongod --version
# db version v5.0.24
```

Người dùng Docker Compose:

```bash
docker compose exec mongo mongod --version
# db version 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à phải có `featureCompatibilityVersion` được đặt thành `5.0`. Chúng ta thực hiện 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
# MongoDB shell version 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` để mở shell và chạy cùng các lệnh 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`) để kiểm tra 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 để sử 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 để kiểm tra 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)**

Hãy bắt đầu bằng cách đảm bảo rằng bạn đang chạy MongoDB `6.0` bằng cách sử dụ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à phải có `featureCompatibilityVersion` được đặt thành `6.0`. Chúng ta thực hiện 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`) để kiểm tra 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)**

Hãy bắt đầu bằng cách đảm bảo rằng bạn đang chạy MongoDB `7.0` bằng cách sử dụ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à phải có `featureCompatibilityVersion` được đặt thành `7.0`. Chúng ta thực hiện 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 lúc này cần thêm một `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`) để kiểm tra 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` để mở 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 để sử 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 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 để sử 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 một 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), container có thể không khởi động, hiển thị lỗi quyền " `sharelatex` không được ủy quyền trên admin để thực thi lệnh*không được ủy quyền trên admin để thực thi lệnh*" lỗi quyền.

Để giải quyết việc này, bạn có thể hoặc tạo một vai trò mới trong MongoDB và gán nó cho tài khoản người dùng 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 cách sử dụng
overleaf [direct: primary] sharelatex> use admin
đã chuyển sang db admin
overleaf [direct: primary] admin> 

# Tạo một vai trò mới có quyền sử dụng "getParamter". Sao chép và dán hàm dưới đây vào shell rồi nhấn phím Enter

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

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

# Gán vai trò "clusterParameterReader" mới 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 dưới đây 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 khỏi MongoDB shell
# Chạy bin/up -d để khởi động stack 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://ayakaleaf-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.
