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.