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.