Saltar al contenido

Cómo mover un directorio de datos de MySQL a un nuevo lugar en Ubuntu 18.04

marzo 4, 2020

 

Introducción

bases de datos crecen con el tiempo, a veces superando el espacio en el sistema de archivos. También puede ejecutar en E / S de contención cuando están situados en la misma partición que el resto del sistema operativo. RAID, almacenamiento de bloques de la red y otros dispositivos pueden ofrecer redundancia y otras características deseables. Si va a añadir más espacio, evaluando formas de optimizar el rendimiento, o en busca de aprovechar otras características de almacenamiento, este tutorial le guiará a través de la reubicación de directorio de datos de MySQL.

Requisitos previos

Para completar esta guía, necesitará:

  • Un servidor de Ubuntu 18.04 con un usuario no root con privilegios sudo. Se puede obtener más información sobre cómo configurar un usuario con privilegios de estos en nuestra configuración inicial del servidor con Ubuntu 18.04 guía. servidor
  • Un MySQL. Si no lo ha instalado MySQL, el Cómo instalar MySQL en Ubuntu 18.04 guía puede ayudarle.

Una Ubuntu 18.04 servidor con un usuario no root con privilegios sudo . Se puede obtener más información sobre cómo configurar un usuario con privilegios de estos en nuestra configuración inicial del servidor con Ubuntu 18.04 guía.

Un servidor MySQL . Si no lo ha instalado MySQL, el Cómo instalar MySQL en Ubuntu 18.04 guía puede ayudarle.

En este ejemplo, nos estamos moviendo los datos a un dispositivo de almacenamiento de bloque montado en / mnt / volumen-nyc1-01. Usted puede aprender cómo instalar uno en el cómo utilizar bloque de almacenamiento en la guía digitalocean.

No importa cuál de almacenamiento subyacente que utiliza, esta guía puede ayudarle a mover el directorio de datos a una nueva ubicación.

Paso 1 – Mover el directorio de datos de MySQL

Para prepararse para mover el directorio de datos de MySQL, vamos a verificar la ubicación actual iniciando una sesión interactiva de MySQL utilizando las credenciales administrativas. raíz

mysql -u root -p

  • mysql -u -p

Cuando se le solicite, proporcionar la contraseña de root de MySQL. Luego, desde el MySQL mensaje, seleccione el directorio de datos:

select @@datadir;

  • seleccionar @@ datadir;

Output+-----------------+
| @@datadir |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set (0.00 sec)

confirma esta salida que MySQL está configurado para utilizar el directorio de datos predeterminado, / var / lib / mysql /, así que es el directorio tenemos que avanzar. Una vez que haya confirmado esto, escriba exit para salir del monitor.

Para garantizar la integridad de los datos, nos cerramos MySQL antes de que realmente realizar cambios en el directorio de datos:

sudo systemctl stop mysql

  • sudo parada systemctl MySQL

systemctl no muestra el resultado de todos los comandos de gestión de servicios, así que si usted quiere estar seguro de que ha tenido éxito, utilice el siguiente comando:

sudo systemctl status mysql

  • sudo systemctl estado de MySQL

puede estar seguro de que está cerrado si la última línea de la salida que se detiene el servidor dice:

Output. . .
Jul 18 11:24:20 ubuntu-512mb-nyc1-01 systemd[1]: Stopped MySQL Community Server.

Ahora que el servidor está apagado, vamos a copiar el directorio de base de datos existente a la nueva ubicación con rsync. Utilizando el indicador -a conserva los permisos y otras propiedades del directorio, mientras-V proporciona verbosa de salida para que pueda seguir el progreso.

Nota: Asegúrese de que no hay barra final en el directorio, que se puede añadir si se utiliza la implementación del tabulador. Cuando hay una barra final, rsync volcar el contenido del directorio en el punto de montaje en lugar de transferirla a un directorio que contiene MySQL:

sudo rsync -av /var/lib/mysql /mnt/volume-nyc1-01

  • sudo rsync -av / var / lib / mysql / mnt / volumen nyc1-01

una vez que el rsync es completa, cambiar el nombre de la carpeta actual con una extensión .bak y mantenerlo hasta que hemos confirmado que la medida fue exitosa. Al volver a nombrarlo, vamos a evitar la confusión que podría surgir de los archivos en la nueva y la antigua ubicación:

sudo mv /var/lib/mysql /var/lib/mysql.bak

  • sudo mv / var / lib / mysql /var/lib/mysql.bak

Ahora está listo para dirigir nuestra atención a la configuración.

Paso 2 – apuntando a la nueva ubicación de datos

MySQL tiene varios modos para anular los valores de configuración. Por defecto, el datadir se establece en / var / lib / mysql en el archivo /etc/mysql/mysql.conf.d/mysqld.cnf. Editar este archivo para reflejar el nuevo directorio de datos:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

  • sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Busque la línea que comienza con datadir = y cambie la ruta que sigue para reflejar la nueva ubicacion.

En nuestro caso, las miradas de archivos actualizados como el resultado a continuación:

. . .
datadir=/mnt/volume-nyc1-01/mysql
. . .

Este parece ser el momento adecuado para abrir MySQL de nuevo, pero hay una cosa más que configurar antes de que podamos hacerlo con éxito.

Paso 3 – Configuración de AppArmor Control de Acceso Reglas

Nos tendrá que indicar a AppArmor para que MySQL escritura en el nuevo directorio mediante la creación de un alias entre el directorio predeterminado y la nueva ubicación. Para ello, editar el archivo de alias AppArmor:

sudo nano /etc/apparmor.dunables/alias

  • sudo nano /etc/apparmor.dunables/alias

Al final del archivo, agregue la siguiente regla alias:

. . .
alias /var/lib/mysql/ -> /mnt/volume-nyc1-01/mysql/,
. . .

Para que los cambios surtan efecto, reinicie AppArmor:

sudo systemctl restart apparmor

  • sudo systemctl reinicio apparmor

Nota: Si se ha saltado el paso de configuración de AppArmor, que se encontraría con el siguiente mensaje de error:

OutputJob for mysql.service failed because the control process
exited with error code. See "systemctl status mysql.service"
and "journalctl -xe" for details.

la salida de ambos systemctl y journalctl concluye con:

OutputJul 18 11:03:24 ubuntu-512mb-nyc1-01 systemd[1]:
mysql.service: Main process exited, code=exited, status=1/FAILURE

Dado que los mensajes no hacen una conexión explícita entre AppArmor y el directorio de datos, este error puede tomar algún tiempo para averiguar.

Paso 4 – Reinicio de MySQL

El siguiente paso es empezar a MySQL, pero si lo hace, se encontrará con otro error. Esta vez, en lugar de un problema AppArmor, el error se debe a que la secuencia de comandos mysql-systemd-Start comprueba la existencia de cualquiera de un directorio, -d, o un enlace simbólico, -L, que coincide con dos rutas predeterminadas. Se produce un error si no se encontraron:

. . .
if [ ! -d /var/lib/mysql ] && [ ! -L /var/lib/mysql ]; then
echo "MySQL data dir not found at /var/lib/mysql. Please create one."
exit 1
fi

if [ ! -d /var/lib/mysql/mysql ] && [ ! -L /var/lib/mysql/mysql ]; then
echo "MySQL system database not found. Please run mysql_install_db tool."
exit 1
fi

. . .

Puesto que necesitamos estos para iniciar el servidor, vamos a crear la estructura de directorios mínimo para pasar Compruebe el entorno del guión.

sudo mkdir /var/lib/mysql/mysql -p

  • sudo mkdir / var / lib / mysql / mysql -p

Ahora estamos listos para iniciar MySQL.

sudo systemctl start mysql
sudo systemctl status mysql

  • sudo mysql inicio systemctl
  • sudo systemctl estado de MySQL

Para asegurarse de que el directorio de datos nuevo es de hecho en uso, iniciar el monitor de MySQL.

mysql -u root -p

  • mysql -u root -p

mirar el valor para el directorio de datos de nuevo:

Output+----------------------------+
| @@datadir |
+----------------------------+
| /mnt/volume-nyc1-01/mysql/ |
+----------------------------+
1 row in set (0.01 sec)

Ahora que ha reiniciado MySQL y confirmó que está utilizando la nueva ubicación, aprovechar la oportunidad para asegurarse de que su base de datos es completamente funcional. Una vez que haya verificado la integridad de los datos existentes, puede quitar el directorio de datos de copia de seguridad:

sudo rm -Rf /var/lib/mysql.bak

  • sudo rm -rf /var/lib/mysql.bak

Reinicio de MySQL una última vez para asegurarse de que funciona como se esperaba:

sudo systemctl restart mysql
sudo systemctl status mysql

  • sudo systemctl reiniciar MySQL
  • sudo systemctl estado de MySQL

Conclusión

En este tutorial, nos hemos movido directorio de datos de MySQL a una nueva ubicación y actualizado de Ubuntu AppArmor ACL para acomodar el ajuste. A pesar de que estábamos usando un dispositivo de bloque de almacenamiento, las instrucciones aquí deben ser adecuados para la redefinición de la ubicación del directorio de datos independientemente de la tecnología subyacente.

Para más información sobre la gestión de directorios de datos de MySQL, consulte estas secciones en la documentación oficial de MySQL: Directorio de datos

  • El Mysql
  • Configuración de varios Directorios de datos