Share via


Döküm ve geri yükleme kullanarak PostgreSQL veritabanınızı yükseltme

ŞUNLAR IÇIN GEÇERLIDIR: PostgreSQL için Azure Veritabanı - Tek Sunucu

Önemli

PostgreSQL için Azure Veritabanı - Tek Sunucu kullanımdan kaldırma yolundadır. PostgreSQL için Azure Veritabanı - Esnek Sunucu'ya yükseltmenizi kesinlikle öneririz. PostgreSQL için Azure Veritabanı - Esnek Sunucu'ya geçiş hakkında daha fazla bilgi için bkz. PostgreSQL için Azure Veritabanı Tek Sunucuya ne oluyor?.

Not

Bu belgelerde açıklanan kavramlar hem PostgreSQL için Azure Veritabanı - Tek Sunucu hem de PostgreSQL için Azure Veritabanı - Esnek Sunucu için geçerlidir.

Aşağıdaki yöntemleri kullanarak veritabanlarınızı daha yüksek bir ana sürüm sunucusuna geçirerek PostgreSQL için Azure Veritabanı'de dağıtılan PostgreSQL sunucunuzu yükseltebilirsiniz.

  • PostgreSQL pg_dump ve pg_restore kullanan çevrimdışı yöntem, verilerin geçirilmesi için kapalı kalma süresine neden olur. Bu belge bu yükseltme/geçiş yöntemini ele alır.
  • Veritabanı Geçiş Hizmeti (DMS) kullanan çevrimiçi yöntem. Bu yöntem daha az kapalı kalma süresi geçişi sağlar ve hedef veritabanını kaynakla eşitlenmiş durumda tutar ve ne zaman kesileceğini seçebilirsiniz. Ancak, DMS'yi kullanmak için ele alınması gereken birkaç ön koşul ve kısıtlama vardır. Ayrıntılar için bkz. DMS belgeleri.
  • PostgreSQL için Azure Veritabanı - Esnek Sunucu kullanılarak yerinde Ana Sürüm Yükseltme yöntemi. Yerinde ana sürüm yükseltme özelliği, tek bir tıklamayla sunucunun ana sürüm yükseltmesini gerçekleştirir. Bu, sunucuya erişen kullanıcıların ve uygulamaların kesintisini en aza indiren yükseltme işlemini basitleştirir. Yerinde yükseltmeler, yükseltmeden sonra geçerli sunucunun sunucu adını ve diğer ayarlarını koruduğundan ve uygulama bağlantı dizesi veri geçişi veya değişiklik gerektirmediğinden örneğin ana sürümünü yükseltmenin daha basit bir yoludur. Yerinde yükseltmeler, veri taşımaya göre daha hızlıdır ve daha az kesinti süresi yaşatır.

Aşağıdaki tabloda veritabanı boyutlarına ve senaryolarına göre bazı öneriler sağlanmaktadır.

Veritabanı/Senaryo Döküm/geri yükleme (Çevrimdışı) DMS (Çevrimiçi)
Küçük bir veritabanınız var ve yükseltme için kapalı kalma süresini karşılayabilirsiniz X
Küçük veritabanları (< 10 GB) X X
Küçük-orta boyutlu DB'ler (10 GB – 100 GB) X X
Büyük veritabanları (> 100 GB) X
Yükseltme için kapalı kalma süresini karşılayabilir (veritabanı boyutundan bağımsız olarak) X
Yeniden başlatma da dahil olmak üzere DMS önkoşullarını ele alabilir mi? X
Yükseltme işlemi sırasında DLL'ler ve kaydedilmemiş tablolar önlenebilir mi? X

Bu kılavuz, kaynak sunucunuzdan PostgreSQL'in daha yüksek bir sürümünü çalıştıran hedef sunucuya nasıl geçiş yapabileceğinizi gösteren birkaç çevrimdışı geçiş yöntemi ve örneği sağlar.

Not

PostgreSQL dökümü ve geri yüklemesi birçok şekilde gerçekleştirilebilir. Bu kılavuzda sağlanan yöntemlerden birini kullanarak geçiş yapmayı veya gereksinimlerinize uygun alternatif yolları seçebilirsiniz. Ek parametreler içeren ayrıntılı döküm ve geri yükleme söz dizimi için pg_dump ve pg_restore makalelerine bakın.

PostgreSQL için Azure Veritabanı ile döküm ve geri yükleme kullanma önkoşulları

Bu nasıl yapılır kılavuzunda adım adım ilerleyebilmek için şunları yapmanız gerekir:

Ek ayrıntılar ve dikkat edilmesi gerekenler

  • Portaldan "Bağlan ion Dizeleri" öğesini seçerek kaynak ve hedef veritabanlarının bağlantı dizesi bulabilirsiniz.
  • Sunucunuzda birden fazla veritabanı çalıştırıyor olabilirsiniz. Kaynak sunucunuza bağlanıp komutunu çalıştırarak \lveritabanlarının listesini bulabilirsiniz.
  • Hedef veritabanı sunucusunda karşılık gelen veritabanları oluşturun veya veritabanlarını pg_dump oluşturan komuta seçenek ekleyin-C.
  • Veritabanlarını yükseltmemelisiniz azure_maintenance veya şablon oluşturmamalısınız. Şablon veritabanlarında herhangi bir değişiklik yaptıysanız, değişiklikleri geçirmeyi veya bu değişiklikleri hedef veritabanında yapmayı seçebilirsiniz.
  • Veritabanının bu geçiş moduna uygun olduğunu belirlemek için yukarıdaki tablolara bakın.
  • Azure Cloud Shell'i kullanmak istiyorsanız oturum 20 dakika sonra zaman aşımına uğradı. Veritabanınızın boyutu 10 GB ise < , oturum zaman aşımına uğramadan yükseltmeyi tamamlayabilirsiniz. Aksi takdirde, 10-15 dakika içinde herhangi bir tuşa basmak gibi başka yollarla oturumu açık tutmanız gerekebilir.

Bu kılavuzda kullanılan örnek veritabanı

Bu kılavuzda, örneklerle göstermek için aşağıdaki kaynak ve hedef sunucular ile veritabanı adları kullanılır.

Açıklama Value
Kaynak sunucu (v9.5) pg-95.postgres.database.azure.com
Kaynak veritabanı bench5gb
Kaynak veritabanı boyutu 5 GB
Kaynak kullanıcı adı pg@pg-95
Hedef sunucu (v11) pg-11.postgres.database.azure.com
Hedef veritabanı bench5gb
Hedef kullanıcı adı pg@pg-11

Not

Esnek sunucu PostgreSQL sürüm 11'i destekler. Ayrıca esnek sunucu kullanıcı adı için de gerekli @dbservernamedeğildir.

Çevrimdışı geçiş yöntemlerini kullanarak veritabanlarınızı yükseltme

Yükseltmeleriniz için bu bölümde açıklanan yöntemlerden birini kullanmayı seçebilirsiniz. Görevleri gerçekleştirirken aşağıdaki ipuçlarını kullanabilirsiniz.

  • Kaynak ve hedef veritabanı için aynı parolayı kullanıyorsanız ortam değişkenini PGPASSWORD=yourPassword ayarlayabilirsiniz. Ardından psql, pg_dump ve pg_restore gibi komutları her çalıştırdığınızda parola sağlamanız gerekmez. Benzer şekilde gibi PGUSERPGSSLMODE ek değişkenler de ayarlayabilirsiniz. Bkz. PostgreSQL ortam değişkenleri.

  • PostgreSQL sunucunuz TLS/SSL bağlantıları gerektiriyorsa (PostgreSQL için Azure Veritabanı sunucularda varsayılan olarak açıktır), pg_restore aracının TLS ile bağlanması için bir ortam değişkeni PGSSLMODE=require ayarlayın. TLS olmadan, hata şu şekilde okunabilir: FATAL: SSL connection is required. Please specify SSL options and retry.

  • Windows komut satırında, pg_restore komutunu SET PGSSLMODE=require çalıştırmadan önce komutunu çalıştırın. Linux veya Bash'te, pg_restore komutunu export PGSSLMODE=require çalıştırmadan önce komutunu çalıştırın.

Önemli

Bu belgede sağlanan adımlar ve yöntemler, pg_dump/pg_restore komutlarının bazı örneklerini vermektir ve yükseltmeleri gerçekleştirmenin tüm olası yollarını temsil etmemektedir. Üretim ortamında kullanmadan önce bir test ortamındaki komutları test edip doğrulamanız önerilir.

Rolleri Geçirme

Roller (Kullanıcılar) genel nesnelerdir ve veritabanlarını geri yüklemeden önce yeni kümeye ayrı olarak geçirilmesi gerekir. Dökümünü almak için -r (--roles-only) seçeneğiyle ikili kullanabilirsiniz pg_dumpall . Kaynak Tek Sunucudan parolalarla tüm rolleri döküm etmek için:

pg_dumpall -r --host=mySourceServer --port=5432 --username=myUser@mySourceServer --database=mySourceDB > roles.sql

Kaynak Esnek Sunucudan parolalar olmadan tüm rol adlarını döküm etmek için:

pg_dumpall -r --no-role-passwords --host=mySourceServer --port=5432 --username=myUser --database=mySourceDB > roles.sql

Önemli

PostgreSQL için Azure Veritabanı - Esnek Sunucu kullanıcılarının, kullanıcı parolalarıyla birlikte veritabanı yetkilendirme tanımlayıcıları hakkında bilgi içeren pg_authid tablosuna erişmesine izin verilmez. Bu nedenle, kullanıcılar için parola almak mümkün değildir. Gizli dizilerinizi güvenli bir şekilde depolamak için lütfen Azure Key Vault kullanmayı göz önünde bulundurun.

roles.sql hedef sunucuda psql kullanarak içeriği geri yüklemeden önce ve başvurularını NOSUPERUSER düzenleyin ve NOBYPASSRLS kaldırın:

psql -f roles.sql --host=myTargetServer --port=5432 --username=myUser --dbname=postgres

Döküm betiğinin hatasız çalışması beklenmemelidir. Özellikle, betik kaynak kümede var olan her rol için CREATE ROLE yayımlayacağından, azure_pg_admin veya azure_superuser gibi bootstrap süper kullanıcısı için "rol zaten var" hatası almak kesindir. Bu hata zararsızdır ve yoksayılabilir. seçeneğinin --clean kullanılması, var olmayan nesneler hakkında zararsız ek hata iletileri oluşturabilir, ancak bunları ekleyerek --if-existsen aza indirebilirsiniz.

Yöntem 1: pg_dump ve psql kullanma

Bu yöntem iki adımdan oluşur. İlk olarak, kullanarak pg_dumpkaynak sunucudan bir SQL dosyasının dökümünü almaktır. İkinci adım, kullanarak psqldosyayı hedef sunucuya aktarmaktır. Ayrıntılar için lütfen Dışarı ve içeri aktarma kullanarak geçirme belgelerine bakın.

Yöntem 2: pg_dump ve pg_restore kullanma

Bu yükseltme yönteminde, önce kullanarak pg_dumpkaynak sunucudan bir döküm oluşturursunuz. Ardından bu döküm dosyasını kullanarak pg_restorehedef sunucuya geri yüklersiniz. Ayrıntılar için döküm ve geri yükleme kullanarak geçirme belgelerine bakın.

Yöntem 3: Döküm verilerinin hedef veritabanına akışını kullanma

PostgreSQL istemciniz yoksa veya Azure Cloud Shell kullanmak istiyorsanız bu yöntemi kullanabilirsiniz. Veritabanı dökümü doğrudan hedef veritabanı sunucusuna akışla gönderilir ve dökümü istemcide depolamaz. Bu nedenle, bu sınırlı depolama alanı olan bir istemci ile kullanılabilir ve hatta Azure Cloud Shell'den çalıştırılabilir.

  1. komutunu kullanarak \l veritabanının hedef sunucuda mevcut olduğundan emin olun. Veritabanı yoksa veritabanını oluşturun.

     psql "host=myTargetServer port=5432 dbname=postgres user=myUser password=###### sslmode=mySSLmode"
    
    postgres> \l   
    postgres> create database myTargetDB;
    
  2. Dökümü çalıştırın ve bir kanal kullanarak tek bir komut satırı olarak geri yükleyin.

    pg_dump -Fc --host=mySourceServer --port=5432 --username=myUser --dbname=mySourceDB | pg_restore  --no-owner --host=myTargetServer --port=5432 --username=myUser --dbname=myTargetDB
    

    Örneğin,

    pg_dump -Fc --host=pg-95.postgres.database.azure.com --port=5432 --username=pg@pg-95 --dbname=bench5gb | pg_restore --no-owner --host=pg-11.postgres.database.azure.com --port=5432 --username=pg@pg-11 --dbname=bench5gb
    
  3. Yükseltme (geçiş) işlemi tamamlandıktan sonra uygulamanızı hedef sunucuyla test edebilirsiniz.

  4. Sunucudaki tüm veritabanları için bu işlemi yineleyin.

Örneğin, aşağıdaki tabloda akış dökümü yöntemi kullanılarak geçişin ne kadar sürdüğü gösterilmektedir. Örnek veriler pgbench kullanılarak doldurulur. Veritabanınızda pgbench tarafından oluşturulan tablo ve dizinlerden farklı boyuta sahip farklı sayıda nesne olabileceğinden, veritabanınızı yükseltmenin gerçek süresini anlamak için veritabanınızın dökümünü ve geri yüklemesini test etmek kesinlikle önerilir.

Veritabanı Boyutu Yaklaşık süre
1 GB 1-2 dakika
5 GB 8-10 dakika
10 GB 15-20 dakika
50 GB 1-1,5 saat
100 GB 2,5-3 saat

Yöntem 4: Paralel döküm ve geri yükleme kullanma

Veritabanınızda birkaç daha büyük tablo varsa ve bu veritabanı için döküm ve geri yükleme işlemini paralelleştirmek istiyorsanız bu yöntemi göz önünde bulundurabilirsiniz. Ayrıca, yedekleme dökümlerini barındırmak için istemci sisteminizde yeterli depolama alanına ihtiyacınız vardır. Bu paralel döküm ve geri yükleme işlemi, geçişin tamamını tamamlamak için zaman tüketimini azaltır. Örneğin, geçişi 1-1,5 saat süren 50 GB pgbench veritabanı Yöntem 1 kullanılarak tamamlandı ve 2 bu yöntemin kullanılması 30 dakikadan kısa sürdü.

  1. Kaynak sunucunuzdaki her veritabanı için hedef sunucuda karşılık gelen bir veritabanı oluşturun.

    psql "host=myTargetServer port=5432 dbname=postgres user=myuser password=###### sslmode=mySSLmode"
    
    postgres> create database myDB;
    

    Örneğin,

    psql "host=pg-11.postgres.database.azure.com port=5432 dbname=postgres user=pg@pg-11 password=###### sslmode=require"
    psql (12.3 (Ubuntu 12.3-1.pgdg18.04+1), server 13.3)
    SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
    Type "help" for help.
    
    postgres> create database bench5gb;
    postgres> \q
    
  2. pg_dump komutunu iş sayısı = 4 (veritabanındaki tablo sayısı) ile bir dizin biçiminde çalıştırın. Daha büyük işlem katmanı ve daha fazla tablo ile bunu daha yüksek bir sayıya çıkarabilirsiniz. Bu pg_dump her iş için sıkıştırılmış dosyaları depolamak için bir dizin oluşturur.

    pg_dump -Fd -v --host=sourceServer --port=5432 --username=myUser --dbname=mySourceDB -j 4 -f myDumpDirectory
    

    Örneğin,

    pg_dump -Fd -v --host=pg-95.postgres.database.azure.com --port=5432 --username=pg@pg-95 --dbname=bench5gb -j 4 -f dump.dir
    
  3. Ardından yedeklemeyi hedef sunucuya geri yükleyin.

    $ pg_restore -v --no-owner --host=myTargetServer --port=5432 --username=myUser --dbname=myTargetDB -j 4 myDumpDir
    

    Örneğin,

    $ pg_restore -v --no-owner --host=pg-11.postgres.database.azure.com --port=5432 --username=pg@pg-11 --dbname=bench5gb -j 4 dump.dir
    

İpucu

Bu belgede bahsedilen işlem, PostgreSQL için Azure Veritabanı - Esnek sunucunuzu yükseltmek için de kullanılabilir. Temel fark, esnek sunucu hedefinin bağlantı dizesi olmadan olmasıdır@dbName. Örneğin, kullanıcı adı ise pg, tek sunucunun bağlantı dizesindeki kullanıcı adı olur pg@pg-95ve esnek sunucuyla birlikte kullanabilirsiniz pg.

Yükseltme/geçiş sonrası

Ana sürüm yükseltmesi tamamlandıktan sonra, tabloyu yenilemek pg_statistic için her veritabanında komutunu çalıştırmanızı ANALYZE öneririz. Aksi takdirde performans sorunlarıyla karşılaşabilirsiniz.

postgres=> analyze;
ANALYZE

Sonraki adımlar

  • Hedef veritabanı işlevinden memnun olduktan sonra eski veritabanı sunucunuzu bırakabilirsiniz.
  • PostgreSQL için Azure Veritabanı için - Yalnızca tek sunucu. Kaynak sunucuyla aynı veritabanı uç noktasını kullanmak istiyorsanız, eski kaynak veritabanı sunucunuzu sildikten sonra, eski veritabanı sunucusu adıyla bir okuma çoğaltması oluşturabilirsiniz. Kararlı çoğaltma durumu oluşturulduktan sonra çoğaltmayı durdurabilirsiniz; bu da çoğaltma sunucusunu bağımsız bir sunucu olarak yükseltecektir. Daha fazla ayrıntı için bkz . Çoğaltma .

Önemli

Yeni PostgreSQL yükseltilmiş sürümünü doğrudan üretim için kullanmadan önce test edilmesi kesinlikle önerilir. Bu, eski kaynak sürüm kaynağı ile daha yeni sürüm hedefi arasındaki sunucu parametrelerini karşılaştırmayı içerir. Lütfen bunların aynı olduğundan emin olun ve yeni sürüme eklenen tüm yeni parametreleri denetleyin. Sürümler arasındaki farkları burada bulabilirsiniz.