Làm thế nào để di chuyển một thư mục dữ liệu PostgreSQL đến một vị trí mới trên Ubuntu 16.04

Giới thiệu

Cơ sở dữ liệu phát triển theo thời gian, đôi khi phát triển không gian trên hệ thống tệp ban đầu của họ. Bạn cũng có thể chạy vào tranh chấp I / O 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. RAID, lưu trữ khối mạng và các thiết bị khác có thể cung cấp dự phòng và các tính năng mong muốn khác. Cho dù bạn đang thêm nhiều không gian hơn, đánh giá các cách để tối ưu hóa hiệu suất hay 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ẽ hướng dẫn bạn qua việc di chuyển thư mục dữ liệu của PostgreSQL.

Điều kiện tiên quyết

Để hoàn thành hướng dẫn này, bạn sẽ cần:

Trong ví dụ này, chúng tôi sẽ chuyển dữ liệu sang thiết bị lưu trữ khối được gắn tại /mnt/volume-nyc1-01. Nếu bạn đang sử dụng Bộ nhớ khối trên DigitalOcean, hướng dẫn này có thể giúp bạn gắn kết khối lượng của mình trước khi tiếp tục với hướng dẫn này.

Không có vấn đề gì lưu trữ cơ bản bạn sử dụng, các bước sau đâ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

Để chuẩn bị cho việc 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 dòng bên dưới, 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 là người dùng postgres của hệ thống:

sudo -u postgres psql

Khi bạn đã nhập màn hình, hãy chọn thư mục dữ liệu:

SHOW data_directory;

Output       data_directory       
------------------------------
/var/lib/postgresql/9.5/main
(1 row)

Đầu ra 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/9.5/main, đó là thư mục chúng ta cần di chuyển. Khi bạn đã xác nhận thư mục trên hệ thống của mình, hãy nhập \q bỏ thuốc lá.

Để đảm bảo tính toàn vẹn của dữ liệu, chúng tôi sẽ tắt PostgreSQL trước khi chúng tôi thực sự thực hiện các thay đổi đối với thư mục dữ liệu:

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 bạn đã thành công, hãy sử dụng lệnh sau:

sudo systemctl status postgresql

Bạn có thể xác nhận nó bị tắt nếu dòng cuối cùng của đầu ra cho bạn biết máy chủ bị dừng:

Output. . .
Jul 22 16:22:44 ubuntu-512mb-nyc1-01 systemd[1]: Stopped PostgreSQL RDBMS.

Bây giờ máy chủ bị tắt, chúng tôi sẽ sao chép thư mục cơ sở dữ liệu hiện có đến vị trí mới với rsync. Sử dụng -a cờ bảo tồn các quyền và các thuộc tính thư mục khác trong khi -v cung cấp đầu ra tiết để bạn có thể theo dõi tiến trình.

Chú thích: Hãy chắc chắn rằng không có dấu gạch chéo trên thư mục, có thể được thêm nếu bạn sử dụng hoàn thành tab. Khi có dấu gạch chéo, rsync sẽ đổ nội dung của thư mục vào điểm lắp thay vì chuyển nó vào PostgreSQL danh mục:

Chúng tôi sẽ bắt đầu rsync từ postgresql thư mục để bắt chước cấu trúc thư mục gốc ở vị trí mới của chúng tôi. Bằng cách tạo ra điều đó postgresql thư mục trong thư mục điểm gắn kết và giữ lại quyền sở hữu của người dùng PostgreSQL, chúng tôi có thể tránh các vấn đề về quyền đối với các nâng cấp trong tương lai. Thư mục phiên bản, 9.5 không cần thiết vì chúng tôi đã xác định vị trí một cách rõ ràng trong postgresql.conf tập tin, nhưng theo quy ước của dự án chắc chắn sẽ không bị tổn thương, đặc biệt nếu có nhu cầu trong tương lai để chạy nhiều phiên bản của PostgreSQL.

sudo rsync -av /var/lib/postgresql /mnt/volume-nyc1-01

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

sudo mv /var/lib/postgresql/9.5/main /var/lib/postgresql/9.5/main.bak

Bây giờ chúng tôi đã sẵn sàng để chuyển sự chú ý của chúng tôi để cấu hình.

Bước 2 - Chỉ vào vị trí dữ liệu mới

PostgreSQL có một số cách để ghi đè các giá trị cấu hình. Theo mặc định, data_directory được đặt thành /var/lib/postgresql/9.5/main bên trong /etc/postgresql/9.5/main/postgresql.conf tập tin. Chỉnh sửa tệp này để phản ánh thư mục dữ liệu mới:

sudo nano /etc/postgresql/9.5/main/postgresql.conf

Tìm dòng bắt đầu bằng data_directory và thay đổi đường dẫn theo sau để phản ánh vị trí mới.

Trong trường hợp của chúng tôi, tệp được cập nhật trông giống như đầu ra bên dưới:

/etc/postgresql/9.5/main/postgresql.conf

. . .
data_directory = '/mnt/volume-nyc1-01/postgresql/9.5/main'
. . .

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

Chúng tôi đã sẵn sàng để bắt đầu PostgreSQL.

sudo systemctl start postgresql

sudo systemctl status postgresql

Để đảm bảo rằng thư mục dữ liệu mới thực sự được sử dụng, hãy khởi động trình giám sát PostgreSQL.

sudo -u postgres psql

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

SHOW data_directory;

Output            data_directory
-----------------------------------------
/mnt/volume-nyc1-01/postgresql/9.5/main
(1 row)

Bây giờ bạn đã khởi động lại PostgreSQL và xác nhận rằng nó đang sử dụng vị trí mới, hãy tận dụng cơ hội để đảm bảo rằng cơ sở dữ liệu của bạn có đầy đủ chức năng. Khi bạn đã xác minh tính toàn vẹn của bất kỳ dữ liệu hiện có nào, bạn có thể xóa thư mục dữ liệu sao lưu:

sudo rm -Rf /var/lib/postgresql/9.5/main.bak

Khởi động lại PostgreSQL một lần cuối để chắc chắn rằng nó hoạt động như mong đợi:

sudo systemctl restart postgresql

sudo systemctl status postgresql

Phần kết luận:

Nếu bạn đã theo dõi, cơ sở dữ liệu của bạn sẽ chạy với thư mục dữ liệu ở vị trí mới và bạn đã hoàn thành một bước quan trọng để có thể mở rộng dung lượng lưu trữ của mình. Bạn cũng có thể muốn xem 5 Thiết lập máy chủ chung cho ứng dụng web của bạn cho các ý 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.

Thêm Bình Luận: