Ubuntu 22.04’te PostgreSQL Veri Dizini Yeni Bir Yere Nasıl Taşınır
PostgreSQL’in veri dizinini taşımaya başlamadan önce, etkileşimli bir PostgreSQL oturumu başlatarak mevcut konumu doğrulayalım. Aşağıdaki komutta, psql
etkileşimli monitöre girme komutudur ve sistemin postgres kullanıcısı olarak yürütülmesini -u postgres
söyler :sudo
psql
sudo -u postgres psql
PostgreSQL istemini açtıktan sonra, mevcut veri dizinini göstermek için aşağıdaki komutu kullanın:
SHOW data_directory;
Output data_directory
-----------------------------
/var/lib/postgresql/14/main
(1 row)
Bu çıktı, PostgreSQL’in varsayılan veri dizinini kullanacak şekilde yapılandırıldığını onaylar /var/lib/postgresql/14/main
, yani taşımanız gereken dizin budur. Sisteminizdeki dizini onayladıktan sonra, meta komutu psql
çalıştırarak istemi kapatabilirsiniz : \q
\q
Verilerin bütünlüğünü sağlamak için, veri dizininde gerçekten değişiklik yapmadan önce PostgreSQL’i durdurun:
sudo systemctl stop postgresql
systemctl
tüm hizmet yönetimi komutlarının sonucunu görüntülemez. Hizmeti başarıyla durdurduğunuzu doğrulamak için aşağıdaki komutu kullanın:
sudo systemctl status postgresql
Çıktı size PostgreSQL’in olduğunu inactive (dead)
, yani durdurulduğunu söylemelidir:
Output○ postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor>
Active: inactive (dead) since Thu 2022-06-30 18:46:35 UTC; 27s ago
Process: 4588 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 4588 (code=exited, status=0/SUCCESS)
CPU: 1ms
Artık PostgreSQL sunucusu artık çalışmadığına göre, mevcut veritabanı dizinini ile yeni konuma kopyalayın rsync
. Bayrağın kullanılması -a
, izinleri ve diğer dizin özelliklerini korurken -v
, ilerlemeyi izlemenize yardımcı olacak ayrıntılı çıktılar sağlar. Yeni konumdaki orijinal dizin yapısını taklit etmek için dizinden rsync
başlayacaksınız . postgresql
Bu dizini bağlama noktası dizini içinde oluşturarak postgresql
ve PostgreSQL kullanıcısının sahipliğini koruyarak, gelecekteki yükseltmeler için izin sorunlarından kaçınabilirsiniz.
Not:
TAB
Dizinde, tamamlamayı kullanırsanız eklenebilecek bir eğik çizgi olmadığından emin olun. Sonuna bir eğik çizgi eklerseniz rsync
, dizinin içeriğini kopyalamak yerine dizinin içeriğini bağlama noktasına atar.
Sürüm dizini, 14
konumu dosyada açıkça tanımladığınız için kesinlikle gerekli değildir postgresql.conf
, ancak proje kuralına uymak, özellikle gelecekte birden fazla PostgreSQL sürümünü çalıştırmaya ihtiyaç duyulacaksa, kesinlikle zarar vermez:
sudo rsync -av /var/lib/postgresql /mnt/volume_nyc1_01
Kopyalama tamamlandıktan sonra, geçerli klasörü bir .bak
uzantıyla yeniden adlandırın ve taşımanın başarılı olduğunu onaylayana kadar saklayın. Bu, hem yeni hem de eski konumda benzer şekilde adlandırılmış dizinlere sahip olmaktan kaynaklanabilecek karışıklığı önlemeye yardımcı olacaktır:
sudo mv /var/lib/postgresql/14/main /var/lib/postgresql/14/main.bak
Artık yeni konumunda veri dizinine erişmek için PostgreSQL’i yapılandırmaya hazırsınız.
Adım 2 — Yeni Veri Konumuna İşaret Etme
Varsayılan olarak, data_directory
yapılandırma yönergesi dosyada /var/lib/postgresql/14/main
olarak ayarlanmıştır. /etc/postgresql/14/main/postgresql.conf
Yeni veri dizinini yansıtmak için bu dosyayı düzenleyin:
sudo nano /etc/postgresql/14/main/postgresql.conf
İle başlayan çizgiyi bulun ve data_directory
takip eden yolu yeni konumu yansıtacak şekilde değiştirin. Bu öğretici bağlamında, güncellenen yönerge şu şekilde yazılacaktır: /etc/postgresql/14/main/postgresql.conf
. . .
data_directory = '/mnt/volume_nyc1_01/postgresql/14/main'
. . .
CTRL + X
, Y
ve ardından tuşlarına basarak dosyayı kaydedin ve kapatın ENTER
. PostgreSQL’i yeni veri dizini konumunu kullanacak şekilde yapılandırmak için yapmanız gereken tek şey budur. Bu noktada geriye kalan tek şey PostgreSQL hizmetini yeniden başlatmak ve gerçekten doğru veri dizinine işaret edip etmediğini kontrol etmektir.
Adım 3 — PostgreSQL’i Yeniden Başlatma
data-directory
Dosyadaki yönergeyi değiştirdikten sonra postgresql.conf
devam edin ve aşağıdakileri kullanarak PostgreSQL sunucusunu başlatın systemctl
:
sudo systemctl start postgresql
PostgreSQL sunucusunun başarıyla başlatıldığını doğrulamak için aşağıdakileri kullanarak durumunu tekrar kontrol edin systemctl
:
sudo systemctl status postgresql
Hizmet doğru bir şekilde başlatıldıysa , komutun çıktısında Active
satır şunu söyleyecektir : active (exited)
Output● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor>
Active: active (exited) since Thu 2022-06-30 18:50:18 UTC; 3s ago
Process: 4852 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 4852 (code=exited, status=0/SUCCESS)
CPU: 1ms
Son olarak, yeni veri dizininin gerçekten kullanımda olduğundan emin olmak için PostgreSQL komut istemini açın:
sudo -u postgres psql
Veri dizini için değeri tekrar kontrol edin:
SHOW data_directory;
Output data_directory
----------------------------------------
/mnt/volume_nyc1_01/postgresql/14/main
(1 row)
Bu, PostgreSQL’in yeni veri dizini konumunu kullandığını doğrular. Bunu takiben, veritabanınıza erişebildiğinizden ve içindeki verilerle etkileşim kurabildiğinizden emin olmak için bir dakikanızı ayırın. Mevcut verilerin bütünlüğünü doğruladıktan sonra, yedek veri dizinini kaldırabilirsiniz:
sudo rm -Rf /var/lib/postgresql/14/main.bak
Bununla, PostgreSQL veri dizininizi başarıyla yeni bir konuma taşıdınız.