> 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/ho-tro/support-guides/doc-version-recovery.md).

# (Di chuyển v5.0.1) Khôi phục phiên bản tài liệu

{% hint style="info" %}
Nếu bạn chưa từng chạy phiên bản Server Pro 5.0.1 hoặc Community Edition 5.0.1, hoặc bạn đã khởi tạo một phiên bản hoàn toàn mới với 5.0.1, bạn không cần chạy quy trình khôi phục này.
{% endhint %}

**Cập nhật cho trang này:**

* (2024-04-22 13:40 BST): Đã thêm bước "Ngăn các cập nhật mới đi vào hệ thống và flush tất cả thay đổi vào MongoDB".
* (2024-04-23 11:45 BST): Tính đến các lần flush bị lỗi trong 5.0.1 và bỏ qua flush khi 5.0.2 đã được khởi động.

Thời gian của quá trình khôi phục sẽ phụ thuộc vào số lượng và kích thước dự án trong phiên bản của bạn và backend lưu trữ được sử dụng bởi history store cho các chunk (như được định nghĩa trong `OVERLEAF_HISTORY_CHUNKS_BUCKET`).

Quá trình khôi phục sẽ làm chậm việc khởi động ứng dụng bên trong container Server Pro. Trang web sẽ hiển thị ngoại tuyến trong thời gian đó. Chúng tôi chỉ hỗ trợ chạy khôi phục từ một phiên bản duy nhất của container Server Pro, tất cả các worker mở rộng ngang khác cần phải ngoại tuyến.

Bạn có thể dừng và tiếp tục quá trình khôi phục nếu cần.

Dựa trên các bài kiểm tra hiệu năng của chúng tôi, quá trình khôi phục có thể xử lý khoảng 10k dự án nhỏ mỗi phút trên phần cứng hiện đại (xung nhịp CPU 3GHz và lưu trữ NVMe cục bộ). Ví dụ, với một phiên bản có 100k dự án, hãy lên lịch một khoảng bảo trì cho phép ít nhất 10+2 phút ngừng hoạt động. Sử dụng truy vấn sau để ước tính số lượng dự án trong phiên bản của bạn:

{% code overflow="wrap" %}

```bash
$ docker exec mongo mongosh sharelatex --quiet --eval 'db.projects.estimatedDocumentCount() + db.deletedProjects.estimatedDocumentCount()'
```

{% endcode %}

Vui lòng đọc đầy đủ các bước khôi phục sau đây trước khi bạn bắt đầu. Khách hàng Server Pro rất hoan nghênh liên hệ với <support@overleaf.com> nếu có bất kỳ câu hỏi nào.

### Quy trình khôi phục

{% stepper %}
{% step %}

#### Kéo các image bản phát hành

Kéo `5.0.3` các image bản phát hành.
{% endstep %}

{% step %}

#### Xác định một vài dự án

Xác định một vài dự án theo id đang thiếu lịch sử; lý tưởng nhất là bạn có quyền thực hiện thay đổi trên một trong số đó.
{% endstep %}

{% step %}

#### Lên lịch bảo trì

Lên lịch một khoảng thời gian bảo trì cho thời gian ngừng hoạt động.
{% endstep %}

{% step %}

#### Dừng tất cả trừ một worker

Dừng tất cả trừ một worker khi sử dụng thiết lập mở rộng ngang.
{% endstep %}

{% step %}

#### Dừng các cập nhật mới và flush tất cả thay đổi vào MongoDB

Ngăn các cập nhật mới đi vào hệ thống và flush tất cả thay đổi vào MongoDB:

1. Đóng trình soạn thảo và ngắt kết nối thủ công tất cả người dùng qua bảng quản trị tại `https://my-server-pro.example.com/admin#open-close-editor` trong tab "Mở/Đóng trình soạn thảo".
2. Dừng dịch vụ Websocket/thời gian thực.

   ```bash
   $ docker exec sharelatex sv stop real-time-overleaf
   ```
3. Chờ dịch vụ thời gian thực thoát, như được chỉ ra bởi `down:`.

   ```bash
   $ docker exec sharelatex sv status real-time-overleaf
   run: real-time-sharelatex: (pid 394) 50s, want down, got TERM
   # chờ thêm một chút...

   $ docker exec sharelatex sv status real-time-overleaf
   down: real-time-sharelatex: 7s, normally up
   ```
4. Dừng container git-bridge nếu được bật.

   ```bash
   $ docker stop git-bridge
   ```
5. Nếu bạn chưa từng chạy 5.0.2: Thực hiện một lần flush thủ công cho các cập nhật tài liệu và chờ nó hoàn tất thành công.

   Bạn có thể lặp lại lệnh khi gặp lỗi. Nếu bạn thấy một giá trị khác 0 của `failureCount` trong các lần chạy liên tiếp, vui lòng dừng quá trình di chuyển (khôi phục các dịch vụ qua `docker restart git-bridge sharelatex`) và liên hệ bộ phận hỗ trợ.

   <pre class="language-bash" data-overflow="wrap"><code class="lang-bash">$ docker exec sharelatex bash -c 'source /etc/container_environment.sh &#x26;&#x26; source /etc/overleaf/env.sh &#x26;&#x26; cd services/document-updater &#x26;&#x26; LOG_LEVEL=info node scripts/flush_all.js'
   ...
   {"name":"default","hostname":"...","pid":324,"level":30,"successCount":...,"failureCount":0,"msg":"đã hoàn tất flush tất cả dự án","time":"...","v":0}
   Đã flush xong tất cả dự án
   </code></pre>
6. Nếu bạn chưa từng chạy 5.0.2: Đảm bảo rằng tất cả thay đổi đã được flush ra khỏi redis.

   Nếu bạn nhận được bất kỳ đầu ra nào từ `redis-cli`, vui lòng dừng quá trình di chuyển (khôi phục các dịch vụ qua `docker restart git-bridge sharelatex`) và liên hệ bộ phận hỗ trợ.

   <pre class="language-bash" data-overflow="wrap"><code class="lang-bash">$ docker exec redis redis-cli --scan --pattern 'DocVersion:*'
   # không có đầu ra từ redis-cli cho thấy thành công, hãy kiểm tra mã thoát của redis-cli tiếp theo, nó phải bằng 0
   $ echo $?
   0
   </code></pre>
7. Hãy thử flush mọi thay đổi lịch sử đang chờ.

   Đây sẽ là một lần flush theo nỗ lực tốt nhất vì một số dự án có lịch sử bị hỏng do việc di chuyển cơ sở dữ liệu lỗi. Mọi lỗi sẽ được xử lý bằng cách đồng bộ lại lịch sử ở cuối quá trình khôi phục.

   <pre class="language-bash" data-overflow="wrap"><code class="lang-bash">$ docker exec sharelatex bash -c 'source /etc/container_environment.sh &#x26;&#x26; source /
   </code></pre>

{% endstep %}

{% step %}

#### Tạo bản sao lưu

Hãy cân nhắc tạo [bản sao lưu nhất quán](https://docs.overleaf.com/on-premises/maintenance/data-and-backups#performing-a-consistent-backup) bản sao lưu của phiên bản.
{% endstep %}

{% step %}

#### Nâng cấp

Nâng cấp lên phiên bản `5.0.3`.
{% endstep %}

{% step %}

#### Khôi phục tự động

Quá trình khôi phục chạy tự động khi container khởi động.
{% endstep %}

{% step %}

#### Theo dõi tiến trình

Bạn có thể theo dõi tiến trình của script bằng cách xem liên tục tệp log `/var/lib/overleaf/data/history/doc-version-recovery.log`. Nó sẽ in ra tổng số dự án ở đầu và một bản tóm tắt sau mỗi 1000 dự án được xử lý.

{% code overflow="wrap" %}

```bash
$ docker exec sharelatex tail --retry --follow /var/lib/overleaf/data/history/doc-vers
```

{% endcode %}
{% endstep %}

{% step %}

#### Chờ quá trình khôi phục hoàn tất

Hãy chờ quá trình khôi phục hoàn tất bằng cách theo dõi tệp log ở trên cho đến khi một `Xong.` dòng được in ra hoặc chờ `Đã hoàn tất khôi phục các phiên bản tài liệu.` được in ra đầu ra chuẩn của container Server Pro.
{% endstep %}

{% step %}

#### Xác thực quá trình khôi phục

Xác thực quá trình khôi phục bằng cách mở ngăn lịch sử cho một vài dự án trước đây bị thiếu lịch sử.

1. Đẩy nhanh việc đồng bộ lại cho các dự án cần kiểm tra (Rồi chúng sẽ được xử lý, nhưng chúng ta không muốn chờ đến lượt chúng.)

   <pre class="language-bash" data-overflow="wrap"><code class="lang-bash">$ docker exec sharelatex curl -X POST --silent "http://127.0.0.1:3054/project/000000000000000000000000/resync?force=true"
   </code></pre>

   (Lặp lại với từng project-id cần kiểm tra, thay `000000000000000000000000` bằng một project-id mỗi lần.)
2. Mở trình soạn thảo dự án cho các dự án `https://my-server-pro.example.com/project/000000000000000000000000`
3. Mở ngăn "Lịch sử" của dự án và xem nội dung mới nhất.
4. Tùy chọn: Đóng lại ngăn "Lịch sử". Thực hiện một thay đổi mã, chẳng hạn như thêm một chú thích vào phần đầu.
5. Tùy chọn: Thực hiện biên dịch lại để kích hoạt việc flush thay đổi cục bộ. Mở lại ngăn "Lịch sử" và xem thay đổi. Khi xong, hoàn tác thay đổi.
   {% endstep %}

{% step %}

#### Đối với mở rộng ngang...

Khởi động lại các worker khác.
{% endstep %}

{% step %}

#### Giữ cho phiên bản chạy

Vui lòng giữ cho phiên bản đã thực hiện quá trình khôi phục tiếp tục chạy. Nó sẽ đồng bộ lại lịch sử cho tất cả dự án ở chế độ nền với mức đồng thời là 1. Điều này sẽ làm tải nền cơ bản tăng nhẹ. (Bạn có thể khởi động lại phiên bản, nhưng nó sẽ phải bắt đầu lại từ đầu với các lần đồng bộ.)
{% endstep %}

{% step %}

#### Hãy cho chúng tôi biết khi bạn hoàn tất

Khách hàng Server Pro: Vui lòng cho đội hỗ trợ biết khi bạn đã hoàn tất quá trình khôi phục.
{% endstep %}
{% endstepper %}


---

# 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/ho-tro/support-guides/doc-version-recovery.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.
