MySQL veri dosyalarını farklı bölümlere nasıl taşırım?


27

Sabit diskimi iki bölüme ayırdım, böylece Ubuntu'yu kolayca yeniden yükleyebilir ve giriş dizini verilerimi kaybetmeden farklı sürümleri deneyebilirim. Böyle bir kurulum:

20GB  -> /     (root)
180GB -> /home 

Çok fazla geliştirme çalışması yapıyorum, bu yüzden /var/wwwklasörüm birbirine bağlanıyor /home/valorin/workspace.

Ancak bunu MySQL veri dosyalarımla da yapmak istiyorum, çünkü her seferinde makinemi yeniden kurduğumda tam bir SQLdump yapmam ve daha sonra daha fazla çalışma yapmadan önce tüm DB'leri geri yüklemem gerektiğine dair sinirleniyorum.

MySQL'i bozmadan bunu yapmanın en iyi yolu nedir?

Yanıtlar:


30

Aslında, bu soruya özel bir Ubuntu'ya özgü cevap var.

Bağlantı Gergoes tarafından belirtildiği gibi bu değiştirmeyle ilgili temelde /etc/mysql/my.cnf için ve set yeni bir değer datadir = içinde [mysqld] bölümüne. Şimdiye kadar cevabın spesifik olmayan kısmı.

Ubuntu'nun biraz modern bir versiyonunu çalıştırdığınızı varsayarsak, AppArmor'un varsayılan olarak, zorunlu modda / usr / sbin / mysqld profiline sahip olduğunu görebilirsiniz . Bu varsayılan profil büyük olasılıkla yeni datadir'inizi kabul etmeyecektir.

Yeni veri dizininizin / home / data / mysql olacağını varsayalım .

/Etc/apparmor.d/usr.sbin.mysqld dosyasını açarsanız , kuralların arasında bu iki satırı bulacaksınız.

/var/lib/mysql/ r,
/var/lib/mysql/** rwk,

Yukarıdaki örneğimizi varsayarsak, bu iki satırla değiştirilmeleri veya (muhtemelen tercih edilmeleri) tamamlamaları gerekecektir.

/home/data/mysql/ r,
/home/data/mysql/** rwk,

MySQL sunucumuzu başlatmadan önce, yeni datadir ile yeni apparmor profilimizi açıkça yeniden yüklememiz gerekecek.

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

Bu Natty (11.4) üzerinde çalışmıyor gibi görünüyor. Değişen veri direktörümü okumak için / usr / sbin / mysqld kullanarak MySQL'i başlatmak zorunda kaldım. Aksi halde eski verilerimin direktörlüğünü okumaya devam etti. Bu benim tarafımda bir hata olabilir.
üç bardak

Yukarıdakiler benim için sorunu Ubuntu 12.04 (Kesin) 'te çözemedi. Birinin /etc/apparmor.d/tunables/alias dosyasını "alias / var / lib / mysql / -> / home / data / mysql /," satırını içermesi gerektiğini düzenlemeniz gerektiğini öğrendim. diğer AppArmor dosyalarının hiçbirinde herhangi bir değişiklik yapılması gerekmedi. AppArmor'u "/etc/init.d/apparmor restart" ve MySQL'i "restart mysql" ile yeniden başlattıktan hemen sonra çalıştı.
mak

Kullanılacak yeni klasörde belirli izinlerin ayarlanması gerektiğini düşünüyorum. Ne olduklarını bilen var mı? MySQL kurulumunun bir MySQL kullanıcısı oluşturduğunu biliyorum ... ve varsayılan olarak, / var / lib / mysql klasörünün içeriğine erişemiyorum.
NullVoxPopuli

4

Süper kullanıcı bu probelm nasıl çözüleceği konusunda adım adım talimatlar güzel bir adım vardır

İşte aynı şeyi yapmak için başka bir talimatlar kümesi http://www.ubuntugeek.com/how-to-change-the-mysql-data-default-directory.html

İşte repoted edilir. Git ve yukarı süper kullanıcı yapabilirseniz orijinali oylayın.

İzinlerle ilgili genel bir karışıklıktan sonra, sorunun benim izinlerimin ve yollarımın doğru olmadığını, ancak AppArmor'un mysql'in yeni yere okuma ve yazmasını engellediğini fark ettim.

Bu benim çözümüm:

İlk önce MySQL'i durdurun, böylece keman yaparken garip bir şey olmaz:

$ sudo stop mysql

Sonra tüm veritabanı dizinlerini yeni evlerine taşıyın:

$ sudo mv /var/lib/mysql/<all folders> /new-mysql-dir/

Dosyaları taşımayın, bunlar mysql tarafından üretilecektir, sadece klasörleri (veritabanlarıdır) taşıyın.

Daha sonra kibarca AppArmor'dan mysql'nin yeni klasörü kullanmasına izin vermesini isteyin:

$ sudo vim /etc/apparmor.d/usr.sbin.mysqld

satır ekle:

/new-mysql-dir/ r,
/new-mysql-dir/** rwk,

Sonra mysql'e datadir'in taşındığını söyleyin:

$ sudo vim /etc/mysql/my.cnf 

çizgiyi değiştir:

datadir=/var/lib/mysql

için:

datadir=/my-new-db-dir/

NOT: Veri tabanı kurulumunuza bağlı olarak, innodb-data-home-dir vs.'yi de değiştirmeniz gerekebilir.

Ardından, yeni ayarları okumak için AppArmor'u yeniden başlatın:

$ sudo /etc/init.d/apparmor restart

Ve yeni datadir'i kullanarak MySQL'i tekrar başlatın:

$ sudo start mysql

Bu yardımcı olur umarım!


0

Bu gerçekten Ubuntu'ya özgü değil. Bununla birlikte, burada yardımcı olabilecek bir şey var: http://developer.spikesource.com/wiki/index.php/How_to_change_the_mysql_database_location


Talimatlar gerçekten işe yaramadığım kısım AppArmour olduğu için yardımcı olmadı ve gönderiniz sadece geçerken açıkladı. Ayrıca, bu site Ubuntu'ya özgü sorular için mi? Yardım arayan yeni kullanıcılar Ubuntu'ya özgü olanı ya da neyin olmadığını ve onlara genel olup olmadığını nereden sormaları gerektiğini nasıl bilir?
Stephen RC,

Web sitesi kullanılamıyor.
Hengjie


-1

Bu sadece böyle çalışmayacak.

mysql kullanıcısı yeni dizine yazma hakkına sahip olmalıdır:

sudo chown -R mysql:mysql /newdatadir
sudo chmod -R 754 /newdatadir
sudo chmod 754 /newdatadir/..
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.