memutakhirkan dari postgres 9.1 ke 9.3 di server ubuntu


27

Saya memiliki server produksi saya (ubuntu 13.10) berjalan dengan postgresql 9.1.

Saya ingin menggunakan beberapa fitur 9.3, karenanya ingin memutakhirkan.

Bisakah seseorang membantu saya dengan meningkatkan dari 9,1 ke 9,3 sehingga ada downtime tidak lebih dari 30 menit. atau lebih?

Perhatian utama adalah mencegah kehilangan data atau redundansi file.



Saya bukan DBA per se (harus merawat Postgres aneh dan bahkan lebih aneh mysql;}), dan posting ini sudah tua, tapi mengapa Anda menggunakan rilis Ubuntu X.10 untuk prod daripada X.04 LTS?
tink

Jawaban:


28

Pada dasarnya ada tiga cara untuk meningkatkan PostgreSQL dari berbagai versi utama (mis. 9.1 hingga 9.3).

Memutakhirkan dengan pg_dump

Yang pertama, dan direkomendasikan jika mungkin, adalah melakukan dump dari versi lama (9.1) menggunakan biner dari versi yang lebih baru (9.3) dan mengembalikannya pada klaster baru yang dibuat dari versi yang lebih baru.

Pendekatan ini, umumnya, yang lebih lambat, tetapi juga yang paling layak. Salah satu tip untuk membuatnya lebih cepat, adalah menggunakan konkurensi. Untuk melakukan pekerjaan paralel, Anda dapat melakukan:

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

Anda harus melakukannya untuk setiap basis data yang Anda miliki, sesuaikan --jobs=4nilainya dengan nilai apa pun (uji beberapa nilai dari 2 hingga jumlah inti, dan lihat mana yang memberikan kecepatan lebih baik). Juga, selama fase ini, tidak ada yang harus terhubung ke database, modifikasi apa pun akan menghasilkan dump yang rusak (karena opsi yang tidak aman --no-synchronized-snapshots).

Setelah itu, Anda dapat mengembalikan dump ke instance baru menggunakan pg_restore:

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

Setelah itu, disarankan untuk berjalan ANALYZEdi database Anda:

$ vacuumdb --analyze-only mydatabase

(jika Anda dapat membayar waktu, jalankan hanya --analyzeuntuk juga VACUUMdatabase dan perbarui peta visibilitas)

Memutakhirkan dengan pg_upgrade

Pilihan lain, adalah menggunakan contribpg_upgrade . Menggunakan --linkmetode ini menyediakan cara yang sangat cepat untuk memutakhirkan PostgreSQL.

Sebelum menggunakan, Anda harus membuat cadangan seluruh direktori data, karena dalam --linkmode, jika terjadi kesalahan, Anda dapat kehilangan kedua data (baru dan lama). Baca juga seluruh dokumen dan khususnya catatan di bagian bawah (ada beberapa batasan untuk pg_upgrade).

UPDATE: Silakan gunakan --checkopsi sebelum menjalankan perintah definitif. Juga, untuk basis data besar disarankan untuk menjalankan perintah ini dalam sesi layar.

Tingkatkan versi menggunakan alat replikasi berbasis pemicu

Pilihan lain untuk meningkatkan versi, menggunakan alat replikasi berdasarkan pemicu. Seperti Slony, Bucardo, dan Londiste.

Ini adalah opsi yang membutuhkan waktu henti sesedikit mungkin, tetapi ini adalah yang paling sulit untuk dikerjakan.

Untuk melakukan itu Anda perlu membangun master-slave di mana master adalah versi Anda saat ini (9.1) dan slave adalah versi baru (9.3). Anda kemudian, tunggu sinkronisasi pertama (dengan sistem masih dalam produksi), setelah itu Anda menutup semua orang yang terhubung ke database (waktu henti dimulai di sini), menunggu budak untuk mengejar ketinggalan, mempromosikannya (budak) untuk dikuasai dan redirect semua klien / aplikasi ke versi baru ini. Dan kamu sudah selesai.

Dokumentasi Slony menyediakan langkah demi langkah untuk memutakhirkan PostgreSQL menggunakan Slony .

Yang mana yang harus dipilih

Yah, seperti biasa tergantung, melanjutkan:

  • The dump + restore adalah yang paling dapat diandalkan, tetapi umumnya yang paling lambat (paralelisme dapat memberikan hasil yang cukup bagus)
  • Pg_upgrade adalah salah satu opsi terbaik untuk sedikit waktu henti (jika Anda dapat menggunakan, lihat batasannya), seringkali hanya membutuhkan beberapa menit, bahkan untuk database besar
  • Replikasi pemicunya, tidak diragukan lagi adalah salah satu yang memberikan waktu henti sesedikit mungkin (mendekati nol), tetapi sangat sulit untuk dicapai dan saya sarankan hanya untuk orang yang berpengalaman (pada PostgreSQL dan alat replikasi).

Saya harap saya bisa membantu. Semoga berhasil.


Apakah pg_upgrade juga berfungsi dari 8.4.17 hingga 9.3?
JohnMerlino

@JohnMerlino: ya, pg_upgrade dapat memutakhirkan dari versi 8.3 atau lebih tinggi (ini termasuk 8.3, 8.4, 9.0, 9.1, 9.2, ...).
MatheusOl

"menggunakan biner dari versi yang lebih baru (9.3)" mungkin tidak perlu .. Saya setidaknya bisa bekerja tanpa melakukan sedikit itu.
theicfire

@ theicfire itu sebenarnya tergantung pada kedua versi (yang lama dan yang baru), mungkin atau mungkin tidak berfungsi. Pada kenyataannya itu akan berfungsi dalam banyak kasus, kecuali untuk beberapa pesan kesalahan yang biasanya dapat dimaafkan ... Prosedur resmi adalah menggunakan biner dari versi yang lebih baru!
MatheusOl

Anda mungkin dapat menggunakan pg_dumpalluntuk membuang semua database sekaligus.
Matthieu

7

Ikuti langkah-langkah ini untuk meningkatkan postgres 9.1 ke 9.3:

  1. Pertama buat file /etc/apt/sources.list.d/pgdg.list dengan konten berikut untuk ubuntu:

    deb http://apt.postgresql.org/pub/repos/apt/ saucy-pgdg main 
  2. Tambahkan kunci yang berjalan berikut:

     wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
  3. Instal alat pengembang dengan postgres:

    sudo apt-get install postgresql-9.3 postgresql-contrib-9.3 postgresql-server-dev-9.3 pgadmin3
  4. Untuk mengonfirmasi pemasangan kami, kami akan memasukkan "sudo pg_lsclusters" dan melihat dua versi PostgreSQL kami berjalan.

  5. Hentikan layanan Postgressql:

    sudo service postgresql stop
  6. Hapus cluster 9.3 default yang dibuat oleh 9.3 instal.

    sudo pg_dropcluster --stop 9.3 main
  7. Buat 9.3 cluster baru dari 9.1 cluster yang ada.

    sudo pg_upgradecluster 9.1 main
  8. Konfirmasikan bahwa cluster baru dimuat dan kami menjalankan PostgreSQL 9.3.

    sudo service postgresql start 9.3
  9. Jika semuanya berfungsi turun ke 9.1 cluster.

    pg_dropcluster --stop 9.1 main

untuk informasi lebih lanjut lihat tautan ini


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.