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:
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:
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:
Để đả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:
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:
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:
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ũ:
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:
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à:
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
:
Để 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
:
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:
Kiểm tra lại giá trị cho thư mục dữ liệu:
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:
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.