Modifica della directory dei dati MySQL in Ubuntu Server 10.04


9

Stavo ottenendo il seguente errore durante il tentativo di cambiare la directory dei dati nel server Ubuntu 10.04.

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
... e la tua domanda è? Nota che se sposti solo il contenuto delle cartelle e nessun file, perderai tutto il contenuto della tabella InnoDB.
Bobince

non c'è domanda / cucchiaio. Ho appena pensato che questo potrebbe essere interessante per le persone qui intorno. Un buon punto sul contenuto della tabella InnoDB!

2
Se vuoi fare e rispondere alla tua domanda che va bene, ma prenditi il ​​tempo per porre effettivamente una domanda e fornire la tua risposta come risposta.
Zoredache,

Risposte:


8

Dopo una certa confusione generale sulle autorizzazioni, l'OP ha capito che il problema non era che non aveva diritti di autorizzazione e percorsi, ma che AppArmor impediva a MySQL di leggere e scrivere nella nuova posizione.

Questa è la sua soluzione:

Per prima cosa ferma MySQL, quindi non succede nulla di strano mentre stai armeggiando:

$ sudo stop mysql

Quindi spostare tutte le directory del database nella loro nuova home:

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

Non spostare i file, saranno generati da mysql, basta spostare le cartelle (che sono i database).

Quindi, cortesemente, chiedi ad AppArmor di consentire a mysql di utilizzare la nuova cartella:

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

Quindi dire a mysql che il datadir si è spostato:

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

NOTA: a seconda della configurazione del database potrebbe essere necessario modificare anche innodb-data-home-dir ecc.

Quindi riavviare AppArmor per leggere le nuove impostazioni:

$ sudo /etc/init.d/apparmor restart

E riavvia MySQL usando il nuovo datadir:

$ sudo start mysql

2
potresti mantenere il database attivo e funzionante collegando i file nella loro nuova posizione, invece di spostarli ... a meno che ovviamente le due posizioni dei datadir non siano su partizioni separate.
cpbills,

Le istruzioni per spostare solo le directory non sono accurate nel caso in cui si utilizzi innodb. In tal caso, dovrai spostare anche i dati innodb e i file di registro (ibdata *, ib_logfile *).
Hillel,

Un appunto per gli altri trascurato come me. Devi avere le barre finali nel percorso nella configurazione di AppArmor, /new-mysql-dir/ raltrimenti verrà comunque negato. Roba Linux di base ma non riesco mai a correggere correttamente le barre finali.
Jeff,

AppArmor mi negava ancora. Questo thread ha contribuito a superare l'ultimo ostacolo.
Jeff,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.