Saltar al contenido

Instalación y configuración de MySQL en Debian Linux

Etiquetas:

En este artículo veremos cómo realizar la instalación de la última versión de MySQL sobre Debian.

Tradicionalmente la instalación se hacía directamente a través de su paquete correspondiente, pero Debian ya no incluye en su repositorio MySQL, en su lugar incluye su fork MariaDB.

También veremos como personalizar la instalación y ponerla a punto para un entorno en producción.

Instalación

Instalamos algunos requisitos

apt-get install gnupg2

Descargamos el paquete instalador del repositorio

wget https://dev.mysql.com/get/mysql-apt-config_0.8.16-1_all.deb

Instalamos el paquete y se iniciará el instalador

dpkg -i mysql-apt-config_0.8.16-1_all.deb

Seleccionamos la versión correspondiente, en nuestro caso mysql-8.0

Marcamos Ok para iniciar la instalación.

Una vez actualizado nuestro repositorio con la versión de MySQL seleccionada hacemos un update del repositorio general y procedemos con la instalación del paquete mysql-server

apt-get update

apt-get install mysql-server

En el proceso de instalación nos pedirá la contraseña del usuario root de MySQL

Una vez configurada la contraseña nos muestra un aviso informativo sobre la nueva autenticación incorporada en la versión MySQL 8.

Aceptamos y elegimos qué autenticación utilizar. En nuestro caso seleccionaremos el método nuevo. Más adelante veremos cómo habilitar la autenticación Legacy a determinados usuarios.

Comprobamos que se ha instalado la versión seleccionada correctamente

mysqladmin -u root -p version

Securización

Disponemos de la siguiente herramienta para securizar nuestra instalación. Facilita elementos de seguridad como la política de contraseñas, conexiones anónimas, login remoto de root, etc.

mysql_secure_installation

Acceso remoto

Por defecto, sólo se permite la conexión al servidor de MySQL desde el host local. Si queremos permitir las conexión desde otros host, debemos seguir los siguiente pasos:

Permitir las conexiones remotas

Modificamos el fichero de configuración y añadimos la siguiente entrada

vim /etc/mysql/mysql.conf.d/mysqld.conf

bind-address = 0.0.0.0

Al poner la dirección 0.0.0.0 permitimos todas las conexiones remotas.

Reiniciamos el servicio mysql para aplicar los cambios

service mysql restart

Crear un usuario con permiso de conexión remota

Accedemos a la consola de mysql y creamos el usuario

mysql -u root -p

CREATE USER 'usuario'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'usuario'@'%';

FLUSH PRIVILEGES;

El carácter ‘%’ significa que se permite la conexión desde cualquier host remoto. Podríamos acotarlo especificando el nombre del host o la ip.

Autenticación legacy

Algunas aplicaciones aún exigen la autenticación legacy. Podemos configurar que un usuario concreto utilice el sistema autenticación legacy aplicando la modificación.

mysql -u root -p

ALTER USER 'usuario'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

FLUSH PRIVILEGES;

Parámetros y variables

Es común tener que modificar algunos parámetros de configuración para adaptarlo a nuestras necesidades. Como ejemplo vamos a ver uno de los más comunes, el parámetro de conexiones máximas. Vamos a ver cómo consultar y modificarlo.

Nos conectamos a la consoloa de mysql y ejecutamos las siguientes sentencias:

mysql u root p

SHOW STATUS LIKE '%connections';
SHOW VARIABLES LIKE '%connections';

Podemos modificar los parámetros de forma online, aunque temporal, con la siguiente sentencia:

SET GLOBAL max_connections = 512;
flush hosts;

Estas modificaciones se pierden y se restauran a los valores por defecto cuando se reinicia la base de datos.

Si queremos cambiar los parámetros de forma permanente debemos modificar el siguiente fichero de configuración y añadir el siguiente parámetro en la sección indicada:

vim /etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld]
max_connections = 512

Reiniciamos el servicio para aplicar los cambios

service mysql restart

Carpeta de datos

Es una buena práctica que los archivos de base de datos estén en una unidad independiente del sistema operativo. A continuación, vamos a ver un sencillo proceso de cómo mover estos archivos a una nueva unidad.

La ruta donde se almacenan los archivos de base de datos es «/var/lib/mysql«

Paramos el servicio mysql

service mysql stop

Renombramos la carpeta original /var/lib/mysql

mv /var/lib/mysql /var/lib/mysql.backup

Creamos una nueva carpeta con el nombre original y montamos la nueva unidad

mkdir /var/lib/mysql

mount /dev/sdb /var/lib/mysql

Confirmamos que el montaje es correcto

df -h /dev/sdb

Copiamos los datos

cp -R /var/lib/mysql.backup/* /var/lib/mysql/

Cambiamos los permisos de la carpeta

chown -R mysql:mysql /var/lib/mysql

Arrancamos el servicio mysql

service mysql start

Finalmente configuramos el archivos fstab para que la nueva unidad se monte automáticamente

vim /etc/fstab

/dev/sdb /var/lib/mysql ext4 errors=remount-ro 0 1

Ahora ya tenemos nuestros archivos de bases de datos en una unidad independiente.

Backup/Restore

Backup

mysqldump -u root -p database > /mnt/backup/database.sql

Restore

mysql -u root -p database < /mnt/backup/database.sql

Restore sobre una base de datos limpia

mysql -u root -p

CREATE DATABASE database CHARACTER SET utf8 COLLATE utf8_general_ci;
FLUSH PRIVILEGES;
EXIT

mysql -u root -p database < /mnt/backup/database.sql

Recurso SMB para Backup

Es común tener un recurso SMB para realizar el Backup/Restore de las bases de datos. A continuación vamos a ver cómo configurarlo

Instalamos los requisitos

apt-get install cifs-utils smbclient

Creamos la carpeta de backup

mkdir /mnt/backup

Creamos el fichero donde se almacenarán las credenciales de red

vim /etc/cifspasswd

username=usuario
password=contraseña
domain=dominio

Editamos el archivo fstab para que el recurso se monte automáticamente

vim /etc/fstab

//NAS/Backup      /mnt/backup             cifs    uid=500,credentials=/etc/cifspasswd,iocharset=utf8,vers=1.0,sec=ntlm,file_mode=0770,dir_mode=0770   0 0

Ajustaremos lo parámetros del montaje según nuestras necesidades.