it-swarm.it

Come spostare i file di dati MySQL in diverse partizioni?

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 cartella /var/www collegata a /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?

28
Stephen RC

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

Come accennato dal link Gergoes, si tratta essenzialmente 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 aprite il file /etc/apparmor.d/usr.sbin.mysqld troverete 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
31
andol

Super user ha una bella istruzioni 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

per:

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!

4
nelaaro

Per coloro che come me lavorano con VirtualBox e devono spostare il datadir MySQL in una cartella condivisa sul sistema host, seguire il semplice tutorial su http://vacilando.org/en/article/moving-mysql-data lime-virtualbox-shared-folder

0
Vacilando

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

0
Nathan Osman