it-swarm.dev

¿Cómo muevo los archivos de datos MySQL a una partición diferente?

Tengo mi disco duro particionado con dos particiones, por lo que puedo reinstalar fácilmente Ubuntu y probar diferentes versiones sin perder los datos de mi directorio personal. Está configurado de esta manera:

_20GB  -> /     (root)
180GB -> /home 
_

Hago mucho trabajo de desarrollo, por lo que tengo mi carpeta _/var/www_ simblinking a _/home/valorin/workspace_.

Pero también quiero hacer esto con mis archivos de datos MySQL, ya que me molesta que cada vez que reinstalo mi máquina necesito hacer una descarga completa de SQL y luego restaurar todos los DB antes de poder hacer más trabajo.

¿Cuál es la mejor manera de hacer esto sin romper MySQL?

28
Stephen RC

Bueno, en realidad hay una posible respuesta específica de Ubuntu a esta pregunta.

Como se menciona en el enlace de Gergoes, se trata básicamente de modificar /etc/mysql/my.cnf y establecer un nuevo valor para datadir = en la sección [mysqld] . Hasta ahora, la parte no específica de la respuesta.

Suponiendo que está ejecutando una versión algo moderna de Ubuntu, es muy posible que tenga AppArmor instalado de forma predeterminada, con un perfil para /usr/sbin/mysqld en modo forzado Es probable que ese perfil predeterminado no acepte su nuevo datadir.

Supongamos que su nuevo datadir será /home/data/mysql .

Si abre el archivo /etc/apparmor.d/usr.sbin.mysqld entre las reglas encontrará estas dos líneas.

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

Suponiendo nuestro ejemplo anterior, deberán ser reemplazados o (probablemente preferibles) complementados por estas dos líneas.

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

Antes de que podamos iniciar nuestro servidor MySQL, con su nuevo datadir, también tendremos que recargar explícitamente nuestro nuevo perfil de apparmor.

$ Sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld
31
andol

El súper usuario tiene unas buenas instrucciones paso a paso sobre cómo resolver este problema

Aquí hay otro conjunto de instrucciones para hacer lo mismo http://www.ubuntugeek.com/how-to-change-the-mysql-data-default-directory.html

Aquí se vuelve a publicar. Sube y vota el original si puedes en superusuario.

Después de cierta confusión general sobre los permisos, me di cuenta de que el problema no era que no tenía mis permisos y rutas correctas, sino que AppArmor impedía que mysql leyera y escribiera en la nueva ubicación.

Esta es mi solución:

Primero detenga MySQL para que no ocurra nada extraño mientras está jugando:

$ Sudo stop mysql

Luego mueva todos los directorios de la base de datos a su nuevo hogar:

$ Sudo mv /var/lib/mysql/<all folders> /new-mysql-dir/

No mueva los archivos, serán generados por mysql, solo mueva las carpetas (que son las bases de datos).

Luego, solicite cortésmente a AppArmor que permita que mysql use la nueva carpeta:

$ Sudo vim /etc/apparmor.d/usr.sbin.mysqld

agregar líneas:

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

Luego diga mysql que el datadir se ha movido:

$ Sudo vim /etc/mysql/my.cnf 

cambiar la linea:

datadir=/var/lib/mysql

a:

datadir=/my-new-db-dir/

NOTA: Dependiendo de la configuración de su base de datos, es posible que también deba cambiar innodb-data-home-dir, etc.

Luego reinicie AppArmor para leer la nueva configuración:

$ Sudo /etc/init.d/apparmor restart

Y vuelva a iniciar MySQL con el nuevo datadir:

$ Sudo start mysql

¡Espero que esto ayude!

4
nelaaro

Para aquellos que como yo trabajamos con VirtualBox y necesitan mover el datadir MySQL a una carpeta compartida en el sistema Host, siga el sencillo tutorial en http://vacilando.org/en/article/moving-mysql-data -files-virtualbox-shared-folder

0
Vacilando

Esto realmente no es específico de Ubuntu. Sin embargo, aquí hay algo que podría ayudar: http://developer.spikesource.com/wiki/index.php/How_to_change_the_mysql_database_location

0
Nathan Osman