Cómo instalar MySQL en Ubuntu 20.04

Introducción

MySQL es un sistema de gestión de bases de datos de código abierto, comúnmente instalado como parte del popular conjunto LAMP (Linux, Apache, MySQL, PHP/Python/Perl). Implementa el modelo relacional y utiliza el lenguaje de consulta estructurado (mejor conocido como SQL) para administrar tus datos.

Este tutorial te explicará cómo instalar MySQL versión 8 en un servidor Ubuntu 20.04. Al completarlo, tendrás una base de datos relacional que puedes usar para crear tu próximo sitio web o aplicación.

Prerrequisitos

Para seguir este tutorial, necesitarás:

Paso 1 – Instalar MySQL

En Ubuntu 20.04, puedes instalar MySQL utilizando el repositorio de paquetes APT. Al momento de escribir esto, la versión de MySQL disponible en el repositorio predeterminado de Ubuntu es la versión 8.0.19.

Para instalarlo, debes actualizar el índice de paquetes en tu servidor si no lo has hecho recientemente:

Luego debes instalar el paquete mysql-server:

Esto instalará MySQL, pero no te pedirá que establezcas una contraseña ni realices ningún otro cambio de configuración. Como esto deja tu instalación de MySQL insegura, abordaremos esto a continuación.

Paso 2 – Configurando MySQL

Para nuevas instalaciones de MySQL, querrás ejecutar el script de seguridad incluido en el DBMS. Este script cambia algunas de las opciones predeterminadas menos seguras para cosas como inicios de sesión root remotos y usuarios de muestra.

Debes ejecutar el script de seguridad con sudo:

Esto te llevará a través de una serie de indicaciones. Indicaciones en las que puedes realizar algunos cambios en las opciones de seguridad de tu instalación de MySQL.

El primer mensaje te preguntará si deseas configurar el complemento validar contraseña (Validate Password), que puede usarse para probar la seguridad de tu contraseña MySQL.

Si eliges configurar el complemento validar contraseña, el script te pedirá que elijas un nivel de validación de contraseña. El nivel más fuerte, que seleccionas al ingresar 2, requerirá que tu contraseña tenga al menos ocho caracteres. Además, debe incluir una combinación de mayúsculas, minúsculas, números y caracteres especiales:

Independientemente de si eliges configurar el complemento validar contraseña, el siguiente mensaje será establecer una contraseña para el usuario root de MySQL. Debes ingresar y luego confirmar una contraseña segura de tu elección:

Si utilizaste el complemento validar contraseña, recibirás comentarios sobre la solidez de tu nueva contraseña. Luego, el script te preguntará si deseas continuar con la contraseña que acabas de ingresar o si deseas ingresar una nueva. Suponiendo que estás satisfecho con la seguridad de la contraseña que acabas de ingresar, ingresa Y para continuar el script:

Desde allí, puedes presionar Y y luego ENTER para aceptar los valores predeterminados para todas las preguntas posteriores. Esto eliminará algunos usuarios anónimos y la base de datos de prueba, deshabilitará los inicios de sesión root remotos. Asimismo, cargará estas nuevas reglas para que MySQL respete de inmediato los cambios que has realizado.

Aclaración importante

Ten en cuenta que, aunque hayas establecido una contraseña para el usuario root de MySQL, este usuario no está configurado para autenticarse con una contraseña. Esto cuando se conecta a la shell de MySQL. Si lo deseas, puedes ajustar esta configuración siguiendo el Paso 3.

Paso 3 – (Opcional) Ajuste de autenticación de usuario y privilegios

En los sistemas Ubuntu que ejecutan MySQL 5.7 (y versiones posteriores), el usuario root de MySQL está configurado para autenticarse utilizando el complemento auth_socket. Este tipo de autenticación es de forma predeterminada en lugar de con una contraseña.

Esto permite una mayor seguridad y facilidad de uso en muchos casos. No obstante, también puede complicar las cosas cuando necesitas permitir que un programa externo (por ejemplo, phpMyAdmin) acceda al usuario.

Para utilizar una contraseña para conectarte a MySQL como root, deberás cambiar tu método de autenticación de auth_socket a otro complemento, como caching_sha2_passwordmysql_native_password. Para hacer esto, debes abrir el indicador de MySQL desde tu terminal:

Luego, debes verificar qué método de autenticación utiliza cada una de tus cuentas de usuario MySQL con el siguiente comando:

En este ejemplo, puedes ver que el usuario root de hecho se autentica usando el complemento auth_socket. Para configurar la cuenta root para autenticarse con una contraseña, debes ejecutar una instrucción ALTER USER. Esto para cambiar el complemento de autenticación que usas y establecer una nueva contraseña.

Asegúrate de cambiar password a una contraseña segura de tu elección. Además, debes tener en cuenta que este comando cambiará la contraseña root que estableciste en el Paso 2:

Nota: La sentencia anterior ALTER USER establece que el usuario root de MySQL se autentique con el complemento caching_sha2_password. Según la documentación oficial de MySQL, caching_sha2_password es el complemento de autenticación preferido de MySQL. La razón es que proporciona un cifrado de contraseña más seguro que el anterior, pero aún se usa ampliamente mysql_native_password.

Sin embargo, algunas versiones de PHP no funcionan de manera confiable con caching_sha2_password. Si planeas utilizar esta base de datos con una aplicación PHP como phpMyAdmin, puedes configurar root para autenticarte en con mysql_native_password:

Aplicar cambios

Luego, debes ejecutar FLUSH PRIVILEGES que le dice al servidor que vuelva a cargar las tablas y ponga en práctica tus nuevos cambios:

Verifica nuevamente los métodos de autenticación empleados por cada uno de tus usuarios para confirmar que root ya no se autentica utilizando el complemento auth_socket:

Puedes ver en la salida de este ejemplo que el usuario root de MySQL ahora se autentica usando caching_sha2_password. Una vez que confirmes esto en tu propio servidor, puedes salir de la shell de MySQL:

Alternativamente, algunos pueden encontrar que se adapta mejor a su flujo de trabajo poder conectarse a MySQL con un usuario dedicado. Para crear dicho usuario, debes abrir nuevamente la shell de MySQL:

Nota:

Si tienes habilitada la autenticación de contraseña para root, como se describe en los párrafos anteriores, necesitarás usar un comando diferente. Esto para acceder a la shell de MySQL. Lo siguiente ejecutará tu cliente MySQL con privilegios de usuario regulares. Solo obtendrás privilegios de administrador dentro de la base de datos mediante la autenticación:

A partir de ahí, debes crear un nuevo usuario y darle una contraseña segura:

Luego, debes otorgar a tu nuevo usuario los privilegios apropiados. Por ejemplo, puedes otorgar privilegios de usuario a todas las tablas dentro de la base de datos. También puedes agregar, cambiar y eliminar privilegios de usuario, con este comando:

Ten en cuenta que, en este punto, no necesitas volver a ejecutar el comando FLUSH PRIVILEGES. Este comando sólo es necesario cuando se modifican las tablas de permisos utilizando frases como INSERTUPDATEDELETE. Porque creaste un nuevo usuario, en lugar de modificar uno existente, FLUSH PRIVILEGES es innecesario aquí.

Después de esto, debes salir de la shell de MySQL:

Finalmente, probemos la instalación de MySQL.

Paso 4 – Prueba de MySQL

Independientemente de cómo lo instalaste, MySQL debería haber comenzado a ejecutarse automáticamente. Para probar esto, verifica tu estado.

Verás una salida similar a la siguiente:

Si MySQL no se está ejecutando, puedes comenzar con sudo systemctl start mysql.

Para una verificación adicional, puedes intentar conectarte a la base de datos utilizando la herramienta mysqladmin; es un cliente que te permite ejecutar comandos administrativos. Por ejemplo, este comando le dice a MySQL que debe conectarse como root (-u root), solicitar una contraseña (-p) y devolver la versión.

Deberías ver una salida similar a esta:

Esto significa que MySQL está en funcionamiento.

Conclusión

Ahora tienes una configuración básica de MySQL instalada en tu servidor. Aquí hay algunos ejemplos de los próximos pasos que puedes seguir: