Ändern des MySQL-Datenverzeichnisses in Ubuntu Server 10.04


9

Beim Versuch, das Datenverzeichnis in Ubuntu Server 10.04 zu ändern, wurde folgende Fehlermeldung angezeigt.

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
... und deine Frage ist? Beachten Sie, dass Sie den gesamten Inhalt der InnoDB-Tabelle verlieren, wenn Sie nur den Inhalt von Ordnern und keine Dateien verschieben.
Bobince

Es gibt keine Frage / Löffel. Ich dachte nur, das könnte für die Leute hier interessant sein. Guter Punkt zum Inhalt der InnoDB-Tabelle!

2
Wenn Sie Ihre eigene Frage stellen und beantworten möchten, ist das in Ordnung, aber nehmen Sie sich Zeit, um tatsächlich eine Frage zu stellen und Ihre Antwort als Antwort zu geben.
Zoredache

Antworten:


8

Nach einigen allgemeinen Verwirrungen über Berechtigungen stellte das OP fest, dass das Problem nicht darin bestand, dass er keine Berechtigungen und Pfadrechte hatte, sondern dass AppArmor MySQL daran hinderte, an den neuen Speicherort zu lesen und zu schreiben.

Dies ist seine Lösung:

Stoppen Sie zuerst MySQL, damit beim Spielen nichts Seltsames passiert:

$ sudo stop mysql

Verschieben Sie dann alle Datenbankverzeichnisse in ihr neues Zuhause:

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

Verschieben Sie die Dateien nicht, sie werden von MySQL generiert. Verschieben Sie einfach die Ordner (die die Datenbanken sind).

Bitten Sie AppArmor dann höflich, MySQL die Verwendung des neuen Ordners zu erlauben:

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

Dann sag mysql, dass der Datenverzeichnis verschoben wurde:

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

HINWEIS: Abhängig von Ihrer Datenbankkonfiguration müssen Sie möglicherweise auch das Innodb-Daten-Home-Verzeichnis usw. ändern.

Starten Sie dann AppArmor neu, um die neuen Einstellungen zu lesen:

$ sudo /etc/init.d/apparmor restart

Starten Sie MySQL erneut mit dem neuen Datenverzeichnis:

$ sudo start mysql

2
Sie können die Datenbank am Laufen halten, indem Sie die Dateien mit ihrem neuen Speicherort verknüpfen, anstatt sie zu verschieben ... es sei denn, die beiden Datadir-Speicherorte befinden sich auf separaten Partitionen.
cpbills

Die Anweisung, nur Verzeichnisse zu verschieben, ist nicht korrekt, wenn Sie innodb verwenden. In diesem Fall müssen Sie auch die Innodb-Daten und Protokolldateien verschieben (ibdata *, ib_logfile *).
Hillel

Eine Notiz für andere, die so nachlässig sind wie ich. Sie müssen die abschließenden Schrägstriche im Pfad in der AppArmor-Konfiguration haben, /new-mysql-dir/ rsonst wird es weiterhin verweigert. Grundlegendes Linux-Zeug, aber ich kann die nachgestellten Schrägstriche nie richtig machen.
Jeff

Ich wurde immer noch von AppArmor abgelehnt. Dieser Thread hat dazu beigetragen, diese letzte Hürde zu überwinden.
Jeff
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.