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.
