Introducción
Muchos sitios web y aplicaciones comienzan con su servidor web y base de datos de soporte alojados en una sola 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 ejecutando una base de datos remota y permitiendo 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 al intentar configurar una base de datos MySQL remotamente es que su instancia MySQL está configurada para escuchar solo conexiones locales. Esta es la configuración predeterminada de MySQL, pero no funciona para configurar una base de datos remota, ya que MySQL necesita poder escuchar en una dirección IP externa donde se pueda acceder al servidor. Para habilitar esto, abra el archivo mysqld.cnf:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnfVaya a la línea que comienza con el comando 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 es 127.0.0.1, lo que significa que el servidor solo escuchará conexiones locales. Deberá cambiar esta directiva para que haga referencia a una dirección IP externa. Para solucionar problemas, puede configurar esta directiva con una dirección IP comodín, ya sea *, :: 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
. . .Después de cambiar esta línea, guarde y cierre el archivo (CTRL + X, Y, luego ENTER si lo editó con nano).
Luego reinicie el servicio MySQL para aplicar los cambios que realizó en mysqld.cnf:
sudo systemctl restart mysqlSi tiene una cuenta de usuario MySQL que planea usar para conectarse a la base de datos desde su host remoto, debe reconfigurarla para que se conecte desde el servidor remoto en lugar del host local. Para ello, abra el cliente MySQL como usuario root o con otra cuenta con privilegios:
sudo mysqlSi tiene habilitada la autenticación de contraseña para root, debe usar el siguiente comando para acceder al shell MySQL:
mysql -u root -pPara cambiar el host del usuario, puede usar el comando RENAME USER de MySQL. Ejecute el siguiente comando, asegurándose de reemplazar "sammy" con el nombre de su cuenta de usuario de MySQL y "remote_server_ip" con la dirección IP de su servidor remoto:
RENAME USER 'sammy'@'localhost' TO 'sammy'@'remote_server_ip';Alternativamente, puede crear una nueva cuenta de usuario que solo se conectará desde el host remoto con el siguiente comando:
CREATE USER 'sammy'@'remote_server_ip' IDENTIFIED BY 'password';A continuación, otorgue al nuevo usuario los privilegios adecuados a sus necesidades específicas. El siguiente ejemplo le otorga privilegios globales para crear, modificar y eliminar bases de datos, tablas y usuarios, así como la capacidad de insertar, actualizar y eliminar datos de cualquier tabla del servidor. También le permite consultar datos con SELECT, crear claves foráneas con la palabra clave REFERENCES y realizar operaciones FLUSH con el privilegio RELOAD. Sin embargo, solo debe otorgar a los usuarios los permisos que necesiten, para poder ajustar sus privilegios según sea necesario.
GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'sammy'@'remote_server_ip' WITH GRANT OPTION;Después de esto, se recomienda ejecutar el comando FLUSH PRIVILEGES. Esto liberará la memoria que el servidor haya reservado como resultado de los comandos CREATE USER y GRANT anteriores:
FLUSH PRIVILEGES;Luego puedes salir del cliente MySQL:
exitPor último, suponiendo que haya configurado un firewall en su servidor de base de datos, también necesitará abrir el puerto 3306 (el puerto MySQL predeterminado) para permitir el tráfico MySQL.
Si solo desea acceder al servidor de base de datos desde una máquina específica, puede otorgarle permiso exclusivo para conectarse a la base de datos remota con el siguiente comando. Asegúrese de reemplazar dirección_IP_remota con la dirección IP real de la máquina a la que desea conectarse:
sudo ufw allow from remote_IP_address to any port 3306Si necesita acceder a la base de datos desde otras máquinas en el futuro, puede usar este comando para otorgarles acceso temporalmente. Recuerde incluir su dirección IP.
Alternativamente, puede permitir conexiones a su base de datos MySQL desde cualquier dirección IP con el siguiente comando:
sudo ufw allow 3306A continuación, intenta acceder a tu base de datos de forma remota desde otro dispositivo:
mysql -u user -h database_server_ip -pSi puede acceder a su base de datos, esto confirma que la directiva bind-address de su archivo de configuración era el problema. Tenga en cuenta que configurar bind-address como 0.0.0.0 no es seguro, ya que permite conexiones a su servidor desde cualquier dirección IP. Por otro lado, si sigue sin poder acceder a la base de datos de forma remota, es posible que la causa sea otra causa.









