Takip et

How To Move a MySQL Data Directory to a New Location on Ubuntu 18.04

Giriş MySQL veri dizininin varsayılan konumundan (genellikle /var/lib/mysql) başka bir konuma taşınması, sunucu yönetimi sırasında sıkça

Giriş

MySQL veri dizininin varsayılan konumundan (genellikle /var/lib/mysql) başka bir konuma taşınması, sunucu yönetimi sırasında sıkça karşılaşılan bir ihtiyaçtır. Bu işlem, disk alanını optimize etmek, daha büyük veya daha hızlı bir depolama birimine geçmek, farklı bir dosya sistemini kullanmak veya güvenlik nedenleriyle yapılabilir. Bu rehber, Ubuntu 18.04 işletim sistemi üzerinde çalışan bir MySQL sunucusunun veri dizinini güvenli ve doğru bir şekilde nasıl taşıyacağınızı adım adım anlatmaktadır.

Veri taşıma işlemi hassas olduğundan, başlamadan önce tüm verilerinizin yedeğini almanız hayati önem taşır. Yanlış yapılan bir adım, veri kaybına veya MySQL sunucunuzun çalışmamasına neden olabilir.

Önkoşullar ve Önemli Notlar

Bu rehbere başlamadan önce aşağıdaki maddeleri göz önünde bulundurmanız önemlidir:

* Yönetici Yetkileri (Root/Sudo): Tüm komutları çalıştırmak için sudo yetkisine sahip olmanız gerekmektedir.
* Yeni Konumda Yeterli Disk Alanı: Veri dizininizi taşıyacağınız yeni konumda, mevcut veri dizininizin boyutundan daha fazla boş disk alanı olduğundan emin olun.
* Veri Yedeklemesi: Bu, en kritik adımdır. Taşıma işlemine başlamadan önce mutlaka MySQL veritabanlarınızın tam bir yedeğini alın. Fiziksel kopyalama (bu rehberde ele alınacaktır) veya mysqldump gibi araçlarla mantıksal yedekleme yapabilirsiniz.
* Kesinti Süresi: Taşıma işlemi sırasında MySQL hizmeti durdurulacağı için, bu süre boyunca veritabanlarınıza erişim olmayacaktır. İşlemi planlarken bu kesinti süresini dikkate alın.
* Ubuntu 18.04 Özelliği: AppArmor: Ubuntu, güvenlik için AppArmor adlı bir güvenlik modülü kullanır. MySQL veri dizininin yeri değiştiğinde, AppArmor yapılandırmasını da güncellemek gerekecektir, aksi takdirde MySQL başlatılamaz.

Adım Adım Rehber: MySQL Veri Dizinini Taşıma

Aşağıdaki adımları dikkatlice uygulayarak MySQL veri dizininizi yeni bir konuma taşıyabilirsiniz.

Adım 1: Mevcut MySQL Veri Dizininin Konumunu Belirleme

MySQL’in mevcut veri dizini konumunu ve diğer önemli yapılandırma bilgilerini öğrenmek için my.cnf dosyasını kontrol edebilir veya doğrudan MySQL sunucusundan sorgulayabilirsiniz.

Varsayılan konum genellikle /var/lib/mysql‘dir, ancak emin olmak için aşağıdaki komutu kullanabilirsiniz:

sudo grep "datadir" /etc/mysql/mysql.conf.d/mysqld.cnf

Çıktı şöyle bir şey olacaktır:

datadir = /var/lib/mysql

Bu, mevcut veri dizininizin /var/lib/mysql olduğunu gösterir.

Adım 2: MySQL Hizmetini Durdurma

Veri bütünlüğünü sağlamak için taşıma işlemine başlamadan önce MySQL hizmetini durdurmanız gerekmektedir.

sudo systemctl stop mysql

Hizmetin başarıyla durdurulduğunu doğrulamak için aşağıdaki komutu kullanabilirsiniz:

sudo systemctl status mysql

Çıktıda Active: inactive (dead) ifadesini görmelisiniz.

Adım 3: Mevcut Veri Dizininin Yedeklenmesi

Her ihtimale karşı, mevcut veri dizininizin bir kopyasını farklı bir yere yedeklemek iyi bir uygulamadır. Bu, herhangi bir sorun durumunda hızlıca geri dönebilmenizi sağlar.

sudo cp -rp /var/lib/mysql /var/lib/mysql_yedek

Bu komut, /var/lib/mysql dizinini tüm izinleri ve zaman damgaları korunarak /var/lib/mysql_yedek konumuna kopyalar. Büyük veri dizinleri için bu işlem biraz zaman alabilir.

Adım 4: Veri Dizini Dosyalarını Yeni Konuma Kopyalama

Şimdi, MySQL veri dizinini yeni hedef konuma taşıyacağız. Bu rehberde yeni hedef konum olarak /mnt/disk2/mysql kullanıldığını varsayalım. Siz kendi ihtiyacınıza göre bu yolu değiştirebilirsiniz.

Öncelikle yeni hedef dizini oluşturun:

sudo mkdir -p /mnt/disk2/mysql

Ardından, mevcut veri dizinini yeni konuma kopyalayın. rsync komutunu kullanmak, büyük dizinler için daha güvenli ve ilerlemeyi gösteren bir yöntemdir:

sudo rsync -av /var/lib/mysql /mnt/disk2/mysql

* -a: Arşiv modu; izinler, zaman damgaları, sembolik linkler vb. dahil olmak üzere tüm dosya özelliklerini korur.
* -v: Ayrıntılı çıktı; kopyalanan dosyaları gösterir.

Bu işlem tamamlandığında, yeni veri dizininiz /mnt/disk2/mysql/mysql konumunda olacaktır.

Adım 5: MySQL Yapılandırma Dosyasını Güncelleme

MySQL’in yeni veri dizini konumunu bilmesi için yapılandırma dosyasını güncellememiz gerekiyor. Ubuntu 18.04’te bu dosya genellikle /etc/mysql/mysql.conf.d/mysqld.cnf konumundadır.

Dosyayı bir metin düzenleyici ile açın:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld] bölümünü bulun ve datadir satırını yeni konumu gösterecek şekilde değiştirin:

# Önceki hali:

datadir = /var/lib/mysql

Yeni hali:

datadir = /mnt/disk2/mysql/mysql

Eğer MySQL’in hata günlüklerini de taşımak isterseniz, log_error satırını da benzer şekilde değiştirebilirsiniz:

# Önceki hali:

log_error = /var/log/mysql/error.log

Yeni hali:

log_error = /mnt/disk2/mysql/mysql_error.log

Değişiklikleri kaydedin (Nano’da Ctrl+O, Enter, Ctrl+X).

Adım 6: Yeni Veri Dizini İçin İzinleri Ayarlama

MySQL’in yeni veri dizinine erişebilmesi için doğru kullanıcı ve grup izinlerine sahip olması gerekir. MySQL sunucusu genellikle mysql kullanıcısı ve grubunu kullanır.

sudo chown -R mysql:mysql /mnt/disk2/mysql/mysql
sudo chmod -R 700 /mnt/disk2/mysql/mysql

* chown -R mysql:mysql: Dizin ve içindeki tüm dosyaların sahibi ve grubunu mysql olarak ayarlar.
* chmod -R 700: Dizin ve içindeki tüm dosyalara yalnızca mysql kullanıcısının okuma, yazma ve çalıştırma izinleri verir. Bu, veri güvenliği için önerilen sıkı bir izindir.

Adım 7: AppArmor Yapılandırmasını Güncelleme

Ubuntu’da AppArmor, belirli uygulamaların dosya sistemi erişimini kısıtlar. MySQL’in yeni veri dizinine erişebilmesi için AppArmor profilini güncellemeniz gerekmektedir.

AppArmor yapılandırma dosyasını açın:

sudo nano /etc/apparmor.d/usr.sbin.mysqld

Bu dosyanın içinde, datadir için mevcut yolları belirten satırlar bulacaksınız. Örneğin:

/var/lib/mysql/ r,
/var/lib/mysql/ rwk,
/var/log/mysql/ r,
/var/log/mysql/ rwk,

Bu satırların altına, yeni veri dizininizin ve isteğe bağlı olarak yeni hata günlüğü dizininizin yollarını eklemeniz gerekmektedir. Yeni satırlar şöyle görünmelidir:

/mnt/disk2/mysql/mysql/ r,
/mnt/disk2/mysql/mysql/ rwk,
/mnt/disk2/mysql/mysql_error.log rwk, # Eğer log dosyasını da taşıdıysanız

Değişiklikleri kaydedin ve AppArmor profilini yeniden yükleyin:

sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld

Bu komut, /etc/apparmor.d/usr.sbin.mysqld dosyasındaki değişiklikleri AppArmor’a uygular.

Adım 8: MySQL Hizmetini Başlatma ve Doğrulama

Tüm yapılandırma değişikliklerini yaptıktan sonra, MySQL hizmetini başlatabiliriz:

sudo systemctl start mysql

Hizmetin başarıyla başlatıldığını doğrulamak için durumunu kontrol edin:

sudo systemctl status mysql

Çıktıda Active: active (running) ifadesini görmelisiniz. Eğer bir hata varsa, systemctl status mysql çıktısına veya yeni hata günlüğü dosyasına (/mnt/disk2/mysql/mysql_error.log veya /var/log/mysql/error.log) bakarak sorunu tespit edebilirsiniz.

MySQL’e bağlanarak veritabanlarınızın erişilebilir olduğunu kontrol edin:

mysql -u root -p

Şifrenizi girdikten sonra MySQL komut isteminde SHOW DATABASES; komutunu çalıştırarak veritabanlarınızın listelendiğini doğrulayın.

mysql> SHOW DATABASES;

Adım 9: Eski Veri Dizini Dosyalarını Kaldırma (Opsiyonel)

MySQL sunucunuzun yeni konumdan sorunsuz çalıştığından ve tüm verilerinizin erişilebilir olduğundan tamamen emin olduğunuzda, eski veri dizinini silebilirsiniz. Ancak, bu adımı acele etmeden, sistemin bir süre kararlı çalıştığından emin olduktan sonra yapmanız önerilir.

Başlangıçta silmek yerine, eski dizini farklı bir isimle yedek olarak tutabilirsiniz:

sudo mv /var/lib/mysql /var/lib/mysql_eski_yedek

Eğer tamamen silmek isterseniz:

sudo rm -rf /var/lib/mysql

UYARI: Bu komut geri alınamaz. Silmeden önce kesinlikle emin olun.

Sorun Giderme

Taşıma işlemi sırasında veya sonrasında MySQL’in başlamaması gibi sorunlarla karşılaşabilirsiniz. İşte bazı yaygın sorunlar ve çözümleri:

* MySQL Başlamıyor:
* sudo systemctl status mysql.service komutuyla hizmetin durumunu kontrol edin. Hata mesajlarını dikkatlice okuyun.
* MySQL hata günlüklerini kontrol edin. Yeni hata günlüğü konumunu belirtmişseniz oraya, belirtmediyseniz /var/log/mysql/error.log dosyasına bakın.
* İzin Sorunları: Yeni veri dizini ve içindeki dosyaların mysql:mysql sahibi ve grubuna sahip olduğundan emin olun (chown komutu). Ayrıca dizin izinlerinin doğru olduğundan emin olun (chmod 700).
* AppArmor Sorunları: AppArmor profilini güncellemeyi unuttuysanız veya yanlış bir yol eklediyseniz, MySQL başlayamayabilir. /etc/apparmor.d/usr.sbin.mysqld dosyasını kontrol edin ve sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld ile profili yeniden yükleyin.
* my.cnf Hataları: /etc/mysql/mysql.conf.d/mysqld.cnf dosyasındaki datadir yolunun doğru olduğundan ve yazım hatası olmadığından emin olun.

* Veritabanları Görünmüyor:
* MySQL’in doğru veri dizinini kullandığından emin olun. MySQL’e bağlanıp SELECT @@datadir; komutunu çalıştırarak aktif datadir yolunu kontrol edebilirsiniz. Eğer eski yolu gösteriyorsa, my.cnf dosyasındaki değişikliğin kaydedilmediğini veya yanlış dosyayı düzenlediğinizi gösterir.

Sonuç ve Sıkça Sorulan Sorular (SSS)

Bu rehberde, Ubuntu 18.04 üzerinde MySQL veri dizininizi güvenli bir şekilde yeni bir konuma nasıl taşıyacağınızı öğrendiniz. Bu işlem, sunucunuzun depolama performansını veya kapasitesini artırmak için önemli bir adımdır. İşlemin kritik doğası gereği, her adımı dikkatlice takip etmek, özellikle yedekleme ve AppArmor yapılandırması gibi adımlara özen göstermek başarının anahtarıdır.

Sıkça Sorulan Sorular (SSS)

1. Neden MySQL veri dizinimi taşımalıyım?
* Disk Alanı: Mevcut diskte alan kalmadığında daha büyük bir diske geçmek.
* Performans: Daha hızlı bir depolama birimine (SSD gibi) taşımak.
* Depolama Yönetimi: Veritabanı verilerini sistem dosyalarından ayrı bir bölümde tutmak.
* Güvenlik: Belirli güvenlik politikalarına uymak.

2. Yedekleme yapmadan taşıyabilir miyim?
* Kesinlikle hayır. Yedekleme, olası veri kaybına karşı en önemli güvencenizdir. Herhangi bir hata durumunda verilerinizi kurtarmanızı sağlar.

3. Taşıma işlemi ne kadar sürer?
* Süre, veri dizininizin boyutuna ve yeni depolama biriminizin hızına bağlıdır. Küçük veri dizinleri birkaç dakika sürerken, gigabaytlarca veri saatler alabilir.

4. AppArmor nedir ve neden önemlidir?
* AppArmor, Ubuntu’da çalışan bir güvenlik modülüdür. Uygulamaların dosya sistemi, ağ ve diğer kaynaklara erişimini kısıtlayan profiller tanımlar. MySQL veri dizininin yeri değiştiğinde, AppArmor’ın MySQL profilini, yeni konuma erişim izni verecek şekilde güncellemeniz gerekir, aksi takdirde MySQL güvenlik kısıtlamaları nedeniyle başlayamaz.

5. Taşıma sonrası MySQL başlamazsa ne yapmalıyım?
* İlk olarak sudo systemctl status mysql.service komutuyla durumu kontrol edin.
* MySQL hata günlüklerini (yeni veya eski konumda) inceleyin.
* Yeni veri dizininin izinlerini (chown, chmod) ve AppArmor yapılandırmasını kontrol edin.
* /etc/mysql/mysql.conf.d/mysqld.cnf dosyasındaki datadir yolunun doğru olduğundan emin olun.

6. Ubuntu’nun farklı sürümlerinde bu adımlar geçerli mi?
* Bu rehber Ubuntu 18.04 için yazılmıştır. Ubuntu 20.04 ve 22.04 gibi sonraki sürümlerde adımlar büyük ölçüde benzer olacaktır, ancak bazı dosya yolları veya AppArmor yapılandırma detayları küçük farklılıklar gösterebilir. Her zaman kullandığınız sürüm için resmi belgelere başvurmanız önerilir.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Exit mobile version