> 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/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 trú đượ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à instance Overleaf lớn nhất 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 cho dữ liệu của bạn. Vui lòng bảo đảm 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 nâng cấp instance của bạn.

{% hint style="info" %}
Khi nâng cấp lên một Docker image mới, mọi di trú nào mà **không** chưa được chạy sẽ được thực thi tự động; 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 độ. Để 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ò như một 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 Overleaf:** lưu trữ 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ư bộ nhớ đệm tạm thời trên đĩa 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 instance của bạn được thiết lập.
{% endhint %}

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

Xem Folders in detail để biết thêm về bố cục thư mục trên đĩa.

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

Có ba kho lưu trữ cần được đưa vào khi thực hiệ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 lên lịch một khoảng thời gian bảo trì, trong đó người dùng không nên có thể truy cập instance 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 sẽ cần đưa instance của mình ngoại tuyến. Bắt đầu với Server Pro `3.5.0` quy 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 instance của bạn, bạn cần chạy `bin/docker-compose stop sharelatex` nếu bạn đang chạy một bản 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.

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 điều này, hãy chạy `bin/docker-compose start sharelatex` nếu bạn đang chạy một bản 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 chủ đang chạy instance Overleaf của bạn, lý tưởng nhất là ở một vị trí hoàn toàn khác.
* Nhân bản cơ sở dữ liệu sang nhiều instance MongoDB có thể mang lại một số dự phòng, nhưng không bảo vệ khỏi hỏng dữ liệu.
* Kiểm tra các bản sao lưu của bạn là cách tốt nhất để đảm bảo chúng đầy đủ và hoạt động.
  {% 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 bản triển khai Toolkit, đường dẫn nơi lưu các tệp không thể chỉnh sửa của bạn được chỉ định trong `config/overleaf.rc` bằng cách sử dụng `OVERLEAF_DATA_PATH` biến môi trường, nhưng, tùy thuộc vào thời điểm instance của bạn được tạo, đâ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 trữ 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 đẩy vào MongoDB.

Tính bền vững 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 theo mặc định cho **các** các bản cài đặt; người dùng hiện có 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 dùng các snapshot 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 để 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ó dữ liệu giá trị nào trong instance mới. Chúng tôi không có quy trình để gộp dữ liệu của các instance.

Giả sử instance mới chưa có dữ liệu, dưới đâ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 lại ở đó.

#### Toolkit

```bash
# Tắt instance cũ một cách an toàn
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 pháp nào phù hợp

# Tắt instance mới một cách an toàn (nếu đã khởi chạy)
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 instance cũ một cách an toàn
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 pháp nào phù hợp

# Tắt instance mới một cách an toàn (nếu đã khởi chạy)
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 `mongo`, `redis`, `overleaf` các volume.

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

### Chi tiết các thư mục

{% hint style="info" %}
Các thư mục sau có thêm ghi chú:

* (b) đưa vào bản sao lưu, tốt nhất khi instance đã dừng để bảo đảm tính nhất quán
* (d) có thể được xóa
* (e) các tệp tạm thời, có thể được xóa khi instance đã 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 binary 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. bộ nhớ đệm (e)
         * bộ nhớ đệm tệp nhị phân cho các lần biên dịch
      2. biên dịch (e)
         * Quá trình 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. đầu ra (e)
         * nơi lưu đầu ra biên dịch LaTeX để phục vụ cho máy khách
      6. template\_files (b)
         * bản xem trước hình ảnh của hệ thống mẫu (chỉ Server Pro)
      7. tệp người dùng (b)
         * các tệp nhị phân của dự án
      8. lịch sử (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. tải lên (e)
         * đệm cho việc 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 trú lịch sử đầy đủ của 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://ayakaleaf-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.
