อัปเกรดจาก postgres 9.1 เป็น 9.3 บนเซิร์ฟเวอร์ Ubuntu


27

ฉันมีเซิร์ฟเวอร์ที่ใช้งานจริงของฉัน (Ubuntu 13.10) ที่ทำงานกับ postgresql 9.1

ฉันต้องการใช้คุณสมบัติไม่กี่ข้อที่ 9.3 ดังนั้นจึงต้องการอัพเกรด

มีคนช่วยฉันอัปเกรดจาก 9.1 เป็น 9.3 เพื่อให้มีการหยุดทำงานไม่เกิน 30 นาที หรือไม่ก็?

ความกังวลหลักคือการป้องกันการสูญเสียข้อมูลหรือความซ้ำซ้อนไฟล์


2
เอกสาร Postgres นั้นดีจริงๆ google.co.uk/#q=postgres+upgrade+from+9.1+to+9.3
Philᵀᴹ

ฉันไม่ใช่ DBA ต่อ se (ต้องดูแล Postgres แปลก ๆ ติดตั้งและแม้แต่ odder mysql;}) และโพสต์นี้เก่า แต่ทำไมคุณต้องใช้ Ubuntu X.10 เพื่อแยงมากกว่า X.04 LTS?
ทิงค์

คำตอบ:


28

โดยทั่วไปมีสามวิธีในการอัปเกรด PostgreSQL จากเวอร์ชันหลักต่าง ๆ (เช่น 9.1 ถึง 9.3)

การอัพเกรดด้วย pg_dump

สิ่งแรกและแนะนำถ้าเป็นไปได้คือทำการดัมพ์ของเวอร์ชันเก่า (9.1) โดยใช้ไบนารี่ของเวอร์ชันที่ใหม่กว่า (9.3)และเรียกคืนบนคลัสเตอร์ใหม่ที่สร้างขึ้นจากเวอร์ชันใหม่

โดยทั่วไปวิธีนี้จะช้ากว่า แต่ก็เป็นไปได้มากที่สุด หนึ่งเคล็ดลับที่จะทำให้มันเร็วขึ้นคือใช้การทำงานพร้อมกัน หากต้องการดัมพ์กับงานแบบขนานคุณสามารถทำ:

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

คุณจะต้องทำสำหรับแต่ละฐานข้อมูลที่คุณมีอยู่ปรับ--jobs=4ค่าเป็นค่าใด ๆ (ทดสอบค่าบางค่าจาก 2 ถึงจำนวนแกนและดูว่าจะให้ความเร็วใดดีกว่า) นอกจากนี้ในระหว่างขั้นตอนนี้ไม่มีใครควรเชื่อมโยงกับฐานข้อมูลการดัดแปลงใด ๆ จะส่งผลให้เกิดการถ่ายโอนข้อมูลที่เสียหาย (เนื่องจากตัวเลือกที่ไม่ปลอดภัย--no-synchronized-snapshots)

หลังจากนั้นคุณสามารถเรียกคืนคุณถ่ายโอนข้อมูลลงในอินสแตนซ์ใหม่โดยใช้pg_restore:

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

หลังจากนั้นขอแนะนำให้รันANALYZEบนฐานข้อมูลของคุณ:

$ vacuumdb --analyze-only mydatabase

(ถ้าคุณสามารถจ่ายได้เวลาทำงานเฉพาะ--analyzeยังVACUUMฐานข้อมูลและการปรับปรุงการมองเห็นแผนที่)

การอัปเกรดด้วย pg_upgrade

อีกตัวเลือกหนึ่งคือการใช้contrib pg_upgradeใช้--linkวิธีการนี้เป็นวิธีที่รวดเร็วในการอัปเกรด PostgreSQL

ก่อนที่จะใช้คุณต้องสำรองข้อมูลของไดเรกทอรีข้อมูลทั้งหมดเพราะใน--linkโหมดหากมีสิ่งผิดปกติคุณอาจสูญเสียข้อมูลทั้งเก่าและใหม่ นอกจากนี้อ่านเอกสารทั้งหมดและบันทึกพิเศษที่ด้านล่าง (มีข้อ จำกัด บางประการสำหรับ pg_upgrade)

อัปเดต: โปรดใช้--checkตัวเลือกก่อนเรียกใช้คำสั่งที่ชัดเจน นอกจากนี้สำหรับฐานข้อมูลขนาดใหญ่แนะนำให้รันคำสั่งนี้ในเซสชันหน้าจอ

อัปเกรดโดยใช้เครื่องมือจำลองแบบตามทริกเกอร์

อีกทางเลือกหนึ่งในการอัปเกรดเวอร์ชันคือการใช้เครื่องมือจำลองข้อมูลตามทริกเกอร์ เช่น Slony, Bucardo และ Londiste

นี่คือตัวเลือกที่ต้องการการหยุดทำงานน้อยที่สุดเท่าที่จะเป็นไปได้ แต่เป็นวิธีที่ยากที่สุดในการทำงาน

ในการทำเช่นนั้นคุณจะต้องสร้าง master-slave โดยที่ master เป็นเวอร์ชันปัจจุบันของคุณ (9.1) และ slave เป็นเวอร์ชันใหม่ (9.3) จากนั้นรอการซิงค์ครั้งแรก (ขณะที่ระบบยังอยู่ในระหว่างการผลิต) หลังจากนั้นคุณปิดทุกคนที่เชื่อมต่อกับฐานข้อมูล (การหยุดทำงานเริ่มต้นที่นี่) รอให้สลาฟจับภาพเลื่อนขึ้น (ทาส) เป็นหลักและ เปลี่ยนเส้นทางไคลเอนต์ / แอปพลิเคชันทั้งหมดไปเป็นเวอร์ชั่นใหม่นี้ และคุณทำเสร็จแล้ว

เอกสาร Slony มีขั้นตอนโดยขั้นตอนในการอัพเกรด PostgreSQL ใช้ Slony

เลือกแบบไหน

เช่นเคยขึ้นอยู่กับการกลับมาทำงานต่อ:

  • การถ่ายโอนข้อมูล + การคืนค่าเป็นที่น่าเชื่อถือที่สุด แต่โดยทั่วไปช้าที่สุด (การขนานกันสามารถให้ผลลัพธ์ที่ค่อนข้างดี)
  • pg_upgrade เป็นหนึ่งในตัวเลือกที่ดีที่สุดสำหรับการหยุดทำงานเล็ก ๆ น้อย ๆ (ถ้าคุณสามารถใช้ดูข้อ จำกัด ) มันมักจะใช้เวลาเพียงไม่กี่นาทีแม้สำหรับฐานข้อมูลขนาดใหญ่
  • การจำลองแบบทริกเกอร์นั้นไม่ต้องสงสัยเลยว่าจะช่วยให้การหยุดทำงานน้อยที่สุด (ใกล้ศูนย์) แต่เป็นการยากที่จะบรรลุผลและฉันขอแนะนำสำหรับผู้ที่มีประสบการณ์เท่านั้น (ทั้ง PostgreSQL และเครื่องมือการจำลองแบบ)

ฉันหวังว่าฉันจะช่วย โชคดี.


pg_upgrade จะทำงานได้ตั้งแต่ 8.4.17 ถึง 9.3 หรือไม่
JohnMerlino

@JohnMerlino: ใช่ pg_upgrade สามารถอัพเกรดได้จากรุ่น 8.3 หรือสูงกว่า (ซึ่งรวมถึง 8.3, 8.4, 9.0, 9.1, 9.2, ... )
MatheusOl

"การใช้ไบนารีของรุ่นที่ใหม่กว่า (9.3)" อาจไม่จำเป็นอย่างนั้น .. อย่างน้อยฉันก็สามารถใช้งานได้โดยไม่ต้องทำบิตนั้น
Theicfire

@ ไฟไหม้มันจริงขึ้นอยู่กับทั้งสองรุ่น (เก่าและใหม่) มันอาจหรืออาจไม่ทำงาน ในความเป็นจริงมันจะทำงานในกรณีส่วนใหญ่ยกเว้นข้อความแสดงข้อผิดพลาดบางอย่างที่มักจะสามารถฝัง ... ขั้นตอนอย่างเป็นทางการคือการใช้ไบนารีของรุ่นที่ใหม่กว่าแม้ว่า!
MatheusOl

คุณอาจสามารถใช้pg_dumpallเพื่อถ่ายโอนฐานข้อมูลทั้งหมดในครั้งเดียว
Matthieu

7

ทำตามขั้นตอนเหล่านี้เพื่ออัปเกรด postgres 9.1 เป็น 9.3:

  1. ขั้นแรกให้สร้างไฟล์ /etc/apt/sources.list.d/pgdg.list โดยมีเนื้อหาต่อไปนี้สำหรับ ubuntu:

    deb http://apt.postgresql.org/pub/repos/apt/ saucy-pgdg main 
  2. เพิ่มการเรียกใช้คีย์ต่อไปนี้:

     wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
  3. ติดตั้งเครื่องมือสำหรับนักพัฒนาด้วย postgres:

    sudo apt-get install postgresql-9.3 postgresql-contrib-9.3 postgresql-server-dev-9.3 pgadmin3
  4. เพื่อยืนยันการติดตั้งของเราเราจะป้อน“ sudo pg_lsclusters” และดู PostgreSQL รุ่นที่สองของเราทำงาน

  5. หยุดบริการ Postgressql:

    sudo service postgresql stop
  6. ลบคลัสเตอร์ 9.3 ดีฟอลต์ที่สร้างโดยการติดตั้ง 9.3

    sudo pg_dropcluster --stop 9.3 main
  7. สร้างคลัสเตอร์ 9.3 ใหม่จาก 9.1 คลัสเตอร์ที่มีอยู่

    sudo pg_upgradecluster 9.1 main
  8. ยืนยันว่าคลัสเตอร์ใหม่โหลดและเรากำลังเรียกใช้ PostgreSQL 9.3

    sudo service postgresql start 9.3
  9. หากทุกอย่างทำงานได้ถึง 9.1 กลุ่ม

    pg_dropcluster --stop 9.1 main

สำหรับข้อมูลเพิ่มเติมดูที่ลิงค์นี้


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.