> 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/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 bao giờ chạy Server Pro phiên bản 5.0.1 hoặc Community Edition phiên bản 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, thì bạn không cần chạy quy trình khôi phục này.
{% endhint %}

**Các 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 lên MongoDB".
* (2024-04-23 11:45 BST): Xử lý các lệnh flush bị lỗi trong 5.0.1 và bỏ qua các lệnh flush khi 5.0.2 đã được khởi động.

Thời lượng 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 history store sử dụng 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 quá trình 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à bộ nhớ 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. Hãy 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ắ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 ảnh release

Kéo `5.0.3` các ảnh release.
{% endstep %}

{% step %}

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

Xác định một vài dự án theo id bị thiếu history; 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 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 lên MongoDB

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

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

   ```bash
   $ docker exec sharelatex sv stop real-time-overleaf
   ```
3. Chờ cho dịch vụ thời gian thực thoát ra, 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
   # đợi 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 bao giờ chạy 5.0.2: Thực hiện một lệnh flush thủ công cho các cập nhật tài liệu và chờ cho đến khi nó hoàn tất thành công.

   Bạn có thể lặp lại lệnh khi gặp lỗi. Trong trường hợp bạn thấy một `failureCount` khác 0 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ụ bằng `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":"finished flushing all projects","time":"...","v":0}
   Đã flush xong tất cả dự án
   </code></pre>
6. Nếu bạn chưa bao giờ chạy 5.0.2: Hãy đảm bảo rằng tất cả thay đổi đã được flush 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ụ bằng `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 history đang chờ xử lý.

   Việc này sẽ cần một lần flush theo nỗ lực tốt nhất vì một số dự án có history bị hỏng do lỗi di chuyển cơ sở dữ liệu. Mọi lỗi sẽ được xử lý bằng cách đồng bộ lại history vào 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 một [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 sẽ 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 đuôi 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ờ cho quá trình khôi phục hoàn tất

Chờ cho quá trình khôi phục hoàn tất bằng cách либо xem đuôi tệp log ở trên cho đến khi một `Đã xong.` dòng đã được in ra hoặc chờ cho `Đã 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ở khung lịch sử cho một vài dự án trước đây bị thiếu history.

1. Đẩy nhanh việc đồng bộ lại cho các dự án cần kiểm thử (chúng rồi sẽ được xử lý, nhưng chúng ta không muốn chờ đến lượt của 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 để kiểm thử, 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ở khung "History" của dự án và xem nội dung mới nhất.
4. Tùy chọn: Đóng lại khung "History". Thực hiện một thay đổi mã, chẳng hạn như thêm một comment vào header.
5. Tùy chọn: Thực hiện re-compile để kích hoạt việc flush thay đổi cục bộ. Mở lại khung "History" 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 còn lại.
{% endstep %}

{% step %}

#### Giữ cho phiên bản tiếp tục chạy

Vui lòng giữ cho phiên bản đã thực thi quá trình khôi phục tiếp tục chạy. Nó sẽ đồng bộ lại history cho tất cả dự án ở chế độ nền với mức đồng thời là 1. Điều này sẽ dẫn đến tải 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 đồng bộ lại từ đầu.)
{% 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 nhóm 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://overleaf-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.
