Mysql sunucunuzun datalarını bulunduğu diskte yer sıkıntısı çekmeniz durumunda , ilgili data dizinini daha büyük alana sahip bir diske taşımak isteyebilirsiniz. Böyle bir durumda izleyebileceğiniz iki yol bulunuyor. Birincisi, Linux/GUNU dağıtımlar için mysql’in ana yapılandırma bilgilerinin tutulduğu my.cnf isimli dosyada tanımlanabilen datadir özelliğini kullanmaktır. FreeBSD için ise, mysql başlangıç betiğinde küçük bir değişiklik yapılabilir. İkinci olarak da, hem Linux’lar için hem de BSD’ler için geçerli olmak üzere, yapılandırma dosyalarına dokunmadan, ilgili dizini yeni diske taşımak ve orjinal datadir’ı buraya linklemektir. |
Bu yazıda, mysql verilerinin durduğu dizinin, bir başka alana nasıl taşınabileceği anlatılmaktadır. Yazıda, her iki yöntem de kullanılarak taşıma işlemi yapılacaktır. Size en kolay gelen adımı takip edebilirsiniz.
ALTERNATİF 1 – conf dosyalarını editlemek
Bu yöntemde, Linux/GNU’lar için farklı, BSD tabanlı OS’ler için farklı yollar mevcut. Linux’larda /etc altında bulunan ana yapılandırma dosyası olan my.cnf isimli dosyada datadir parametresini kullanarak, verilerin tutulacağı dizin belirtilebiliyor. FreeBSD’lerde ise, aynı iş mysql’in başlangıç scriptinde küçük bir değişiklik yaparak gerçekleştirilebiliyor.
CentOS 5.2’de my.cnf dosyasının editlenmesi
Linux’lar için (CentOS üzerinde) my.cnf dosyasını editleyerek, veri dizini değiştirme işini şöyle yapabilirsiniz:
Herşeyden önce, mysql ana dizininin yerini saptamanız gerekiyor. Öntanımlı olarak mysql’in ana dizini Linux/GNU OS’ler için /var/lib/mysql dizinidir. Ancak ilgili dizin bahsedilen yerde yoksa, mysql sürecinin durumunu kontrol etmek için kullandığımız ps çıktısında, dizinin yeri de görüntülenmektedir.
İlgili komut ve çıktısı şu şekilde:
Komut:
# ps -aux |grep mysql
Çıktı da şu şekilde görünmektedir.
mysql ... /usr/libexec/mysqld --defaults-extra-file=/var/lib/mysql/my.cnf
Bold olarak belirtilmiş yerde görüldüğü üzere, mysql ana dizini /var/lib/mysql olarak görünüyor.
Dizinin yerini saptadıktan sonra, değişkliği yapmadan önce mysql’i stop etmeniz gerekir.
# /etc/rc.d/init.d/mysqld stop
Mysql stop sonrası değişikliği yapabiliriz.
Favori editorünüz ile, /etc altında duran my.cnf dosyasını editleyin.
NOT: my.cnf dosyası ön tanımlı olarak /etc altında my.cnf ismi ile durmaktadır; Eğer bu dosyayı bulamıyorsanız, kurulum sırasında oluşturulan 4 adet örnek my.cnf dosyasından sizin için uygun olanı my.cnf ismi ile /etc dizinine kaydedebilirsiniz. find / -name *.cnf komutu ile dosyaların yerini saptayabilirsiniz. |
Ben vi kullanıyorum:
# vi /etc/my.cnf
Ön tanımlı olarak gelen bu dosya bir kaç satırdan oluşuyor; burada datadir parametresini görebilirsiniz. İlgili parametrenin karşısına, verilerinizi tutacağınız dizinin tam adını yazın:
[mysqld]
datadir=/yeni-mysql-dizini/mysql
socket=/var/lib/mysql/mysql.sock
Yeni veri dizinini belirledikten sonra, yapılması gereken şey, mysql’in orjinal data dizinini, yeni belirlediğimiz yere almaktır.
UYARI: Mysql datalarını, yeni yerine alırken cp komutu kullanarak kopyalama yapmanızı öneririm. mv ile move ederseniz verilerinizi kaybetme riskiniz olabilir. |
Aşağıdaki gibi kopyalama işini yapın.
cp -pr /var/lib/mysql /yeni-mysql-dizini/
Kopyalama işlemi bittikten sonra, mysql sunucusunu çalıştırabiliriz.
# /etc/rc.d/init.d/mysqld start
Herşey yolunda gittiyse, mysql verileri artık yeni yerinde tutulacaktır.
FreeBSD üzerine mysql startup scriptinin editlenmesi
FreeBSD’lerde öntanımlı mysql data dizini /var/db/mysql dir.Ancak emin olmak için, ps -aux süreci kontrol ederek mysql data dizininin yerini saptayabilirsiniz:
Komut:
# ps -aux |grep mysql
Çıktı da şu şekilde görünmektedir.
mysql ... /usr/local/libexec/mysqld --defaults-extra-file=/var/db/mysql/my.cnf
Bold olarak belirtilmiş yerde görüldüğü üzere, mysql ana dizini /var/db/mysql olarak görünüyor.
Şimdi mysql’i stop ediyoruz.
# /usr/local/etc/rc.d/mysql-server stop
Daha sonra da, mysql’in startup scripti olan /usr/local/etc/rc.d/mysql-server isimli dosyayı editliyoruz.
# vi /usr/local/etc/rc.d/mysql-server
Dosyanın içerisine göz attığınız zaman, bir datadir değişkeninin set edilmiş olduğunu görürsünüz.
Orjinal şekli şöyledir:
: ${mysql_enable="NO"}
: ${mysql_limits="NO"}
: ${mysql_dbdir="/var/db/mysql"}
: ${mysql_args=""}
Bold ile işaretlenmiş satırdaki path’i yeni dizini gösterecek şekilde set edelim:
: ${mysql_enable="NO"}
: ${mysql_limits="NO"}
: ${mysql_dbdir="/yeni-mysql-dizini/mysql"}
: ${mysql_args=""}
Bundan sonra da, /var/db/mysql olan orjinal data dizinini, yeni dizine taşıyalım.
UYARI: Mysql datalarını, yeni yerine alırken cp komutu kullanarak kopyalama yapmanızı öneririm. mv ile move ederseniz verilerinizi kaybetme riskiniz olabilir. |
Aşağıdaki gibi kopyalama işini yapın.
# cp -pr /var/db/mysql /yeni-mysql-dizini/
Artık, mysql’i yeniden çalışltırabiliriz.
# /usr/local/etc/rc.d/mysql-server start
Herşey yolunda gittiyse, işlem tamamlandı demektir.
ALTERNATİF 2 – Data dizinine sembolik link oluşturmak
Son olarak, işletim sisteminden bağımsız olarak izlenebilecek diğer yöntem ise, mysql veri dizinini, yeni yerine taşıyıp, eski mysql dizinini, yeni dizine linklemektir. Böylece, mysql default data dizinine yazdığını sanırken, aslında veri başka bir dizinde tutulmaktadır.
Kullandığınız OS ne olursa olsun, işlem adımları aynıdır.
Mysql’inizi stop ettikten sonra, mysql’in data dizinini, yeni yerine taşıyın.
UYARI: Sembolik link oluşturacağımız için burada move komutunu kullanacağız. Ancak komutu kullanmadan önce ilgili dizini yedeklemeyi unutmayın. |
Dizini taşıyalım. (Yukarıda da bahsedildiği gibi Linux/GNU dağıtımların bir çoğunda default data dizini /var/lib/mysql; FreeBSD’lerde ise /var/db/mysql‘dir )
# mv /var/db/mysql /yeni-mysql-dizini/
Daha sonra, link oluşturalım.
# ln -s /yeni-mysql-dizini/mysql /var/db/mysql
Mysql’inizi yeniden başlattığınız zaman, veri dizinin yeri de değişmiş olacaktır. İşlemlerin sorunsuz gidip gitmediğini test etmek için, mysql sunucunuzda yeni bir db oluşturup, oluşturulan db’ye ait dosyaların, belirlediğiniz yeni yerde var olup olmadığına bakabilirsiniz.
Yorum Gönder