remoto - Conexiones remotas Mysql Ubuntu
habilitar acceso remoto mariadb (4)
Por alguna razón, no he podido conectarme de forma remota a mi servidor MySQL. Lo intenté todo y sigo recibiendo errores.
root@server1:/home/administrator# mysql -u monty -p -h www.ganganadores.cl
Enter password:
ERROR 1045 (28000): Access denied for user ''monty''@''server1.ganganadores.cl'' (using password: YES)
Ahora, he intentado correr
`GRANT ALL ON *.* to monty@localhost IDENTIFIED BY ''XXXXX'';
GRANT ALL ON *.* to monty@''%'' IDENTIFIED BY ''XXXXXX'';`
y todavía nada! ¿Qué estoy haciendo mal?
EDITAR: my.cnf ha comentado el bind ip.
Agrega algunos puntos encima de la excelente publicación de Apesa:
1) Puede usar el siguiente comando para verificar que la dirección IP del servidor mysql esté escuchando
netstat -nlt | grep 3306
sample result:
tcp 0 0 xxx.xxx.xxx.xxx:3306 0.0.0.0:* LISTEN
2) Use FLUSH PRIVILEGES
para forzar que se carguen las tablas de permisos si por algún motivo los cambios no entran en vigencia inmediatamente.
GRANT ALL ON *.* TO ''user''@''localhost'' IDENTIFIED BY ''passwd'' WITH GRANT OPTION;
GRANT ALL ON *.* TO ''user''@''%'' IDENTIFIED BY ''passwd'' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;
3) Si el firewall de netfilter está habilitado ( sudo ufw enable
) en la máquina del servidor mysql, haga lo siguiente para abrir el puerto 3306 para acceso remoto:
sudo ufw allow 3306
verificar el estado usando
sudo ufw status
4) Una vez que se establece una conexión remota, se puede verificar en la máquina del cliente o del servidor usando comandos
netstat -an | grep 3306
netstat -an | grep -i established
MySQL solo escucha localhost, si queremos habilitar el acceso remoto a él, entonces necesitamos hacer algunos cambios en el archivo my.cnf:
sudo nano /etc/mysql/my.cnf
Necesitamos comentar las líneas bind-address y skip-external-locking:
#bind-address = 127.0.0.1
# skip-external-locking
Después de realizar estos cambios, debemos reiniciar el servicio mysql:
sudo service mysql restart
Para exponer MySQL a cualquier cosa que no sea localhost, tendrá que tener la siguiente línea
Para mysql versión 5.6 y abajo
sin comentar en /etc/mysql/my.cnf
y asignado a la dirección IP de su computadora y no al loopback
Para mysql versión 5.7 y superior
descomentada en /etc/mysql/mysql.conf.d/mysqld.cnf
y asignada a la dirección IP de su computadora y no al loopback
#Replace xxx with your IP Address
bind-address = xxx.xxx.xxx.xxx
O agregue una bind-address = 0.0.0.0
si no desea especificar la IP
Luego detenga y reinicie MySQL con la nueva entrada my.cnf. Una vez que se ejecuta, vaya a la terminal e ingrese el siguiente comando.
lsof -i -P | grep :3306
Eso debería volver algo como esto con tu IP real en el xxx
mysqld 1046 mysql 10u IPv4 5203 0t0 TCP xxx.xxx.xxx.xxx:3306 (LISTEN)
Si la declaración anterior vuelve correctamente, entonces podrá aceptar usuarios remotos. Sin embargo, para que un usuario remoto se conecte con los privilegios correctos, necesita tener ese usuario creado tanto en el host local como en ''%'' como en.
CREATE USER ''myuser''@''localhost'' IDENTIFIED BY ''mypass'';
CREATE USER ''myuser''@''%'' IDENTIFIED BY ''mypass'';
entonces,
GRANT ALL ON *.* TO ''myuser''@''localhost'';
GRANT ALL ON *.* TO ''myuser''@''%'';
y finalmente,
FLUSH PRIVILEGES;
EXIT;
Si no tiene el mismo usuario creado anteriormente, cuando inicia sesión localmente, puede heredar privilegios de localhost base y tener problemas de acceso. Si desea restringir el acceso que tiene myuser, deberá leer la sintaxis de la sentencia GRANT HERE Si supera todo esto y todavía tiene problemas, publique algunos resultados de errores adicionales y las líneas correspondientes de my.cnf.
NOTA: Si lsof no devuelve o no se encuentra, puede instalarlo HERE según su distribución de Linux. No necesita lsof para hacer que las cosas funcionen, pero es extremadamente útil cuando las cosas no funcionan como se esperaba.
Si prueba en Windows, no olvide abrir el puerto 3306.