Come spostare i file di dati MySQL su una partizione diversa?


27

Ho il mio disco rigido partizionato con due partizioni, quindi posso facilmente reinstallare Ubuntu e provare diverse versioni senza perdere i dati della mia directory home. È impostato in questo modo:

20GB  -> /     (root)
180GB -> /home 

Faccio molto lavoro di sviluppo, quindi ho la mia /var/wwwcartella collegata a link /home/valorin/workspace.

Ma voglio farlo anche con i miei file di dati MySQL, poiché mi infastidisce il fatto che ogni volta che reinstallo la mia macchina ho bisogno di fare un dump SQL completo e quindi ripristinare tutti i DB prima di poter fare più lavoro.

Qual è il modo migliore per farlo senza rompere MySQL?

Risposte:


30

Bene, in realtà esiste una potenziale risposta specifica di Ubuntu a questa domanda.

Come accennato dal link Gergoes, si tratta sostanzialmente di modificare /etc/mysql/my.cnf e impostare un nuovo valore per datadir = nella sezione [mysqld] . Finora la parte non specifica della risposta.

Supponendo che tu stia eseguendo una versione un po 'moderna di Ubuntu potresti avere AppArmor installato di default, con un profilo per / usr / sbin / mysqld in modalità forzata. Molto probabilmente quel profilo predefinito non accetterà il tuo nuovo datadir.

Supponiamo che il tuo nuovo datadir sarà / home / data / mysql .

Se apri il file /etc/apparmor.d/usr.sbin.mysqld troverai tra le regole queste due righe.

/var/lib/mysql/ r,
/var/lib/mysql/** rwk,

Supponendo il nostro esempio sopra, dovranno essere sostituiti o (probabilmente preferibili) integrati da queste due righe.

/home/data/mysql/ r,
/home/data/mysql/** rwk,

Prima di poter avviare il nostro server MySQL, con il suo nuovo datadir, dovremo anche ricaricare esplicitamente il nostro nuovo profilo apparmor.

$ sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld

Questo non sembra funzionare su Natty (11.4). Ho dovuto avviare MySQL usando / usr / sbin / mysqld per leggere i miei dati modificati. Altrimenti, ha continuato a leggere la mia vecchia directory dei dati. Questo potrebbe essere un errore dalla mia parte.
tre tazze,

Quanto sopra non è riuscito a risolvere il problema per me su Ubuntu 12.04 (Preciso). Ho scoperto che è necessario modificare il file /etc/apparmor.d/tunables/alias per includere una riga "alias / var / lib / mysql / -> / home / data / mysql /," Con questo in atto, I non ha avuto bisogno di modifiche in nessuno degli altri file AppArmor. Ha funzionato immediatamente dopo aver riavviato AppArmor con "/etc/init.d/apparmor restart" e MySQL con "restart mysql".
Mak

Penso che alcune autorizzazioni debbano essere impostate sulla nuova cartella che deve essere utilizzata. Qualcuno sa cosa sono? So che l'installazione di mysql crea un utente mysql ... e che per impostazione predefinita, non riesco ad accedere al contenuto della cartella / var / lib / mysql.
NullVoxPopuli,

4

Super user ha una bella istruzione passo-passo su come risolvere questo problema

Ecco un'altra serie di istruzioni su come fare la stessa cosa http://www.ubuntugeek.com/how-to-change-the-mysql-data-default-directory.html

Qui è ripubblicato. Vai e vota l'originale se puoi su un superutente.

Dopo un po 'di confusione generale sulle autorizzazioni, mi sono reso conto che il problema non era che non avevo le autorizzazioni e i percorsi corretti, ma che AppArmor impediva a mysql di leggere e scrivere nella nuova posizione.

Questa è la mia 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

aggiungi linee:

/new-mysql-dir/ r,
/new-mysql-dir/** rwk,

Quindi dire a mysql che il datadir si è spostato:

$ sudo vim /etc/mysql/my.cnf 

cambia la linea:

datadir=/var/lib/mysql

a:

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

Spero che sia di aiuto!


0

Questo in realtà non è specifico di Ubuntu. Tuttavia, ecco qualcosa che potrebbe aiutare: http://developer.spikesource.com/wiki/index.php/How_to_change_the_mysql_database_location


Le istruzioni non sono state di grande aiuto in quanto la parte che non riuscivo a far funzionare era AppArmour e il tuo post lo ha spiegato solo di passaggio. Inoltre, questo sito è dedicato a domande specifiche di Ubuntu? In che modo i nuovi utenti in cerca di aiuto sanno cosa è specifico di Ubuntu o no e dove dovrebbero chiedere loro se sono generici?
Stephen RC,

Sito Web non disponibile.
Hengjie,


-1

Questo non funzionerà proprio così.

l'utente mysql deve avere il diritto di scrivere nella nuova directory:

sudo chown -R mysql:mysql /newdatadir
sudo chmod -R 754 /newdatadir
sudo chmod 754 /newdatadir/..
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.