¿Cómo configurar MYSQL para conexiones remotas en XAMPP? | Windows #mysql
Tabla de contenido:
- Configurar el servidor MySQL
- Conceder acceso a un usuario desde una máquina remota
- Configurar firewall
- Iptables
- UFW
- CortafuegosD
- Verificando los cambios
- Conclusión
De manera predeterminada, el servidor MySQL escucha conexiones solo desde localhost, lo que significa que solo las aplicaciones que se ejecutan en el mismo host pueden acceder a él.
Sin embargo, en algunas situaciones, es necesario acceder al servidor MySQL desde una ubicación remota. Por ejemplo, cuando desea conectarse al servidor MySQL remoto desde su sistema local, o cuando utiliza una implementación de varios servidores donde la aplicación se ejecuta en una máquina diferente del servidor de la base de datos. Una opción sería acceder al servidor MySQL a través del túnel SSH y otra es configurar el servidor MySQL para aceptar conexiones remotas.
En esta guía, veremos los pasos necesarios para permitir conexiones remotas a un servidor MySQL. Las mismas instrucciones aplican para MariaDB.
Configurar el servidor MySQL
El primer paso es configurar el servidor MySQL para que escuche en una dirección IP específica o en todas las direcciones IP de la máquina.
Si el servidor MySQL y los clientes pueden comunicarse entre sí a través de una red privada, la mejor opción es configurar el servidor MySQL para que escuche solo en la IP privada. De lo contrario, si desea conectarse al servidor a través de una red pública, configure el servidor MySQL para que escuche en todas las direcciones IP de la máquina.
Para hacerlo, debe editar el archivo de configuración de MySQL y agregar o cambiar el valor de la opción de
bind-address
. Puede configurar una sola dirección IP y rangos de IP. Si la dirección es
0.0.0.0
, el servidor MySQL acepta conexiones en todas las interfaces IPv4 del host. Si tiene IPv6 configurado en su sistema, en lugar de
0.0.0.0
, use
::
.
La ubicación del archivo de configuración de MySQL difiere según la distribución. En Ubuntu y Debian, el archivo se encuentra en
/etc/mysql/mysql.conf.d/mysqld.cnf
, mientras que en distribuciones basadas en Red Hat como CentOS, el archivo se encuentra en
/etc/my.cnf
.
Abra el archivo con su editor de texto:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Busque una línea que comience con
bind-address
y establezca su valor en la dirección IP en la que debe escuchar un servidor MySQL.
De forma predeterminada, el valor se establece en
127.0.0.1
(solo se escucha en localhost).
En este ejemplo, configuraremos el servidor MySQL para escuchar en todas las interfaces IPv4 cambiando el valor a
0.0.0.0
bind-address = 0.0.0.0 # skip-networking
Si hay una línea que contiene
skip-networking
, elimínela o coméntela agregando
#
al comienzo de la línea.
En MySQL 8.0 y superior, la directiva
bind-address
puede no estar presente. En este caso, agréguelo debajo de
sección.
Una vez hecho esto, reinicie el servicio MySQL para que los cambios surtan efecto. Solo los usuarios root o usuarios con privilegios de sudo pueden reiniciar los servicios.
Para reiniciar el servicio MySQL en Debian o Ubuntu, escriba:
sudo systemctl restart mysql
En distribuciones basadas en RedHat como CentOS para reiniciar la ejecución del servicio:
Conceder acceso a un usuario desde una máquina remota
El siguiente paso es permitir el acceso a la base de datos al usuario remoto.
Inicie sesión en el servidor MySQL como usuario root escribiendo:
sudo mysql
mysql -uroot -p
Desde el interior del shell de MySQL, use la instrucción
GRANT
para otorgar acceso al usuario remoto.
GRANT ALL ON database_name.* TO user_name@'ip_address' IDENTIFIED BY 'user_password';
Dónde:
-
database_name
es el nombre de la base de datos a la que se conectará el usuario.user_name
es el nombre del usuario de MySQL.ip_address
es la dirección IP desde la cual se conectará el usuario. Use%
para permitir que el usuario se conecte desde cualquier dirección IP.user_password
es la contraseña del usuario.
Por ejemplo, para otorgar acceso a una base de datos
dbname
a un usuario llamado
foo
con contraseña
my_passwd
desde una máquina cliente con IP
10.8.0.5
, debe ejecutar:
GRANT ALL ON dbname.* TO foo@'10.8.0.5' IDENTIFIED BY 'my_passwd';
Configurar firewall
El último paso es configurar su firewall para permitir el tráfico en el puerto
3306
(puerto predeterminado de MySQL) desde las máquinas remotas.
Iptables
sudo iptables -A INPUT -p tcp --destination-port 3306 -j ACCEPT
Permitir acceso desde una dirección IP específica:
sudo iptables -A INPUT -s 10.8.0.5 -p tcp --destination-port 3306 -j ACCEPT
UFW
UFW es la herramienta de firewall predeterminada en Ubuntu. Para permitir el acceso desde cualquier dirección IP en Internet (muy insegura), ejecute:
sudo ufw allow 3306/tcp
Permitir acceso desde una dirección IP específica:
sudo ufw allow from 10.8.0.5 to any port 3306
CortafuegosD
FirewallD es la herramienta de administración de firewall predeterminada en CentOS. Para permitir el acceso desde cualquier dirección IP en Internet, escriba (muy inseguro):
sudo firewall-cmd --permanent --zone=public --add-port=3306/tcp
sudo firewall-cmd --reload
Para permitir el acceso desde una dirección IP específica en un puerto específico, puede crear una nueva zona FirewallD o usar una regla enriquecida. Bueno, crea una nueva zona llamada
mysqlzone
:
sudo firewall-cmd --new-zone=mysqlzone --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --permanent --zone=mysqlzone --add-source=10.8.0.5/32
sudo firewall-cmd --permanent --zone=mysqlzone --add-port=3306/tcp
sudo firewall-cmd --reload
Verificando los cambios
Para verificar que el usuario remoto pueda conectarse al servidor MySQL, ejecute el siguiente comando:
mysql -u user_name -h mysql_server_ip -p
Donde
user_name
es el nombre del usuario al que le concedió acceso y
mysql_server_ip
es la dirección IP del host donde se ejecuta el servidor MySQL.
Si todo está configurado correctamente, podrá iniciar sesión en el servidor remoto MySQL.
ERROR 2003 (HY000): Can't connect to MySQL server on '10.8.0.5' (111)"
El siguiente error indica que el usuario al que está intentando iniciar sesión no tiene permisos para acceder al servidor remoto MySQL.
"ERROR 1130 (HY000): Host '10.8.0.5' is not allowed to connect to this MySQL server"
Conclusión
MySQL, el servidor de bases de datos de código abierto más popular por defecto, escucha las conexiones entrantes solo en localhost.
Para permitir conexiones remotas a un servidor MySQL, debe realizar los siguientes pasos:
- Configure el servidor MySQL para escuchar en todas o una interfaz específica. Otorgue acceso al usuario remoto. Abra el puerto MySQL en su firewall.
Uso de la aplicación de escritorio remoto en Windows 8 para conexiones remotas
Aprenda a configurar y usar la aplicación de escritorio remoto en Windows 8 para conexiones remotas.
Cómo crear una base de datos mysql en linux a través de la línea de comando
Este tutorial explica cómo usar la línea de comando para crear bases de datos MySQL o MariaDB.
Cómo eliminar una base de datos mysql en linux a través de la línea de comando
Este tutorial describe cómo eliminar (o eliminar) una base de datos MySQL o MariaDB a través de la línea de comandos.