Cómo instalar MySQL en Ubuntu 18.04

Una versión anterior de este tutorial fue escrita por Hazel Virdó
Introducción
MySQL es un sistema de gestión de bases de datos de código abierto que se suele instalar como parte de la popular pila LAMP (Linux, Apache, MySQL, PHP/Python/Perl). Utiliza una base de datos relacional y SQL (lenguaje de consulta estructurado) para gestionar sus datos.
La versión corta de la instalación es simple: actualice el índice de paquetes, instale el mysql-server
paquete y luego ejecute el script de seguridad incluido.
- sudo apt update
- sudo apt install mysql-server
- sudo mysql_secure_installation
En este tutorial se explica cómo instalar la versión 5.7 de MySQL en un servidor Ubuntu 18.04. Sin embargo, si desea actualizar una instalación existente de MySQL a la versión 5.7, puede leer esta guía de actualización de MySQL 5.7 .
Prerrequisitos
Para seguir este tutorial, necesitarás:
- Un servidor Ubuntu 18.04 configurado siguiendo esta guía de configuración inicial del servidor , incluido un usuario no root
sudo
con privilegios y un firewall.
Paso 1: Instalación de MySQL
En Ubuntu 18.04, solo la última versión de MySQL está incluida en el repositorio de paquetes APT de forma predeterminada. Al momento de escribir este artículo, es MySQL 5.7.
Para instalarlo, actualice el índice de paquetes en su servidor con apt
:
- sudo apt update
Luego instale el paquete predeterminado:
- sudo apt install mysql-server
Asegúrese de que el servidor esté ejecutándose mediante el systemctl start
comando:
- sudo systemctl start mysql.service
Estos comandos instalarán e iniciarán MySQL, pero no le solicitarán que establezca una contraseña ni que realice ningún otro cambio de configuración. Como esto hace que la instalación de MySQL sea insegura, abordaremos este tema a continuación.
Paso 2: Configuración de MySQL
En el caso de instalaciones nuevas, deberá ejecutar el script de seguridad incluido. Esto cambia algunas de las opciones predeterminadas menos seguras para elementos como inicios de sesión remotos como root y usuarios de muestra. En versiones anteriores de MySQL, también era necesario inicializar el directorio de datos manualmente, pero ahora esto se hace automáticamente.
Ejecute el script de seguridad:
- sudo mysql_secure_installation
Esto lo llevará a través de una serie de indicaciones donde puede realizar algunos cambios en las opciones de seguridad de su instalación MySQL. La primera indicación le preguntará si desea configurar el complemento Validar contraseña, que se puede utilizar para probar la solidez de su contraseña MySQL. Independientemente de su elección, la siguiente indicación será para configurar una contraseña para el usuario root MySQL . Ingrese y luego confirme una contraseña segura de su elección.
Desde allí, puede presionar Y
y luego ENTER
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 remotos como root y cargará estas nuevas reglas para que MySQL respete de inmediato los cambios que haya realizado.
Para inicializar el directorio de datos MySQL, deberá utilizar mysql_install_db
para las versiones anteriores a la 5.7.6 y mysqld --initialize
para la 5.7.6 y posteriores. Sin embargo, si instaló MySQL desde la distribución Debian, como se describe en el Paso 1, el directorio de datos se inicializó automáticamente; no tiene que hacer nada. Si intenta ejecutar el comando de todos modos, verá el siguiente error:
Producción
mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists). . .2018-04-23T13:48:00.572066Z 0 [ERROR] Aborting
Tenga en cuenta que, aunque haya establecido una contraseña para el usuario root de MySQL, este usuario no está configurado para autenticarse con una contraseña al conectarse al shell de MySQL. Si lo desea, puede ajustar esta configuración siguiendo el paso 3.
Paso 3 (opcional): Ajuste de la autenticación y los privilegios del usuario
En los sistemas Ubuntu que ejecutan MySQL 5.7 (y versiones posteriores), el usuario rootauth_socket
de MySQL está configurado para autenticarse mediante el complemento de forma predeterminada en lugar de con una contraseña. Esto permite una mayor seguridad y facilidad de uso en muchos casos, pero también puede complicar las cosas cuando necesita permitir que un programa externo (por ejemplo, phpMyAdmin) acceda al usuario.
Para usar una contraseña para conectarse a MySQL como root , deberá cambiar su método de autenticación de auth_socket
a mysql_native_password
. Para ello, abra el indicador de MySQL desde su terminal:
- sudo mysql
A continuación, verifique qué método de autenticación utiliza cada una de sus cuentas de usuario MySQL con el siguiente comando:
- SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+-------------------------------------------+-----------------------+-----------+| user | authentication_string | plugin | host |+------------------+-------------------------------------------+-----------------------+-----------+| root | | auth_socket | localhost || mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost || mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost || debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |+------------------+-------------------------------------------+-----------------------+-----------+4 rows in set (0.00 sec)
En este ejemplo, puede ver que el usuario root se autentica de hecho mediante el auth_socket
complemento. Para configurar la cuenta rootALTER USER
para que se autentique con una contraseña, ejecute el siguiente comando. Asegúrese de cambiar password
a una contraseña segura de su elección y tenga en cuenta que este comando cambiará la contraseña root que estableció en el Paso 2:
- ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Luego, ejecute FLUSH PRIVILEGES
lo que le indica al servidor que vuelva a cargar las tablas de concesión y ponga en vigencia los nuevos cambios:
- FLUSH PRIVILEGES;
Verifique nuevamente los métodos de autenticación empleados por cada uno de sus usuarios para confirmar que root ya no se autentica usando el auth_socket
complemento:
- SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+-------------------------------------------+-----------------------+-----------+| user | authentication_string | plugin | host |+------------------+-------------------------------------------+-----------------------+-----------+| root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost || mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost || mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost || debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |+------------------+-------------------------------------------+-----------------------+-----------+4 rows in set (0.00 sec)
En este ejemplo de salida, puede ver que el usuario root de MySQL ahora se autentica mediante una contraseña. Una vez que confirme esto en su propio servidor, puede salir del shell de MySQL:
- exit
Como alternativa, es posible que algunas personas consideren que se adapta mejor a su flujo de trabajo conectarse a MySQL con un usuario dedicado. Para crear dicho usuario, vuelva a abrir el shell de MySQL:
- sudo mysql
Nota: Si tiene habilitada la autenticación de contraseña para root , como se describe en los párrafos anteriores, deberá usar un comando diferente para acceder al shell MySQL. Lo siguiente ejecutará su cliente MySQL con privilegios de usuario normales y solo obtendrá privilegios de administrador dentro de la base de datos mediante la autenticación:
- mysql -u root -p
Desde allí, crea un nuevo usuario y asígnale una contraseña segura:
- CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
A continuación, otorgue al nuevo usuario los privilegios adecuados. Por ejemplo, puede otorgarle privilegios a todas las tablas de la base de datos, así como la capacidad de agregar, cambiar y eliminar privilegios de usuario, con este comando:
- GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
Tenga en cuenta que, en este punto, no es necesario ejecutar el FLUSH PRIVILEGES
comando nuevamente. Este comando solo es necesario cuando modifica las tablas de concesión mediante instrucciones como INSERT
, UPDATE
o DELETE
. Debido a que creó un nuevo usuario, en lugar de modificar uno existente, FLUSH PRIVILEGES
no es necesario en este caso.
A continuación, salga del shell MySQL:
- exit
Por último, probemos la instalación de MySQL.
Paso 4: Prueba de MySQL
Independientemente de cómo lo hayas instalado, MySQL debería haber comenzado a ejecutarse automáticamente. Para comprobarlo, comprueba su estado.
- systemctl status mysql.service
Verá un resultado similar al siguiente:
Producción
● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: en Active: active (running) since Wed 2018-04-23 21:21:25 UTC; 30min ago Main PID: 3754 (mysqld) Tasks: 28 Memory: 142.3M CPU: 1.994s CGroup: /system.slice/mysql.service └─3754 /usr/sbin/mysqld
Si MySQL no se está ejecutando, puedes iniciarlo con sudo systemctl start mysql
.
Para una comprobación adicional, puedes intentar conectarte a la base de datos mediante la mysqladmin
herramienta, que es un cliente que te permite ejecutar comandos administrativos. Por ejemplo, este comando dice que te conectes a MySQL como root ( -u root
), solicitas una contraseña ( -p
) y devuelves la versión.
- sudo mysqladmin -p -u root version
Deberías ver un resultado similar a este:
Producción
mysqladmin Ver 8.42 Distrib 5.7.21, for Linux on x86_64Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Server version5.7.21-1ubuntu1Protocol version10ConnectionLocalhost via UNIX socketUNIX socket/var/run/mysqld/mysqld.sockUptime:30 min 54 secThreads: 1 Questions: 12 Slow queries: 0 Opens: 115 Flush tables: 1 Open tables: 34 Queries per second avg: 0.006
Esto significa que MySQL está en funcionamiento.
Conclusión
Ahora tiene una configuración básica de MySQL instalada en su servidor. A continuación, se muestran algunos ejemplos de los pasos que puede seguir:
- Implementar algunas medidas de seguridad adicionales
- Reubicar el directorio de datos
- Administra tus servidores MySQL con SaltStack
Deja una respuesta