Veritabanları zaman içinde ciddi miktarlarda büyümektedirler ve bu gibi durumlarda sistem üzerindeki kurulu oldukları dizinleri tamamen doldurup işletim sisteminde sıkıntıya sebebiyet verebilmektedirler, ikinci bir durum ise zaman içinde veritabanı performansını arttırmak için veritabanı ana dosyalarını daha güçlü bir diske taşımanız gerekebilir. Bu gibi durumlarda veritabanı verilerinin saklandığı dizini değiştirerek ilgili işlemi yapabilirsiniz. Bu dokümanda CentOS 7 üzerinde veritabanı veri data dizininin değiştirilmesini anlatacağız.

Gereksinimler

Öncelikle MySQL veri dizinini değiştirmeye geçmeden önce CloudEOS‘ a kayıt olarak bir adet CentOS 7 sunucunuzu oluşturmalısınız.

Kuruluma başlamadan önce CentOS sunucular için güvenlik açısından sudo yetkilerine sahip bir kullanıcı oluşturmanızı tavsiye ediyoruz.

Yeni Kullanıcı Ekleme

Sisteme size verilen şifre ve root kullanıcısı ile giriş yaptıktan sonra

$ adduser yenikullanici

ile kullanıcı oluşturmuş oluyoruz.

$ passwd yenikullanici
$ usermod -aG wheel yenikullanici

komutu ile de oluşturduğumuz kullanıcıya sudo yetkilerini vermiş olduk. Şimdi MySQL yapılandırma adımlarına bu oluşturduğumuz sudo haklı kullanıcı ile devam edeceğiz.

Bu makaleyi öğrenmek için uyguluyorsanız ve elinizde MySQL veritabanı yüklü bir sunucu yok ise MySQL kurulumu makalemizi kullanarak MySQL kurulumu yapabilirsiniz.

Bu dokümanda mevcut mysql data dizini olan /var/lib/mysql den ilgili dizini /mnt/new-mysql-data dizinine taşıyacağız. Siz hedef dizin olarak istediğiniz dizine taşıma yapabilirsiniz.

MySQL Veri Dizinini Taşıma

MySQL veri dizinini taşıma hazırlığı olarak öncelikle mysql veritabanının data dizininin hangi dizin olduğunu bir bulalım bunun için ilk olarak MySQL komut satırına giriş yapalım.

$ mysql -u root -p

MySQL root şifrenizi girerek giriş yapınız. Daha sonra ilgili sql komutu ile veri dizinini bulalım.

$ mysql> select @@datadir;
+-----------------+
| @@datadir |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set (0.00 sec)

Gördüğünüz üzere MySQL Veritabanı varsayılan veri dizini olarak /var/lib/mysql/ ‘i kullanmak üzere yapılandırılmış ve biz bu dizini yeni bir dizine taşıyacağız. Şimdi MySQL alanından çıkış yapalım.

mysql> exit

Veri bütünlüğünü sağlamak için MySQL Veritabanı servisini durdurmalıyız.

$ sudo systemctl stop mysqld

İşlem ile ilgili herhangi bir çıktı dönmeyecektir. İşlemin başarılı şekilde tamamlandığını görmek için aşağıdaki komut size yardımcı olacaktır.

$ sudo systemctl status mysqld
...
Aug 08 14:11:34 ubuntu-512mb-ist1-01 systemd[1]: Stopped MySQL Community Server.

Gördüğünüz üzere MySQL servisi başarı ile durduruldu. Şimdi rsync komutu yardımı ile veritabanı dizinini yeni lokasyona taşıyacağız. -a komutu ile izinleri ve diğer dizin özelliklerini koruyacağız ve -v komutu ile de çıktı olarak ne olup bittiğini takip edebileceğiz.

$ sudo rsync -av /var/lib/mysql /mnt/new-mysql-data

rsync bittiğinde, şu anki dosyayı .bak olarak değiştirelim ve taşıma sonrası sorunsuz çalıştığını kontrol edip emin olana kadar tutalım.

$ sudo mv /var/lib/mysql /var/lib/mysql.bak

Yeni Veri Klasörünü Mysql’de Tanımlama

MySQL yapılandırma değerlerini geçersiz kılmak için birkaç yol bulunmaktadır. Default olarak datadir /var/lib/mysql olarak /etc/my.cnf dosyasında gözükmektedir. İlk olarak bu dosyayı düzenleyerek yeni dizini görmesini sağlayacağız.

$ sudo nano /etc/my.cnf

Aşağıdaki ilgili alanları bulup aşağıdaki gibi değişiklikleri yapalım.

[mysqld]
...
datadir=/mnt/new-mysql-data/mysql
socket=/mnt/new-mysql-data/mysql/mysql.sock
...

[client]
port=3306
socket=/mnt/new-mysql-data/mysql/mysql.sock

Daha sonra dosyayı kaydederek çıkalım.

MySQL’ i Baştan Başlatma

Şimdi MySQL yapılandırmamızı yeni konuma göre düzenledik. MySQL servisini başlatarak işlemimizi aktif edelim.

$ sudo systemctl start mysqld
$ sudo systemctl status mysqld

Daha sonrasında MySQL komut satırına giriş yaparak veri dizinini kontrol edelim.

$ mysql -u root -p

Şifremizi girerek girişi tamamladıktan sonra datadir değerinde yeni lokasyona geçişimizi başarılı şekilde tamamlandığını kontrol edelim.

$ select @@datadir;
+----------------------------+
| @@datadir |
+----------------------------+
| /mnt/new-mysql-data/mysql/ |
+----------------------------+
1 row in set (0.01 sec)

Şimdi başarılı şekilde yeni dizinde veri dizinimiz bulunduğunu doğrulamış olduk. Artık .bak olarak yedek tuttuğumuz dizini de silebiliriz.

mysql> exit
$ sudo rm -rf /var/lib/mysql.bak

Bu dokümanda, makalede yazan komutları, çözümleri uygulamak tamamen kullanıcının kendi sorumluluğunda ve insiyatifinde olan bir konudur, mevcut komutların uygulanması ile doğabilecek, oluşabilecek her türlü sorumluluk ve sonuçlar kullanıcının kendisine aittir, CloudEOS’ un bu konuda herhangi bir sorumluluğu bulunmamaktadır.