¿Diferentes ubicaciones para bases de datos MySQL?

18

¿Puedo configurar MySQL para almacenar una base de datos específica en un lugar separado en el disco?

Todavía quiero que las bases de datos nuevas vayan a la ubicación predeterminada, pero hay una base de datos específica que me gustaría almacenar en mi carpeta de Dropbox para que pueda permanecer sincronizada entre algunas computadoras.

¿Cómo puedo hacer esto?

Colin
fuente
1
Por cierto, es posible hacer esto al revés. Deje la base de datos como estaba y haga un enlace simbólico desde Dropbox. Dropbox realmente no entiende los enlaces simbólicos, y los sincronizará normalmente.
TRiG

Respuestas:

27

¡Por supuesto que puede! Tienes que otorgar permisos de root . Lea las páginas del manual en ln .

MySQL almacena los datos de la base de datos en directorios separados /var/lib/mysql. Creo que al principio tenía que hacer un directorio, donde desea colocar los archivos de la base de datos seleccionada. Otorgue permisos de root, detenga el demonio de MySQL:

# /etc/init.d/mysql stop

Copie sus datos a su nueva carpeta:

# cp /var/lib/mysql/DATABASENAME /path/to/new/database/dir

Elimine su antiguo directorio de los archivos de datos MySQL: ( ¡Advertencia! ¡SIEMPRE haga que el volcado de SQL sea el primero! )

# rm -R /var/lib/mysql/DATABASENAME

Haga un enlace simbólico de nuevo al directorio de datos MySQL: ( ¡Atención! ¡Lea la página de manual de ln primero! )

# ln -s /full/path/to/new/database/dir /var/lib/mysql/DATABASENAME

Después de eso, estás listo, inicia tu MySQL:

# /etc/init.d/mysql start

¡Advertencia! Si su nuevo directorio no es de escritura y legible por MySQL, ¡eso no funcionaría! Ejemplo, el problema común: coloca su nuevo directorio de datos en su carpeta de inicio, su carpeta de inicio está protegida contra lectura por otros (ej: drwxrwx --- usted es su dirección).

¡Pregunte, si quiere saber otras cosas sobre ese método!

antivirtel
fuente
2
¡Gracias! Ni siquiera consideraba los enlaces simbólicos, estaba demasiado ocupado pensando en formas de hacerlo dentro de mysql.
Colin
8
Querrá editar /etc/apparmor.d/*mysqldpara incluir el nuevo directorio también. Luego, sudo service apparmor reloadantes de reiniciar MySQL.
Kees Cook, el
3
@KeesCook muchas gracias por la sugerencia de aparición, ¡eso me estaba volviendo loco! Sin embargo, parece que es mejor ponerlo /etc/apparmor.d/local(en mi instalación ya hay un usr.sbin.mysqld allí), agregar un solo lo /full/path/to/new/database/dir/** rwk,hizo por mí ...
Tobias J
Muchas gracias, algunos detalles de la edición del apparmor aquí también son útiles. Me retrasé tratando de poner la base de datos en una unidad que no se montó automáticamente en el arranque y necesitaba un usuario root para acceder a ella. Se negó a trabajar. Editado fstabcomo este para que esa unidad se monta en el sistema de archivos después de arranque, ahora todo funciona.
cardamomo
3

Tenga en cuenta que si está utilizando Ubuntu, también debe agregar una entrada en el archivo de configuración de AppArmour /etc/apparmor.d/usr.sbin.mysqld; de lo contrario, seguirá recibiendo errores de permisos de escritura aunque cambie los archivos y la carpeta permisos

Andrea Moro
fuente