Hola amigo bienvenido en este post aprenderás como Instalar Mysql Server en Ubuntu server 20.04 sin mas comencemos:

Requisitos previos:

Instalar MySQL Server en nuestro Ubuntu Server 20.04

Procederemos a instalar Mysql Server con el siguiente comando:

$ sudo apt install mysql-server

Presiona «Y» para continuar y a continuación se instalara MySQL server con todas sus dependencias. Después procederemos a darle seguridad al servidor.

Configurar Mysql Server en nuestro Ubuntu Server 20.04

Una ves que termino la instalación de MySQL Server, vamos a ejecutar un comando que nos permitirá darle mayor seguridad a nuestro servidor MySQL ejecuta el siguiente comando:

$ sudo mysql_secure_installation

El ejecutarlo la terminal te llevara paso a paso por cada unas de las configuraciones las cuales veremos a continuación.

Lo primero que configuraremos sera el complemento de validación de contraseña, el cual nos permitirá probar la seguridad de la contraseña de MySQL.

Presionamos «Y» para activarlo y nos pedirá seleccionar el nivel de protección siempre te recomendare el nivel mas alto así que presionamos 2 para «STRONG» posteriormente te pedirá un nuevo password para root, el cual deberá de tener mínimo 8 caracteres, minúsculas, números y símbolos.

$ sudo mysql_secure_installation

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: Y

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2
Please set the password for root here.

Después de introducir el password y confirmarlo el complemento te dirá el nivel de seguridad en una escala de 0 a 100, y te pedirá confirmar si deseas continuar con el password establecido o ingresar uno nuevo.

New password: 

Re-enter new password: 

Estimated strength of the password: 100 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : 

En el siguiente paso te pedirá remover los usuarios anónimos presiona «Y»

By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : 

Después nos pedirá deshabilitar el acceso remoto de root presiona «Y»

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) :

Pedirá remover la base de datos test que viene por default en mysql presiona «Y»

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Después te pedira recargar los privilegios de las tablas presiona «Y»

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : 

Con todo esto ya configuraste la seguridad del servidor MySQL pero aun falta por configurar el usuario root para que te puedas conectar con el a la terminal del MySQL.

Configurar usuario root (opcional)

Esta configuración que te voy a mostrar es opcional y te explico por que: Cuando instalas Mysql Server el usuario root se configura para autenticarse con auth_socket de manera predeterminada ya que esto proporciona mas seguridad en el sistema, aunque hay casos en que requieres acceso root desde un programa externo como (phpMyAdmin o MySQLWorkbench) en este caso hay que configurar el usuario root.

Para establecer una contraseña al usuario root de MySQL hay que cambiar auth_socket por otro metodo como puede ser caching_sha2_password o mysql_native_password para cambiarlo ingresa el siguiente comando para entrar a MySQL:

$ sudo mysql

Una vez dentro comprobamos el metodo de autenticacion con la siguiente consulta:

mysql > SELECT user,authentication_string,plugin,host FROM mysql.user;

La consulta mostrara el siguiente resultado:

+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user             | authentication_string                                                  | plugin                | host      |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$=1ppbH.oF8px1w>F|
Q24ARanBTJrzX0IJr6fRAnUlUu6O/GiVyfvIvWBzu.8 | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| root             |                                                                        | auth_socket           | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)

Y podemos confirmar que root utiliza auth_socket. Vamos a cambiarlo por caching_sha2_password y estableceremos una contraseña con la siguiente instrucción:

Recuerda cambiar password por tu contraseña.

mysql > ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

Después ejecutamos la instrucción FLUSH PROVILEGES para decirle al servidor MySQL que cargue de nuevo la tabla de permisos.

mysql > FLUSH PRIVILEGES;

Por ultimo podemos confirmar los cambios con la siguiente consulta:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user             | authentication_string                                                  | plugin                | host      |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$=1ppbH.oF8px1w>F|
Q24ARanBTJrzX0IJr6fRAnUlUu6O/GiVyfvIvWBzu.8 | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| root             | $A$005$Iu"Z\<+wJn.7mGKQLh9lBhp7djXrr0RLKzTAMlIerDC3N6SwnLOCTeW0UcC | caching_sha2_password | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)

Ya que se aplico el cambio podrá salir de MySQL con el siguiente comando:

mysql > exit

Si intentas entrar a la consola de MySQL usando sudo mysql veras el siguiente error:

$ sudo mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

Por lo tanto deberas de entrar de la siguiente forma e ingresar la contraseña que definiste anteriormente:

$ mysql -u root -p

ahora podremos crear un usuario con la siguiente instrucción solo sustituye user y password por los que tu definas:

mysql > CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';

Ahora configuramos los privilegios del usuario esto puede variar aquí te dejo un ejemplo para establecer los privilegios de usuario a todas las tablas dentro de la base de datos, y también permisos para añadir, cambiar y eliminar privilegios de usuario, hay que tener cuidado con los permisos de usuario:

mysql > GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost' WITH GRANT OPTION;

Ahora ya puedes salir de mysql con el siguiente comando:

mysql > exit

Verificar el funcionamiento de MySQL Server.

Después de instalar deberas de asegurarte que MySQL Server este ejecutándose de forma automática y para comprobar el estatus usamos el siguiente comando:

$ sudo systemctl status mysql

● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2021-02-24 10:24:31 UTC; 9h ago
    Process: 37126 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
   Main PID: 37148 (mysqld)
     Status: "Server is operational"
      Tasks: 40 (limit: 9298)
     Memory: 346.8M
     CGroup: /system.slice/mysql.service
             └─37148 /usr/sbin/mysqld

En caso de que no se este ejecutando usa el siguiente comando:

$ sudo systemctl start mysql

Configurar acceso remoto a MySQL Server:

Hasta ahora todo lo que hemos realizado funciona de forma local dentro de Ubuntu Server 20.04. En dado caso si requieres conectarte de forma remota desde otro equipo o por medio de workbeanch, lo primero que debes de hacer es pensar bien que esto rompe un poco con las medidas de seguridad, por lo tanto tienes que ser muy cuidadoso con esta configuración y limitar todo lo posible la conexión remota.

Primero que nada creamos un usuario con el siguiente comando y toma en cuenta sustituir ip_remota que podrá conectarse al equipo:

mysql > CREATE USER 'user'@'ip_remota' IDENTIFIED BY 'password';

en este caso te doy algunas opciones por ejemplo una ip completa: dentro de la red 192.168.1.99, la otra opción seria establecer el rango de ip dentro de la red con la siguiente linea: 192.168.1.%. Pero recuerda siempre limitarlo para que no se puedan conectar al servidor desde cualquier parte del mundo.

Después ejecuta la siguiente instrucción para establecer los privilegios:


GRANT ALL PRIVILEGES ON *.* TO 'user'@'ip_remota' WITH GRANT OPTION;

Ahora solo hay que configurar MySQL Server para permitir conexiones remotas ya que por default viene configurado para trabajar en local, para realizar esto editamos el archivo mysqld.cnf con el siguiente comando:

$ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

Buscamos la siguiente linea bind-address            = 127.0.0.1 y la modificamos de la siguiente manera: bind-address            = 0.0.0.0 posteriormente configuraremos el firewall para abrir el puerto y establecer que ips se pueden conectar.

Configurar Firewall ufw para MySQL Server

Hay que agregar una regla al Firewall ufw para permitir las conexiones al servidor MySQL para esto usamos este comando para asignar una ip y el puerto de mysql:

sudo ufw allow from 192.168.1.99 to any port 3306

o si requieres que sea un rango de ips usa el siguiente comando:

sudo ufw allow from 192.168.1.0/24 to any port 3306

Al terminar ya podras establecer conexion desde otro equipo con la ip que asignaste sin ningun problema.

Sin mas por el momento espero que esta guía sea de ayuda y si así fue síguenos en las redes sociales para que te enteres de mas contenido.

Categorías: servidores

6 comentarios

erick · octubre 2, 2021 a las 6:07 pm

Hola hice lo que venia aquí para cambiar el modo de autentificación, para cambiar el auth_socket por caching_sha2_password y no me funicionó.

me aparece este error:
mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED WITH caching_sha2_password BY ‘aquimipassword’;
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
podria ayudarme

    Jorge Castañeda · octubre 5, 2021 a las 3:10 am

    Hola que tal erick Claro que si en este caso el error que te marca es por el password que vas a establecer tiene que cumplir con los requerimientos minimos de la politica de password el cual deberá de tener mínimo 8 caracteres, minúsculas, números y símbolos.

      Augusto Mateos · octubre 22, 2021 a las 10:21 pm

      Amigo estoy intentando hacer estro y me da el mismo Error que al amigo erik, ya probé con mil combinaciones y no pasa nada.

      Jose Juan Reyes Torres · marzo 7, 2024 a las 10:42 pm

      Lo que pasa es que tienen que ser mas de 8 caracteres, al menos una mayúscula, minúsculas un carácter especial y números, eso es lo mínimo para el tipo de contraseña que se selecciono. si no cumples con las especificaciones dará error.

        José Juan Reyes Torres · marzo 7, 2024 a las 10:42 pm

        Lo que pasa es que tienen que ser mas de 8 caracteres, al menos una mayúscula, minúsculas un carácter especial y números, eso es lo mínimo para el tipo de contraseña que se selecciono. si no cumples con las especificaciones dará error.

Conexión Remota a MySQL Server en Ubuntu Server 20.04 - jcastaneda · julio 1, 2021 a las 1:02 am

[…] Servidor Mysql […]

Deja una respuesta

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *