> 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/data-and-backups.md).

# Dữ liệu và bản sao lưu

Đôi khi chúng ta cần thay đổi lược đồ dữ liệu trong cơ sở dữ liệu khi Overleaf phát triển; các script di chuyển được dùng để tự động hóa quá trình này. Chúng sẽ đã được chạy trên [overleaf.com](https://docs.overleaf.com/on-premises/configuration/overleaf-toolkit) trước tiên, đây là phiên bản Overleaf lớn nhất trên thế giới nên hầu hết các tình huống có thể đã được gặp trước đó; tuy nhiên, chúng tôi không đảm bảo đối với dữ liệu của bạn. Vui lòng đảm bảo rằng bạn tạo một **nhất quán** bản sao lưu dữ liệu của bạn **trước** khi đang nâng cấp phiên bản của bạn.

{% hint style="info" %}
Khi nâng cấp lên một Docker image mới, mọi bản di chuyển nào đã **không** chưa được chạy sẽ tự động được thực thi; việc này có thể mất một chút thời gian tùy theo kích thước bộ dữ liệu của bạn, theo dõi log sẽ cho bạn biết tiến trình. Để biết thêm thông tin, xem [Ghi log](https://docs.overleaf.com/on-premises/configuration/overleaf-toolkit/logging) tài liệu.
{% endhint %}

### Lưu trữ dữ liệu

Overleaf Community Edition và Server Pro lưu dữ liệu của họ ở ba nơi riêng biệt:

* **Cơ sở dữ liệu MongoDB:** Đây là nơi dữ liệu người dùng và dự án được lưu trữ.
* **Redis:** đóng vai trò là bộ nhớ đệm hiệu năng cao cho dữ liệu đang xử lý, chủ yếu lưu trữ thông tin liên quan đến các chỉnh sửa dự án và cộng tác.
* **Hệ thống tệp của Overleaf:** lưu các tệp dự án không thể chỉnh sửa (bao gồm hình ảnh) và cũng hoạt động như một bộ nhớ đệm đĩa tạm thời trong quá trình biên dịch dự án.

{% hint style="info" %}
Đây có thể là `~/sharelatex_data` hoặc `~/overleaf_data`, tùy thuộc vào thời điểm phiên bản của bạn được thiết lập.
{% endhint %}

{% hint style="success" %}
Đối với các tệp dự án và toàn bộ dữ liệu lịch sử dự án, chúng tôi cũng hỗ trợ các backend lưu trữ tương thích S3.
{% endhint %}

Xem Thư mục chi tiết để biết thêm thông tin về bố cục thư mục trên đĩa.

### Thực hiện một bản sao lưu nhất quán

Có ba kho lưu trữ cần được bao gồm khi tạo một bản sao lưu nhất quán:

* MongoDB
* Redis
* Dữ liệu hệ thống tệp Overleaf

Để tạo ra một bản sao lưu nhất quán thì **bắt buộc** phải ngăn người dùng tạo dữ liệu mới trong khi quá trình sao lưu đang chạy. Vì vậy, chúng tôi khuyên bạn lên lịch một khoảng bảo trì, trong đó người dùng không thể truy cập phiên bản hoặc chỉnh sửa dự án của họ.

Trước khi bắt đầu quá trình sao lưu, bạn cần đưa phiên bản của mình ngoại tuyến. Bắt đầu với Server Pro `3.5.0` quá trình tắt máy tự động hóa việc đóng trang web và ngắt kết nối người dùng.

Để tắt phiên bản của bạn, bạn cần chạy `bin/docker-compose stop sharelatex` nếu bạn đang chạy một triển khai Toolkit hoặc `docker compose stop sharelatex` nếu bạn đang chạy Docker Compose.

Khi `sharelatex` container đã dừng, bạn có thể bắt đầu quá trình sao lưu.

Sau khi quá trình sao lưu đã hoàn tất **thành công** bạn sẽ cần khởi động `sharelatex` container. Để làm việc này, hãy chạy `bin/docker-compose start sharelatex` nếu bạn đang chạy một triển khai Toolkit hoặc `docker compose start sharelatex` nếu bạn đang chạy Docker Compose.

{% hint style="danger" %}

* Các bản sao lưu nên được lưu trên một máy chủ riêng biệt với máy đang chạy phiên bản Overleaf của bạn, tốt nhất là ở một vị trí hoàn toàn khác.
* Việc sao chép cơ sở dữ liệu lên nhiều phiên bản MongoDB có thể mang lại một mức dự phòng nào đó, nhưng nó không bảo vệ khỏi hỏng dữ liệu.
* Kiểm tra các bản sao lưu là cách tốt nhất để đảm bảo chúng đầy đủ và hoạt động được.
  {% endhint %}

### MongoDB

MongoDB đi kèm một công cụ dòng lệnh có tên là [mongodump](https://docs.mongodb.com/manual/reference/program/mongodump/) có thể được dùng để tạo bản sao lưu dữ liệu người dùng và dự án được lưu trong cơ sở dữ liệu.

### Dữ liệu hệ thống tệp Overleaf

Đối với các triển khai Toolkit, đường dẫn nơi các tệp không thể chỉnh sửa của bạn được lưu được chỉ định trong `config/overleaf.rc` bằng `OVERLEAF_DATA_PATH` biến môi trường, nhưng tùy thuộc vào thời điểm phiên bản của bạn được tạo, điều này có thể là `data/sharelatex`.

Sử dụng một công cụ như **rsync** để sao chép đệ quy thư mục này là cần thiết để đảm bảo tạo được một bản sao lưu đầy đủ.

### Redis

Redis lưu các phiên người dùng và các cập nhật tài liệu đang chờ trước khi chúng được ghi vào MongoDB.

Duy trì Append Only File (AOF) là cấu hình được khuyến nghị cho tính bền vững của Redis.

Người dùng Toolkit có AOF persistence được bật mặc định cho **các** bản cài đặt mới, người dùng hiện tại có thể tìm thêm thông tin về việc bật AOF [tại đây](/on-premises/vi/cau-hinh/overleaf-toolkit/redis.md#enabling-append-only-file-persistence).

Nếu bạn quyết định tiếp tục sử dụng các bản chụp RDB cùng với AOF persistence, bạn có thể sao chép tệp RDB đến một vị trí an toàn như một bản sao lưu.

### Di chuyển dữ liệu giữa các máy chủ

Tốt nhất là bạn chưa có bất kỳ dữ liệu giá trị nào trong phiên bản mới. Chúng tôi không có quy trình để gộp dữ liệu của các phiên bản.

Giả sử phiên bản mới chưa có dữ liệu, đây là một số bước bạn có thể làm theo. Ở mức tổng quát, chúng ta tạo một tar-ball của `mongo`, `redis` và `overleaf` các volume, sao chép nó sang máy chủ mới, rồi giải nén nó ở đó lần nữa.

#### Toolkit

```bash
# Tắt máy an toàn phiên bản cũ
old-server$ bin/stop

# Tạo tar-ball
old-server$ tar --create --file backup-old-server.tar config/ data/

# Sao chép tệp backup-old-server.tar từ old-server sang
# new-server bằng bất kỳ phương thức nào phù hợp

# Tắt an toàn phiên bản mới (nếu đã khởi động)
new-server$ bin/stop

# Di chuyển dữ liệu mới, bạn cũng có thể xóa nó
new-server$ mkdir backup-new-server
new-server$ mv config/ data/ backup-new-server/

# Điền lại thư mục config/data
new-server$ tar --extract --file backup-old-server.tar

# Khởi động các container
new-server$ bin/up
```

#### Docker Compose

```bash
# Tắt máy an toàn phiên bản cũ
old-server$ docker stop sharelatex
old-server$ docker stop mongo redis

# Tạo tar-ball
old-server$ tar --create --file backup-old-server.tar ~/OVERLEAF_data ~/mongo_data ~/redis_data

# Sao chép tệp backup-old-server.tar từ old-server sang
# new-server bằng bất kỳ phương thức nào phù hợp

# Tắt an toàn phiên bản mới (nếu đã khởi động)
new-server$ docker stop sharelatex
new-server$ docker stop mongo redis

# Di chuyển dữ liệu mới, bạn cũng có thể xóa nó
new-server$ mkdir backup-new-server
new-server$ mv ~/OVERLEAF_data ~/mongo_data ~/redis_data backup-new-server/

# Điền lại các thư mục dữ liệu
new-server$ tar --extract --file backup-old-server.tar

# Khởi động các container
new-server$ docker start mongo redis
new-server$ docker start sharelatex
```

Tùy thuộc vào **docker-compose.yml** tệp của bạn, bạn có thể cần điều chỉnh đường dẫn của các `mongo`, `redis`, `overleaf` volume.

{% hint style="info" %}
Khi chạy với vai trò người dùng root (hoặc với sudo), tar sẽ giữ nguyên chủ sở hữu/nhóm của tệp và quyền truy cập, điều này rất quan trọng khi khôi phục bản sao lưu.
{% endhint %}

### Thư mục chi tiết

{% hint style="info" %}
Các thư mục sau có thêm gợi ý:

* (b) bao gồm trong sao lưu, tốt nhất khi phiên bản đã dừng để đảm bảo tính nhất quán
* (d) có thể bị xóa
* (e) các tệp tạm thời, có thể bị xóa khi phiên bản đã dừng
  {% endhint %}

1. `~/mongo_data` (b)
   * thư mục dữ liệu mongodb
2. `~/redis_data` (b)
   * thư mục dữ liệu db của redis
3. `~/overleaf_data`
   1. bin
      1. synctex (d)
         * không còn dùng trong bản phát hành mới nhất, trước đây đã dùng một tệp nhị phân synctex tùy chỉnh (synctex được dùng để ánh xạ nguồn giữa các tệp .tex và pdf)
   2. data
      1. cache (e)
         * bộ nhớ đệm tệp nhị phân cho các lần biên dịch
      2. biên dịch (e)
         * việc biên dịch latex diễn ra ở đây
      3. db.sqlite (d)
         * không còn dùng trong bản phát hành mới nhất, trước đây lưu chi tiết bộ nhớ đệm clsi (hoặc đã chuyển sang các map đơn giản trong bộ nhớ hoặc chúng tôi quét đĩa)
      4. db.sqlite-wal (d)
         * không còn dùng trong bản phát hành mới nhất, xem db.sqlite
      5. output (e)
         * lưu trữ đầu ra biên dịch latex để phục vụ cho client
      6. template\_files (b)
         * ảnh xem trước của hệ thống mẫu (chỉ Server Pro)
      7. user\_files (b)
         * các tệp nhị phân của dự án
      8. history (b)
         * các tệp lịch sử đầy đủ của dự án
   3. tmp
      1. dumpFolder (e)
         * các tệp tạm thời từ việc xử lý tệp zip
      2. uploads (e)
         * đệm cho các lượt tải tệp lên (tệp nhị phân/tải lên dự án mới từ zip)
      3. projectHistories (e)
         * các tệp tạm thời cho việc di chuyển toàn bộ lịch sử dự án


---

# 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/data-and-backups.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.
