nâng cấp từ postgres 9.1 lên 9.3 trên máy chủ Ubuntu


27

Tôi có máy chủ sản xuất của mình (ubfox 13.10) đang chạy với postgresql 9.1.

Tôi muốn sử dụng một vài tính năng của 9.3, do đó muốn nâng cấp.

Ai đó có thể giúp tôi nâng cấp từ 9.1 lên 9.3 để có thời gian chết không quá 30 phút. hoặc là?

Mối quan tâm chính là ngăn ngừa mất dữ liệu hoặc dư thừa tệp.


2
Các tài liệu Postgres thực sự tốt. google.co.uk/#q=postgres+upTHER+from+9.1+to+9.3
Phil

Tôi không phải là một DBA per se (phải chăm sóc cài đặt Postgres kỳ quặc và thậm chí là odder mysql;}), và bài đăng này đã cũ, nhưng tại sao bạn lại sử dụng bất kỳ bản phát hành Ubuntu X.10 nào cho prod thay vì X.04 LTS?
tink

Câu trả lời:


28

Về cơ bản, có ba cách nâng cấp PostgreSQL từ các phiên bản chính khác nhau (ví dụ: 9.1 lên 9.3).

Nâng cấp với pg_dump

Cách đầu tiên, và được khuyến nghị nếu có thể, là thực hiện kết xuất phiên bản cũ (9.1) bằng cách sử dụng nhị phân của phiên bản mới hơn (9.3) và khôi phục nó trên cụm mới được tạo từ phiên bản mới hơn.

Cách tiếp cận này, nói chung, là chậm hơn, nhưng cũng khả thi nhất. Một mẹo để làm cho nó nhanh hơn, là sử dụng đồng thời. Để kết xuất với các công việc song song, bạn có thể làm:

$ pg_dump --format=directory --jobs=4 --no-synchronized-snapshots --file=/path/to/mydump mydatabase

Bạn sẽ phải làm điều đó cho từng cơ sở dữ liệu bạn có, điều chỉnh --jobs=4giá trị thành bất kỳ giá trị nào (kiểm tra một số giá trị từ 2 đến số lõi và xem cái nào cho tốc độ tốt hơn). Ngoài ra, trong giai đoạn này, không ai được kết nối với cơ sở dữ liệu, bất kỳ sửa đổi nào cũng sẽ dẫn đến kết xuất bị hỏng (vì tùy chọn không an toàn --no-synchronized-snapshots).

Sau đó, bạn có thể khôi phục bạn kết xuất vào trường hợp mới bằng cách sử dụng pg_restore:

$ createdb <options> -T template0 mydatabase
$ pg_restore --exit-on-error --jobs=4 --dbname=mydatabase /path/to/mydump

Sau đó, nên chạy ANALYZEtrên cơ sở dữ liệu của bạn:

$ vacuumdb --analyze-only mydatabase

(nếu bạn có đủ thời gian, chỉ chạy --analyzeđến VACUUMcơ sở dữ liệu và cập nhật bản đồ hiển thị)

Nâng cấp với pg_upTHER

Một lựa chọn khác, là sử dụng contribpg_upgrade . Sử dụng --linkphương thức này cung cấp một cách thực sự nhanh chóng để nâng cấp PostgreSQL.

Trước khi sử dụng, bạn phải tạo một bản sao lưu của toàn bộ thư mục dữ liệu, bởi vì trong --linkchế độ, nếu có sự cố, bạn có thể mất cả dữ liệu (mới và cũ). Ngoài ra, đọc toàn bộ tài liệu và đặc biệt là các ghi chú ở phía dưới (có một số hạn chế đối với pg_upTHER).

CẬP NHẬT: Vui lòng sử dụng --checktùy chọn trước khi chạy lệnh dứt khoát. Ngoài ra, đối với các cơ sở dữ liệu lớn, nên chạy lệnh này trong phiên màn hình.

Nâng cấp bằng công cụ sao chép dựa trên kích hoạt

Một tùy chọn khác để nâng cấp phiên bản, là sử dụng công cụ sao chép dựa trên trình kích hoạt. Giống như Slony, Bucardo và Londiste.

Đây là tùy chọn yêu cầu ít thời gian chết nhất có thể, nhưng nó là lựa chọn khó nhất để làm việc.

Để làm điều đó, bạn cần xây dựng một chủ nô trong đó chủ là phiên bản hiện tại của bạn (9.1) và nô lệ là phiên bản mới (9.3). Sau đó, bạn đợi đồng bộ hóa đầu tiên (với hệ thống vẫn đang được sản xuất), sau đó bạn đóng mọi người kết nối với cơ sở dữ liệu (thời gian ngừng hoạt động bắt đầu tại đây), đợi nô lệ bắt kịp, quảng bá nó (nô lệ) để làm chủ và chuyển hướng tất cả khách hàng / ứng dụng sang phiên bản mới này. Và bạn đã hoàn thành.

Tài liệu về Slony cung cấp từng bước để nâng cấp PostgreSQL bằng Slony .

Chọn cái nào

Vâng, như mọi khi phụ thuộc, tiếp tục:

  • Kết xuất + khôi phục là đáng tin cậy nhất, nhưng nói chung là chậm nhất (song song có thể cho kết quả khá tốt)
  • Pg_upTHER là một trong những lựa chọn tốt nhất cho thời gian chết ít (nếu bạn có thể sử dụng, xem các giới hạn), thường chỉ mất vài phút, ngay cả đối với cơ sở dữ liệu lớn
  • Bản sao kích hoạt, không nghi ngờ gì là cái cho thời gian chết ít nhất có thể (gần bằng 0), nhưng thực sự rất khó để đạt được và tôi chỉ khuyên dùng cho những người có kinh nghiệm (trên cả PostgreQuery và công cụ sao chép).

Tôi hy vọng tôi có thể giúp đỡ. Chúc may mắn.


Pg_upTHER cũng sẽ hoạt động từ 8.4.17 đến 9.3?
JohnMerlino

@JohnMerlino: có, pg_upTHER có thể nâng cấp từ phiên bản 8.3 trở lên (bao gồm 8.3, 8.4, 9.0, 9.1, 9.2, ...).
MatheusOl

"sử dụng nhị phân của phiên bản (9.3) mới hơn" có thể không cần thiết .. ít nhất tôi đã làm cho nó hoạt động mà không cần thực hiện thao tác đó.
ngọn lửa

@theicfire nó thực sự phụ thuộc vào cả hai phiên bản (phiên bản cũ và mới), nó có thể hoặc không thể hoạt động. Trong thực tế, nó sẽ hoạt động trong hầu hết các trường hợp, ngoại trừ một số thông báo lỗi thường có thể được sử dụng ... Quy trình chính thức là sử dụng tệp nhị phân của phiên bản mới hơn!
MatheusOl

Bạn có thể sử dụng pg_dumpallđể kết xuất tất cả các cơ sở dữ liệu trong một lần.
Matthieu

7

Thực hiện theo các bước sau để nâng cấp postgres 9.1 lên 9.3:

  1. Trước tiên, hãy tạo tệp /etc/apt/source.list.d/pgdg.list với các nội dung sau cho ubfox:

    deb http://apt.postgresql.org/pub/repos/apt/ saucy-pgdg main 
  2. Thêm khóa chạy sau:

     wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
  3. Cài đặt công cụ dành cho nhà phát triển với postgres:

    sudo apt-get install postgresql-9.3 postgresql-contrib-9.3 postgresql-server-dev-9.3 pgadmin3
  4. Để xác nhận cài đặt của chúng tôi, chúng tôi sẽ nhập vào sudo pg_lscluster và xem hai phiên bản PostgreQuery của chúng tôi đang chạy.

  5. Dừng dịch vụ PostTHERql:

    sudo service postgresql stop
  6. Xóa cụm 9.3 mặc định được tạo bởi cài đặt 9.3.

    sudo pg_dropcluster --stop 9.3 main
  7. Tạo một cụm 9.3 mới từ cụm 9.1 hiện có.

    sudo pg_upgradecluster 9.1 main
  8. Xác nhận rằng tải cụm mới và chúng tôi đang chạy PostgreSQL 9.3.

    sudo service postgresql start 9.3
  9. Nếu mọi thứ hoạt động giảm xuống 9,1 cụm.

    pg_dropcluster --stop 9.1 main

để biết thêm thông tin tham khảo liên kết này


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.