2010-11-15 31 views
11

En mi instalación MySQL tengo una base de datos InnoDB que sé que crecerá muy grande, así que he decidido moverla a su propio disco. Tenía la esperanza de hacer esto moviendo los archivos al otro disco y luego crear un enlace simbólico pero me encontré con errores.Mover la base de datos MySQL InnoDB a una unidad separada

Esto es lo que he hecho:

1) En my.cnf he puesto

[mysqld] innodb_file_per_table

(esto funciona, tengo una .ibd por .frm en la carpeta de base de datos.)

2) he comprobado si los enlaces simbólicos son bien con SHOW VARIABLES LIKE "have_symlink";

(sé que el documento ation dice:

Los enlaces simbólicos son totalmente compatibles solo con tablas MyISAM. Para archivos usados ​​por tablas para otros motores de almacenamiento, usted puede tener problemas extraños si intenta utilizar enlaces simbólicos.

Pero necesito claves externas ...)

3) Me moví la carpeta de base de datos y cree un enlace simbólico.

4) Recomenzó MySQL y trató:

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 

enlace simbólico es (como se esperaba) lrwxrwxrwx mysql mysql db_name -> /path-to/db_name/

permisos de carpeta de base de datos son drwx------ mysql mysql

todos los permisos de archivo son -rw-rw---- mysql mysql

estoy usando Servidor Ubuntu 10.04 con MySQL 5.1.41 (predeterminado de apt).

¿Alguno de ustedes ha hecho esto con éxito?

+0

La manera más fácil es tomar mysqldump y luego soltar la configuración de cambio de esquema e importarla, si su base de datos no es realmente grande. – vinothkr

+0

Quiero mantener el resto de las bases de datos en el disco del sistema (para drupal y cosas por el estilo) y solo mover esta específica del directorio de datos. Lo siento si esto no fue claro a partir de la pregunta. – Norling

+0

Esto podría ser más apropiado para http://serverfault.com/ - votar para migrarlo ... – richsage

Respuesta

16

Resulta que esto funciona, pero mi antiguo enemigo appArmor bloqueó MySQL de leer el directorio movido.

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

líneas add:

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

Gracias por ayudar!

+0

Mismo problema en Ubuntu 12.04 después de mover la base de datos y reemplazarla por un enlace simbólico. La edición del perfil de AppArmor como sugiere funciona. ¡Gracias! –

+0

Gracias. Esta fue mi solución también. – Yada

+0

¡Gracias! No olvides reiniciar el servicio de aparición después de cambiar este –

10

Norling Jr. salvó mi día con la punta de AppArmor, pero desde que tuve algunos problemas para configurarlo , Estoy escribiendo una respuesta más detallada. Estoy usando Ubuntu 12.04.

empezar a convertirse en la raíz para salvar la necesidad de escribir todo lo que sudos:

sudo su - 

Siguiendo MySQL docs, primero se mueven a su ya creado dir base de datos a otra ruta:

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

Aquí estaba mi primera trampa Comprobar si el usuario MySQL tiene acceso a este nuevo camino:

sudo -u mysql ls /new/path/yourdatabase 

Si tienes acceso denegado, probablemente debería dar permiso de ejecución a cada directorio padre:

chmod a+x /new /new/path/ 

prueba para acceder al archivo de nuevo. Si aún así no funciona, intente hacer una pregunta en el desbordamiento de pila :-)

Enlace la nueva ubicación dir y darle los permisos correctos: archivo de configuración local de edición AppArmor

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

de Let. No deberías cambiar el archivo /etc/apparmor.d/usr.sbin.mysqld. Editar el conf local, por lo que no va a perder después de las actualizaciones del sistema:

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

añadir configuraciones Norling Jr.:

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

no se pierda la última coma. Guarde el archivo y vuelva a cargar la configuración de AppArmor:

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

Esto no sólo recargar la configuración de AppArmor MySql, sino también probar que si no hay ningún error de sintaxis (una cosa muy importante). Si no ejecuta el analizador, no se aplicará el nuevo conf.

Finalmente acaba de abrir el cliente mysql y escriba SHOW DATABASES. Si aparece su base de datos, probablemente todo esté bien. Escriba 'USE yourdatabase' para otra comprobación.

Una prueba más robusta también recargaría el servicio mysql: 'service mysql restart' e intentará acceder a su base de datos.

Ahora recordaré la próxima vez que necesito hacerlo. Google y que juntos son la mejor portátil en el mundo :-)

+2

esto fue increíblemente útil, ¡GRACIAS! –

1

Debería ser posible utilizar montajes locales (fijaciones) con los permisos adecuados y montar oprions (incluyendo los de SELinux o apparmor contextos):

/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/ 

Aunque no he probado esta solución así que úsala bajo tu propio riesgo.

+0

Puedo confirmar que esto funciona. Tienes que dedicar una partición completa a solo el subdirectorio mysql, pero una vez que lo haces y lo montas correctamente funciona muy bien. – GaryO

Cuestiones relacionadas