Cómo acceder a MySQL de forma remota

16 feb 2023 4 min di lettura
Cómo acceder a MySQL de forma remota
Indice dei contenuti

Introducción

Muchos sitios web y aplicaciones comienzan con el servidor web y el backend de la base de datos alojados en la misma máquina. Sin embargo, con el tiempo, una configuración como esta puede volverse engorrosa y difícil de escalar. Una solución común es separar estas funciones configurando una base de datos remota, lo que permite que el servidor y la base de datos crezcan a su propio ritmo en sus propias máquinas.

Uno de los problemas más comunes que encuentran los usuarios cuando intentan configurar una base de datos MySQL remota es que su instancia de MySQL solo está configurada para escuchar conexiones locales. Este es el valor predeterminado de MySQL, pero no funcionará para una configuración de base de datos remota, ya que MySQL necesita poder escuchar una dirección IP externa donde se pueda acceder al servidor.

Habilitar el acceso remoto

Para habilitar el acceso remoto a MySQL, abra su archivo mysqld.cnf:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Vaya a la línea que comienza con la directiva bind-address. Se verá así:

...
 lc-messages-dir = /usr/share/mysql
 skip-external-locking
 #
 # Instead of skip-networking the default is now to listen only on
 # localhost which is more compatible and is not less secure.
 bind-address = 127.0.0.1...

De forma predeterminada, este valor se establece en 127.0.0.1, lo que significa que el servidor solo buscará conexiones locales. Deberá cambiar esta directiva para hacer referencia a una dirección IP externa. Para solucionar problemas, puede establecer esta directiva en una dirección IP comodín, *, :: o 0.0.0.0:

...
 lc-messages-dir = /usr/share/mysql
 skip-external-locking
 #
 # Instead of skip-networking the default is now to listen only on
 # localhost which is more compatible and is not less secure.
 bind-address = 0.0.0.0...
Nota:bind-addressmysqld.cnf/etc/mysql/mysql.conf.d/mysqld.cnf
...
 [mysqld]
 pid-file = /var/run/mysqld/mysqld.pid
 socket = /var/run/mysqld/mysqld.sock
 datadir = /var/lib/mysql
 log-error = /var/log/mysql/error.log
 bind-address = 0.0.0.0

Después de editar esta línea, guarde y cierre el archivo ( CTRL + X, Y, luego ENTER si lo editó con nano ).

Luego reinicie el servicio MySQL para que los cambios surtan efecto:

sudo systemctl restart mysql

Si tiene una cuenta de usuario MySQL existente que planea usar para conectarse a la base de datos desde su host remoto, deberá volver a configurar esa cuenta para conectarse desde el servidor remoto en lugar de localhost. Para ello, abra el cliente MySQL como usuario raíz de MySQL u otra cuenta de usuario con privilegios:

sudo mysql

Si tiene habilitada la autenticación de contraseña para root, deberá usar el siguiente comando para acceder al shell de MySQL:

mysql -u root -p

Cambiar el host de un usuario

Para cambiar el host de un usuario, puede usar el comando MySQL RENAME USER. Ejecute el siguiente comando, asegurándose de cambiar el nombre noviello de su cuenta de usuario de MySQL y la dirección IP de su servidor remoto remote_server_ip:

RENAME USER 'noviello'@'localhost' TO 'noviello'@'remote_server_ip';

Crear un nuevo usuario

Alternativamente, puede crear una nueva cuenta de usuario que solo se conectará desde el host remoto con el siguiente comando:

CREATE USER 'noviello'@'remote_server_ip' IDENTIFIED BY 'password';
Notacaching_sha2_password

Si planea usar esta base de datos con una aplicación PHP, como phpMyAdmin, es posible que desee crear un usuario remoto que se autentique con el complemento mysql_native_password anterior, aunque aún es seguro:

CREATE USER 'noviello'@'remote_server_ip' IDENTIFIED WITH mysql_native_password BY 'password';

Si no está seguro, siempre puede crear un usuario que se autentique con caching_sha2_plugin y ALTER más tarde con este comando:

ALTER USER 'noviello'@'remote_server_ip' IDENTIFIED WITH mysql_native_password BY 'password';

Luego otorgue al nuevo usuario los privilegios apropiados para sus necesidades particulares. El siguiente ejemplo le otorga a un usuario privilegios globales para CREATE, ALTER y DROP bases de datos, tablas y usuarios, así como para alimentar INSERT, UPDATE y DELETE datos de cualquier tabla en el servidor. También otorga al usuario la capacidad de consultar datos con SELECT, crear claves externas con la clave REFERENCES y realizar operaciones FLUSH con el privilegio RELOAD. Sin embargo, solo debe otorgar a los usuarios los permisos que necesitan, así que siéntase libre de cambiar los privilegios de su usuario si es necesario.

GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'noviellO'@'remote_server_ip' WITH GRANT OPTION;

Después, es una buena idea ejecutar el comando FLUSH PRIVILEGES. Esto liberará cualquier memoria que el servidor haya almacenado en caché como resultado de las declaraciones CREATE USER y GRANT anteriores:

FLUSH PRIVILEGES;

Luego puede salir del cliente MySQL:

exit

Configurar el cortafuegos

Finalmente, suponiendo que haya configurado un firewall en su servidor de base de datos, también deberá abrir el puerto 3306, el puerto predeterminado de MySQL, para permitir el tráfico a MySQL.

Si planea acceder al servidor de la base de datos solo desde una máquina específica, puede otorgar a esa máquina permiso exclusivo para conectarse a la base de datos de forma remota con el siguiente comando. Asegúrese de reemplazar remote_IP_address con la dirección IP real de la máquina con la que planea conectarse:

sudo ufw allow from remote_IP_address to any port 3306

Si necesita acceder a la base de datos desde otras máquinas en el futuro, puede otorgarles acceso ad hoc con este comando. Solo recuerde incluir sus respectivas direcciones IP.

Alternativamente, puede permitir conexiones a su base de datos MySQL desde cualquier dirección IP con el siguiente comando:

AdvertenciaNo
sudo ufw allow 3306

A continuación, intente acceder a su base de datos de forma remota desde otra máquina:

Nota
mysql -u user -h database_server_ip -p

Conclusión

Si puede acceder a su base de datos, confirme que la directiva bind-address en su archivo de configuración fue el problema. Tenga en cuenta, sin embargo, que configurar bind-address en 0.0.0.0 no es seguro, ya que permite conexiones a su servidor desde cualquier dirección IP. Por otro lado, si aún no puede acceder a la base de datos de forma remota, es posible que otra cosa esté causando el problema.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.