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

27

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, así que tengo mi /var/wwwcarpeta simbólica /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?

Stephen RC
fuente

Respuestas:

30

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
andol
fuente
Esto no parece funcionar en Natty (11.4). Tuve que iniciar MySQL usando / usr / sbin / mysqld para que leyera mi directorio de datos modificado. De lo contrario, continuó leyendo mi antiguo directorio de datos. Esto podría ser un error de mi parte.
tres tazas
Lo anterior no pudo resolver el problema para mí en Ubuntu 12.04 (Precise). Descubrí que es necesario editar el archivo /etc/apparmor.d/tunables/alias para incluir una línea "alias / var / lib / mysql / -> / home / data / mysql /," Con esto en su lugar, yo no necesitaba ningún cambio en ninguno de los otros archivos de AppArmor. Funcionó inmediatamente después de reiniciar AppArmor con "/etc/init.d/apparmor restart" y MySQL con "reiniciar mysql".
marzo
Creo que ciertos permisos deben establecerse en la nueva carpeta que se utilizará. ¿Alguien sabe qué son ellos? Sé que la instalación de mysql crea un usuario de mysql ... y que, por defecto, no puedo acceder al contenido de la carpeta / var / lib / mysql.
NullVoxPopuli
4

Super 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 dígale a 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 necesite 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!

nelaaro
fuente
0

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

Nathan Osman
fuente
Las instrucciones realmente no ayudaron, ya que la parte que no pude trabajar fue AppArmour y su publicación solo lo explicó de pasada. Además, ¿este sitio tiene preguntas específicas de Ubuntu? ¿Cómo saben los nuevos usuarios que buscan ayuda qué es específico de Ubuntu o no, y dónde deben preguntarles si son genéricos?
Stephen RC
Sitio web no disponible.
Hengjie
-1

Esto no funcionará así como así.

El usuario mysql debe tener el derecho de escribir en el nuevo directorio:

sudo chown -R mysql:mysql /newdatadir
sudo chmod -R 754 /newdatadir
sudo chmod 754 /newdatadir/..
Marin Marušić
fuente