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.