Di chuyển dữ liệu postgresql sang ổ đĩa khác


20

Tôi đang sử dụng AWS làm môi trường đám mây của mình. Tôi đã cài đặt PostgreSQL trên cùng ổ đĩa với dung lượng gốc của tôi. Tôi đã gắn và gắn ổ đĩa thứ hai vào ví dụ của tôi. Bây giờ tôi muốn chuyển tất cả dữ liệu PostgreSQL của mình sang ổ đĩa khác. Tôi vẫn đang ở chế độ phát triển vì vậy tôi có thể xóa dữ liệu cũ nếu việc này giúp chuyển dễ dàng hơn vào thời điểm này. Cách tốt nhất để làm việc này là gì?

Không gian bảng PostgreSQL là thứ mà tôi nên xem xét?


1
Không gian bảng sẽ là cách để đi nếu bạn muốn di chuyển một phần cơ sở dữ liệu của mình sang một ổ đĩa riêng.
Erwin Brandstetter

Câu trả lời này gợi ý rằng KHÔNGtablespaces nên đi trên ổ cứng ngoài: dba.stackexchange.com/a/62037/41823 Không chắc chắn tôi hiểu rủi ro nếu bạn đã đặt dữ liệu ở bên ngoài?
Statwonk

Câu trả lời:


19

Sau đây nên làm điều đó:

  1. Tắt PostgreSQL
  2. Hãy chắc chắn rằng PostgreSQL không chạy nữa
  3. Kiểm tra xem PostgreSQL thực sự đã dừng
  4. Sao chép thư mục dữ liệu cũ vào ổ đĩa mới
    Điều này thường được xác định thông qua tham số dòng lệnh ( -D) cho dịch vụ của bạn hoặc thông qua PGDATAbiến môi trường.
  5. Cập nhật cấu hình PostgreSQL của bạn (dịch vụ, môi trường var) để trỏ đến thư mục dữ liệu mới.
  6. Nếu bạn đã sao chép dữ liệu, hãy đổi tên thư mục dữ liệu cũ để đảm bảo PostgreQuery không thể tìm thấy nó nữa. Bằng cách đó, bạn sẽ nhận được thông báo lỗi nếu bạn không cấu hình đúng.
  7. Bắt đầu dịch vụ
  8. Nếu mọi thứ đang chạy tốt, bạn có thể xóa thư mục cũ.

Trong điểm thứ 4, ý của bạn là gì 'Điều này thường được xác định thông qua tham số dòng lệnh ...'?
codecool

@codecool: có một số cách khác nhau để xác định điều này. Thông thường đó là một phần của định nghĩa dịch vụ. Nhưng nó phụ thuộc vào hệ điều hành, phân phối và thay đổi cá nhân của bạn.
a_horse_with_no_name

Điều này đã làm việc nhưng tôi đã sử dụng regedit thay vì dòng lệnh cho Windows. Phù Đĩa của tôi sắp hết dung lượng nhưng giờ tôi có nó hoạt động an toàn ở nơi khác có đủ dung lượng.
rãnh

Dưới đây là bài đăng blog từng bước tốt đẹp với các chi tiết cụ thể, cập nhật cho phiên bản
ub

4
  1. Dừng dịch vụ postgresql
  2. cp -a source_data_directory Destination_data_directory
  3. chown -R postgres_user / Destination_data_directory
  4. xuất PGDATA = Destination_data_directory
  5. Thay đổi thư mục dữ liệu thành Destination_data_directory trong postgresql.conf
  6. bắt đầu pg_ctl

Tôi vui vì bạn đã nhớ chownlệnh cho thư mục mới.
RolandoMySQLDBA

0

Dưới đây là mô tả về cách di chuyển cơ sở dữ liệu PostgreSQL hiện tại sang vị trí mới (thư mục, phân vùng), trên Arch Linux (quy trình này phải tương tự đối với các bản phân phối Linux khác).

pg_dumpalllà một tiện ích để viết ra (kết xuất) tất cả các cơ sở dữ liệu PostgreSQL của một cụm thành một tệp tập lệnh. ... Nó thực hiện điều này bằng cách gọi pg_dumpcho từng cơ sở dữ liệu trong cụm. ...

Ví dụ:

## To dump all databases:
$ pg_dumpall > /tmp/db.out               ## backup all postgres databases to file
$ pg_dumpall -Fc dbname > /tmp/outfile   ## backup a database

## To reload database(s) from that file:
$ psql -f /tmp/db.out postgres

TL / DR

Bạn cần phải:

  • pg_dumpallcơ sở dữ liệu xuất ( )
  • tạo thư mục EMPTY mới
  • chỉnh sửa tập tin postgresql.conf
  • khởi động lại dịch vụ máy chủ postgres
  • tải dữ liệu cũ từ tệp kết xuất vào cơ sở dữ liệu mới

Tóm tắt các lệnh

Tôi sẽ để lại lời nhắc shell của mình (tên máy chủ ...) để làm rõ tôi đang ở trong trình bao nào.

[victoria@victoria ~]$ postgres --version     ## postgres (PostgreSQL) 11.2
[victoria@victoria claws]$ sudo -u postgres -i
[postgres@victoria ~]$ pg_dumpall > /tmp/db.out
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;              ## /var/lib/postgres/data
[postgres]# exit
[victoria@victoria postgres]$ mkdir /mnt/Vancouver/programming/rdb/postgres/postgresdb
## IMPORTANT: dir must be empty:
[victoria@victoria postgres]$ l postgresdb/   ## total 0
[victoria@victoria postgres]$ sudo chown postgres:root /mnt/Vancouver/programming/rdb/postgres/postgresdb/
[victoria@victoria postgres]$ sudo systemctl status postgresql
  ...
  May 02 19:55:21 victoria systemd[1]: Started PostgreSQL database server.
[postgres@victoria ~]$ initdb --locale en_US.UTF-8 -E UTF8 -D '/mnt/Vancouver/programming/rdb/postgres/postgresdb/data'
[postgres@victoria ~]$ exit
[victoria@victoria postgres]$ sudo vim /var/lib/postgres/data/postgresql.conf
  ## added line:
  data_directory = '/mnt/Vancouver/programming/rdb/postgres/postgresdb/data'
[victoria@victoria postgres]$ sudo -u postgres -i
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;
  ## /var/lib/postgres/data   ## << Old dir; need to restart postgresql service
[postgres]# \q
[victoria@victoria postgres]$ sudo systemctl restart postgresql
[victoria@victoria postgres]$ sudo -u postgres -i
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;
  ## /mnt/Vancouver/programming/rdb/postgres/postgresdb/data
[postgres]# \q
[postgres@victoria ~]$ psql -f /tmp/db.out postgres
  SET
  SET
  SET
  CREATE ROLE
  ALTER ROLE
  [ ... SNIP! ... ]
[postgres@victoria ~]$ exit
## Done!  :-D

Thí dụ

Xem bài đăng trên blog kèm theo của tôi, Cách di chuyển cơ sở dữ liệu PostgreSQL hiện có trên Arch Linux , để biết mã nhận xét và đầu ra .---


Tài liệu tham khảo

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.