2010-11-15 15 views
11

Nella mia installazione MySQL ho un database InnoDB che so che diventerà molto grande, quindi ho deciso di spostarlo sul proprio disco. Speravo di farlo spostando i file sull'altro disco e quindi creando un link simbolico ma mi imbatto in errori!Spostamento del database InnoDB MySQL su unità separata

Questo è quello che ho fatto:

1) In my.cnf ho impostato

[mysqld] innodb_file_per_table

(Questo funziona, ho una .ibd per .frm in la cartella del database.)

2) ho controllato se link simbolici sono ok con SHOW VARIABLES LIKE "have_symlink";

(so che il documento ation dice:

I symlink sono completamente supportati solo per le tabelle MyISAM . Per i file utilizzati dalle tabelle per altri motori di archiviazione, è possibile che ottenga strani problemi se si tenta di utilizzare i collegamenti simbolici con lo .

Ma ho bisogno di chiavi esterne ...)

3) ho spostato la cartella del database e ha creato un link simbolico.

4) Ha ricominciato mysql e ha cercato:

mysql> USE db_name 
Database changed 
mysql> SHOW TABLES; 
ERROR 1018 (HY000): Can't read dir of './db_name/' (errno: 13) 
mysql> exit 
[email protected]# perror 13 
OS error code 13: Permission denied 

link simbolico è (come previsto) lrwxrwxrwx mysql mysql db_name -> /path-to/db_name/

autorizzazioni delle cartelle di database sono drwx------ mysql mysql

tutti i permessi dei file sono -rw-rw---- mysql mysql

sto usando Server Ubuntu 10.04 con MySQL 5.1.41 (predefinito da apt).

Qualcuno l'ha fatto con successo?

+0

Il modo più semplice è prendere mysqldump e quindi eliminare la configurazione di configurazione e importarla, se il DB non è molto grande. – vinothkr

+0

Voglio mantenere il resto dei database sul disco di sistema (per drupal e cose simili) e spostare solo quello specifico dalla directory dei dati. Scusa se questo non era chiaro dalla domanda. – Norling

+0

Questo potrebbe essere più adatto a http://serverfault.com/ - votare per migrarlo ... – richsage

risposta

16

Si scopre che funziona ma il mio vecchio nemico appArmor ha bloccato MySQL dalla lettura della directory spostata.

sudo nano /etc/apparmor.d/usr.sbin.mysqld 

linee aggiuntivi:

/new-db-path/ r, 
/new-db-path/** rwk, 

Grazie per l'aiuto!

+0

Lo stesso problema su Ubuntu 12.04 dopo lo spostamento del database e la sua sostituzione con un collegamento simbolico. La modifica del profilo AppArmor come suggerisci funziona. Grazie! –

+0

Grazie. Anche questa era la mia soluzione. – Yada

+0

Grazie! Non dimenticare di riavviare il servizio apparmor dopo aver modificato questo –

10

Norling Jr. salvato la giornata con la punta AppArmor, ma da quando ho avuto qualche problema configurandolo , Sto scrivendo una risposta più dettagliata. Sto usando Ubuntu 12.04.

iniziare a diventare root per salvare la necessità di scrivere tutto ciò che sudos:

sudo su - 

seguito MySQL docs, in primo luogo spostare il già creato dir database a un altro percorso:

mv /var/lib/mysql/yourdatabase /new/path/ 

Qui era la mia prima trappola. Verifica se l'utente mysql ha accesso a questo nuovo percorso:

sudo -u mysql ls /new/path/yourdatabase 

Se hai accesso negato, probabilmente si dovrebbe dare il permesso di esecuzione per ogni dir genitore:

chmod a+x /new /new/path/ 

di prova per accedere nuovamente il file. Se ancora non funziona, provate a chiedere una domanda in Stack Overflow :-)

link la nuova posizione dir e dargli i permessi corretti: file di configurazione locale modificare AppArmor

ln -s /new/path/yourdatabase /var/lib/mysql/ 
chown mysql:mysql /var/lib/mysql/yourdatabase 

di Let. Non devi modificare il file /etc/apparmor.d/usr.sbin.mysqld. Modificare il conf locale in modo da non perdere dopo gli aggiornamenti di sistema:

emacs /etc/apparmor.d/local/usr.sbin.mysqld 

aggiungere le configurazioni Norling Jr.:

/new/path/yourdatabase/ r, 
/new/path/yourdatabase/** rwk, 

Non perdere l'ultima virgola. Salvare il file e ricaricare la configurazione AppArmor:

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

Questo non solo ricaricare la configurazione AppArmor MySql, ma anche testare se non c'è alcun errore di sintassi (una cosa molto importante). Se non si esegue il parser, il nuovo conf non verrà applicato.

Infine basta aprire il client mysql e digitare SHOW DATABASES. Se il tuo database appare, probabilmente tutto va bene. Digita "USE yourdatabase" per un altro controllo.

Un test più robusto dovrebbe anche ricaricare il servizio mysql: "servizio mysql restart" e provare ad accedere al database.

Ora mi ricorderò della prossima volta che ho bisogno di farlo. Google e così insieme sono i migliori notebook del mondo :-)

+2

questo è stato incredibilmente utile, GRAZIE! –

1

Dovrebbe essere possibile utilizzare cavalcature locali (Associazioni) con le autorizzazioni appropriate e montare oprions (inclusi i SELinux o AppArmor contesti):

/dev/sdc on /var/lib/mysql/my-db/ 
/dev/sdd on /var/lib/mysql/her-db/ 
fs.example.com:/path/to/wherever on /var/lib/mysql/my-other-db/ 

Anche se non ho provato questa soluzione quindi l'utilizzo è a vostro rischio e pericolo.

+0

Posso confermare che funziona. Devi dedicare un'intera partizione solo al sottodiremo mysql, ma una volta fatto e montato correttamente, funziona alla grande. – GaryO