Mục lục

Không có mục lục

Cách chuyển toàn bộ dữ liệu của PostgreSQL đến máy chủ mới trên Ubuntu 20.04

Ngày đăng: 9 tháng 11 năm 2022

Ubuntu

Giới thiệu

Cơ sở dữ liệu phát triển theo thời gian và đôi khi nó lớn hơn dung lượng trên hệ thống file gốc. Khi chúng nằm trên cùng một phân vùng với phần còn lại của hệ điều hành, có thể sẽ dẫn đến tranh chấp I / O. RAID, Network Block Storage và các thiết bị khác có thể cung cấp khả năng dự phòng và cải thiện khả năng mở rộng cùng với các tính năng khác. Cho dù bạn thêm dung lượng, đánh giá các cách để tối ưu hóa hiệu suất hay đang tìm cách tận dụng các tính năng lưu trữ khác, hướng dẫn này sẽ giúp bạn cách di chuyển lại thư mục dữ liệu của PostgreSQL.

Điều kiện

Để hoàn thành theo hướng dẫn này, bạn cần có những điều sau:

  • Một máy chủ Ubuntu 20.04 với non-root user có đặc quyền sudo. Bạn có thể tìm hiểu thêm về cách thiết lập người dùng có các đặc quyền này trong hướng dẫn Thiết lập máy chủ ban đầu với Ubuntu 20.04.
  • PostgreSQL được cài đặt trên máy chủ của bạn. Nếu bạn chưa thiết lập, hướng dẫn Cách cài đặt và sử dụng PostgreSQL trên Ubuntu 20.04 có thể giúp bạn.

Các ví dụ trong hướng dẫn này sẽ liên quan đến việc di chuyển dữ liệu sang thiết bị Block Storage được gắn tại / mnt / volume_nyc1_01. Nếu bạn đang sử dụng Block Storage trên CloudFly, hãy đọc tài liệu về Cách tạo và thiết lập Volumes để sử dụng máy chủ ảo, để được hướng dẫn cách gắn Volumes của mình trước khi tiếp tục với bài viết này. Tuy nhiên, bất kể bộ nhớ cơ bản bạn sử dụng là gì, các bước dưới đây có thể giúp bạn di chuyển thư mục dữ liệu đến một vị trí mới.

Bước 1: Di chuyển Thư mục dữ liệu PostgreSQL

Trước khi chúng ta bắt đầu với việc di chuyển thư mục dữ liệu của PostgreSQL, hãy xác minh vị trí hiện tại bằng cách bắt đầu một phiên PostgreSQL tương tác. Trong lệnh dưới đây, psql là lệnh để vào màn hình tương tác và -u postgres yêu cầu sudo thực thi psql với tư cách là người dùng postgres của hệ thống:

  1. sudo -u postgres psql

Khi bạn đã mở ra PostgreSQL, hãy sử dụng lệnh sau để hiển thị thư mục dữ liệu hiện tại:

  1. SHOW data_directory;
Output
data_directory ----------------------------- /var/lib/postgresql/12/main (1 row)

Kết quả này xác nhận rằng PostgreSQL đã được cấu hình để sử dụng thư mục dữ liệu mặc định, / var / lib / postgresql / 12 / main, vì vậy đó là thư mục bạn cần di chuyển. Khi bạn đã xác nhận thư mục trên hệ thống của mình, bạn có thể đóng psql ngay tức thì bằng cách chạy \ q meta-command:

  1. \q

Để đảm bảo tính toàn vẹn của dữ liệu, hãy dừng PostgreSQL trước khi bạn thực hiện các thay đổi đối với thư mục dữ liệu:

  1. sudo systemctl stop postgresql

systemctl không hiển thị kết quả của tất cả các lệnh quản lý dịch vụ. Để xác minh rằng bạn đã dừng dịch vụ thành công, hãy sử dụng lệnh sau:

  1. sudo systemctl status postgresql

Output này sẽ cho bạn biết rằng PostgreSQL inactive (dead), có nghĩa là nó đã bị dừng:

Output
● postgresql.service - PostgreSQL RDBMS Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor pr> Active: inactive (dead) since Thu 2022-06-30 16:55:53 UTC; 12s ago Process: 13058 ExecStart=/bin/true (code=exited, status=0/SUCCESS) Main PID: 13058 (code=exited, status=0/SUCCESS)

Bây giờ máy chủ PostgreSQL không còn chạy nữa, hãy sao chép thư mục cơ sở dữ liệu hiện có vào vị trí mới bằng rsync. Sử dụng lệnh -a để giữ nguyên các quyền và các thuộc tính thư mục khác, và lệnh -v cung cấp đầu ra giúp bạn theo dõi tiến trình. Bạn sẽ bắt đầu rsync từ thư mục postgresql để làm theo cấu trúc thư mục gốc ở vị trí mới. Bằng cách tạo thư mục postgresql đó trong thư mục mount-point và giữ quyền sở hữu bởi người dùng PostgreSQL, bạn có thể tránh các vấn đề về quyền cho các bản nâng cấp trong tương lai.

Lưu ý: Hãy chắc chắn rằng không có dấu gạch chéo trên thư mục, nhưng bạn có thể thêm vào nếu sử dụng TAB hoàn thành. Nếu bạn làm bao gồm dấu gạch chéo, rsync sẽ loại bỏ nội dung của thư mục vào điểm gắn kết thay vì sao chép qua chính thư mục đó.

Thư mục phiên bản 12 không hoàn toàn cần thiết vì bạn đã xác định vị trí một cách rõ ràng trong tệp postgresql.conf, nhưng việc tuân theo quy ước dự án chắc chắn sẽ không ảnh hưởng gì, đặc biệt nếu trong tương lai có nhu cầu chạy nhiều phiên bản của PostgreSQL:

  1. sudo rsync -av /var/lib/postgresql /mnt/volume_nyc1_01

Khi quá trình sao chép hoàn tất, hãy đổi tên thư mục hiện tại bằng phần mở rộng .bak và giữ nó cho đến khi bạn xác nhận rằng quá trình di chuyển thành công. Điều này sẽ giúp tránh phát sinh nhầm lẫn khi có các thư mục có tên giống nhau ở cả vị trí mới và vị trí cũ:

  1. sudo mv /var/lib/postgresql/12/main /var/lib/postgresql/12/main.bak

Bây giờ bạn đã sẵn sàng định cấu hình PostgreSQL để truy cập vào thư mục dữ liệu ở vị trí mới của nó.

Bước 2: Cấu hình PostgreSQL trên server mới

Theo mặc định, cấu hình chỉ thị data_directory được đặt thành /var/lib/postgresql/12/main trong tệp /etc/postgresql/12/main/postgresql.conf. Chỉnh sửa tệp này để phản ánh thư mục dữ liệu mới:

  1. sudo nano /etc/postgresql/12/main/postgresql.conf

Tìm dòng bắt đầu bằng data_directory và thay đổi đường dẫn dưới đây để phản ánh vị trí mới. Trong ngữ cảnh của hướng dẫn này, chỉ thị cập nhật sẽ được viết là:

/etc/postgresql/12/main/postgresql.conf
. . .
data_directory = '/mnt/volume_nyc1_01/postgresql/12/main'
. . .

Lưu và đóng tệp bằng cách nhấn CTRL + X, Y, sau đó ENTER. Đây là tất cả những gì bạn cần làm để cấu hình PostgreSQL sử dụng vị trí thư mục dữ liệu mới. Tại thời điểm này, tất cả những gì còn lại là khởi động lại dịch vụ PostgreSQL và kiểm tra xem nó có thực sự trỏ đến đúng thư mục dữ liệu hay không.

Bước 3: Khởi động lại PostgreSQL

Sau khi thay đổi chỉ thị data-directory trong tệp postgresql.conf, hãy tiếp tục và khởi động máy chủ PostgreSQL bằng systemctl:

  1. sudo systemctl start postgresql

Để xác nhận rằng máy chủ PostgreSQL đã khởi động thành công, hãy kiểm tra lại trạng thái của nó bằng cách sử dụng systemctl:

  1. sudo systemctl status postgresql

Nếu service khởi động chính xác, dòng Active sẽ cho biết active (exited) trong output của lệnh:

Output
● postgresql.service - PostgreSQL RDBMS Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor pr> Active: active (exited) since Thu 2022-06-30 16:58:17 UTC; 2s ago Process: 13143 ExecStart=/bin/true (code=exited, status=0/SUCCESS) Main PID: 13143 (code=exited, status=0/SUCCESS)

Cuối cùng, để đảm bảo rằng thư mục dữ liệu mới đang thực sự được sử dụng, hãy mở yêu cầu PostgreSQL ngay:

  1. sudo -u postgres psql

Kiểm tra lại giá trị cho thư mục dữ liệu:

  1. SHOW data_directory;
Output
data_directory ----------------------------------------- /mnt/volume_nyc1_01/postgresql/12/main (1 row)

Điều này xác nhận rằng PostgreSQL đang sử dụng vị trí thư mục dữ liệu mới. Sau đó, hãy dành một chút thời gian để đảm bảo rằng bạn có thể truy cập cơ sở dữ liệu của mình cũng như tương tác với dữ liệu bên trong. Sau khi đã xác minh toàn bộ mọi dữ liệu hiện có, bạn có thể xóa thư mục dữ liệu sao lưu:

  1. sudo rm -Rf /var/lib/postgresql/12/main.bak

Như vậy, bạn đã di chuyển thành công thư mục dữ liệu PostgreSQL của mình sang một vị trí mới.

Kết luận

Nếu bạn đã theo dõi, cơ sở dữ liệu của bạn sẽ chạy cùng với thư mục dữ liệu của nó ở vị trí mới và bạn đã hoàn thành một bước quan trọng để có thể mở rộng bộ nhớ của mình. Bạn cũng có thể tham khảo 5 Thiết lập Máy chủ Chung cho Ứng dụng Web của Bạn để có thêm ý tưởng về cách tạo cơ sở hạ tầng máy chủ giúp bạn mở rộng quy mô và tối ưu hóa các ứng dụng web.

0 câu trả lời