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:
- Yükseltmek istediğiniz altyapının daha düşük bir sürümünü çalıştıran bir kaynak PostgreSQL veritabanı sunucusu.
- İstenen ana sürüme sahip bir hedef PostgreSQL veritabanı sunucusu PostgreSQL için Azure Veritabanı sunucusu - Tek Sunucu veya PostgreSQL için Azure Veritabanı - Esnek Sunucu.
- Döküm ve geri yükleme komutlarını çalıştırmak için bir PostgreSQL istemci sistemi. Daha yüksek veritabanı sürümünü kullanmanız önerilir. Örneğin, PostgreSQL sürüm 9.6'dan 11'e yükseltiyorsanız lütfen PostgreSQL sürüm 11 istemcisini kullanın.
- PostgreSQL'in yüklü olduğu ve pg_dump ve pg_restore komut satırı yardımcı programlarının yüklü olduğu bir Linux veya Windows istemcisi olabilir.
- Alternatif olarak Azure Cloud Shell'i kullanabilir veya Azure portalının sağ üst kısmındaki menü çubuğundan Azure Cloud Shell'i seçebilirsiniz. Döküm ve geri yükleme komutlarını çalıştırmadan önce hesabınızda
az login
oturum açmanız gerekir.
- PostgreSQL istemciniz tercihen kaynak ve hedef sunucularla aynı bölgede çalışır.
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
\l
veritabanları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 gibiPGUSER
PGSSLMODE
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 komutunuexport 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-exists
en aza indirebilirsiniz.
Yöntem 1: pg_dump ve psql kullanma
Bu yöntem iki adımdan oluşur. İlk olarak, kullanarak pg_dump
kaynak sunucudan bir SQL dosyasının dökümünü almaktır. İkinci adım, kullanarak psql
dosyayı 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_dump
kaynak sunucudan bir döküm oluşturursunuz. Ardından bu döküm dosyasını kullanarak pg_restore
hedef 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.
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;
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
Yükseltme (geçiş) işlemi tamamlandıktan sonra uygulamanızı hedef sunucuyla test edebilirsiniz.
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ü.
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
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
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-95
ve 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.