the - Acceso a la raíz de MySQL desde todos los hosts
mysql authentication type standard (6)
A veces
bind-address = 127.0.0.1
debiera ser
bind-address = *
Instalé el servidor MySQL en una máquina Ubuntu remota. El usuario root
se define en la tabla mysql.user
esta manera:
mysql> SELECT host, user, password FROM user WHERE user = ''root'';
+------------------+------+-------------------------------------------+
| host | user | password |
+------------------+------+-------------------------------------------+
| localhost | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| ip-10-48-110-188 | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| 127.0.0.1 | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| ::1 | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+------------------+------+-------------------------------------------+
Puedo acceder con la root
del usuario desde la misma interfaz de línea de comando de máquina remota utilizando el cliente estándar de mysql
. Ahora quiero permitir el acceso a la raíz de cada host en Internet , así que intenté agregar la siguiente fila (es un duplicado exacto de la primera fila del volcado anterior, a excepción de la columna del host
):
mysql> SELECT host, user, password FROM user WHERE host = ''%'';
+------------------+------+-------------------------------------------+
| host | user | password |
+------------------+------+-------------------------------------------+
| % | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+------------------+------+-------------------------------------------+
Pero mi cliente en mi PC personal continúa diciéndome (he oscurecido la IP del servidor):
Error SQL (2003): No se puede conectar al servidor MySQL en ''46 .xxx ''(10061)
No puedo decir si es un error de autenticación o un error de red. En el firewall del servidor habilité el puerto 3306 / TCP para 0.0.0.0/0 , y eso está bien para mí ...
Ejecute la siguiente consulta:
use mysql;
update user set host=''%'' where host=''localhost''
NOTA: No recomendado para uso de producción.
En mi caso, la configuración de "vincular dirección" era el problema. Comentar esta configuración en my.cnf
no ayudó, porque en mi caso, mysql estableció el valor predeterminado en 127.0.0.1 por algún motivo.
Para verificar qué configuración usa actualmente MySql, abra la línea de comando en su casilla local:
mysql -h localhost -u myname -pmypass mydb
Lea la configuración actual:
Show variables where variable_name like "bind%"
Debería ver 0.0.0.0 aquí si desea permitir el acceso desde todos los hosts. Si este no es el caso, edite su /etc/mysql/my.cnf
y establezca bind-address en la sección [mysqld]:
bind-address=0.0.0.0
Finalmente reinicie su servidor MySql para elegir la nueva configuración:
sudo service mysql restart
Inténtelo de nuevo y verifique si la nueva configuración ha sido recogido.
Hay dos pasos en ese proceso:
a) Otorga privilegios. Como usuario root se ejecuta:
GRANT ALL PRIVILEGES ON *.* TO ''root''@''%'' IDENTIFIED BY ''password'';
b) enlazar a todas las direcciones:
La forma más fácil es comentar la línea en su archivo my.cnf
:
#bind-address = 127.0.0.1
y reiniciar mysql
service mysql restart
Por defecto, se vincula solo a localhost, pero si comenta la línea, se enlaza a todas las interfaces que encuentra. Comentando la línea es equivalente a bind-address=*
.
Para comprobar dónde se ha enlazado el servicio mysql, ejecute como raíz:
netstat -tupan | grep mysql
Actualización para Ubuntu 16:
El archivo de configuración es (ahora)
/etc/mysql/mysql.conf.d/mysqld.cnf
(al menos en Ubuntu 16 estándar)
MariaDB ejecutándose en Raspbian: el archivo que contiene bind-address es difícil de precisar. MariaDB tiene información not-very-helpful-info sobre el tema.
solía
# sudo grep -R bind-address /etc
para ubicar dónde está la maldita cosa
También tuve que configurar los privilegios y hosts en el mysql como todos los señalados anteriormente.
Y también me divertí mucho abriendo el puerto 3306 para conexiones remotas a mi Raspberry Pi, finalmente utilicé iptables-persistent .
Todo funciona bien ahora.
si tiene muchas redes conectadas a su sistema operativo, debe especificar una de esta red en las direcciones de enlace del archivo my.conf. un ejemplo:
[mysqld]
bind-address = 127.100.10.234
esta ip es de una configuración ethX.