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.