Ubuntu Sunucusu 10.04'te MySQL veri dizinini değiştirme


9

Ubuntu sunucusunda 10.04 veri dizinini değiştirmeye çalışırken aşağıdaki hatayı alıyordum.

100809 19:33:00 [Note] Plugin 'FEDERATED' is disabled.
/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
100809 19:33:00 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
100809 19:33:00  InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'create'.
InnoDB: Cannot continue operation.

2
... ve sorunuz mu? Yalnızca klasörlerin içeriğini taşırsanız ve hiçbir dosya taşımazsanız, tüm InnoDB tablo içeriğini kaybedeceğinizi unutmayın.
bobince

soru / kaşık yok. Sadece bunun buradaki insanlar için ilginç olabileceğini düşündüm. InnoDB tablo içeriği hakkında iyi bir nokta!

2
Eğer kendi sorunuzu sormak ve cevaplamak istiyorsanız, ama gerçekten bir soru sormak ve cevabınızı cevap olarak vermek için zaman ayırın.
Zoredache

Yanıtlar:


8

İzinlerle ilgili bazı genel karışıklıklardan sonra OP, sorunun izinleri ve yol haklarına sahip olmadığı değil, AppArmor'un MySQL'in yeni konuma okumasını ve yazmasını engellediğini fark etti.

Bu onun çözümü:

İlk önce MySQL'i durdurun, böylece uğraşırken garip bir şey olmaz:

$ sudo stop mysql

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

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

Dosyaları taşımayın, mysql tarafından oluşturulacaktır, sadece klasörleri (veritabanları olan) taşıyın.

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

$ sudo vim /etc/apparmor.d/usr.sbin.mysqld
  >> add lines
     /new-mysql-dir/ r,
     /new-mysql-dir/** rwk,

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

$ sudo vim /etc/mysql/my.cnf 
  >> change the line
     datadir=/var/lib/mysql
  >> to
     datadir=/my-new-db-dir/

NOT: Veritabanı kurulumunuza bağlı olarak, innodb-data-home-dir vb. 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 kullanarak MySQL'i tekrar başlatın:

$ sudo start mysql

2
iki datadir konumu ayrı bölümlerde olmadıkça, dosyaları taşımak yerine yeni konumlarına bağlayarak veritabanını çalışır durumda tutabilirsiniz.
cpbills

İnnodb kullanıyorsanız, yalnızca dizinleri taşıma talimatı doğru değildir. Bu durumda innodb verilerini ve günlük dosyalarını da taşımanız gerekir (ibdata *, ib_logfile *).
Mart'ta

Başkaları için benim kadar dikkatsiz bir not. AppArmor yapılandırmasındaki yolda eğik çizgi bulunması gerekir, /new-mysql-dir/ raksi takdirde yine de reddedilir. Temel Linux şeyler ama asla eğik çizgi doğru alamıyorum.
Jeff

Hala AppArmor tarafından reddedildim. Bu iplik , son engelin üstesinden gelmeye yardımcı oldu.
Jeff
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.