Acceso root de MySQL desde todos los hosts


He instalado MySQL Server en una máquina Ubuntu remota. El usuario root se define en la tabla mysql.user de 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 user root desde la misma interfaz de línea de comandos de la máquina remota utilizando el cliente estándar mysql. Ahora quiero permitir el acceso root desde cada host en Internet, así que intenté agregar la siguiente fila (es un duplicado exacto de la primera fila del volcado anterior, excepto por la columna host):

mysql> SELECT host, user, password FROM user WHERE host = '%';
+------------------+------+-------------------------------------------+
| host             | user | password                                  |
+------------------+------+-------------------------------------------+
| %                | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+------------------+------+-------------------------------------------+

Pero mi cliente en mi personal PC sigue diciéndome (oscureció la IP del servidor):

Error SQL (2003): No se puede conectar al servidor MySQL en el '46.x. x. x' (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í...

Author: lorenzo-s, 2012-06-27

7 answers

Hay dos pasos en ese proceso:

A) Conceder privilegios. Como usuario root ejecutar:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';

B) enlace 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 enlaza solo a localhost, pero si comentas la línea se enlaza a todas las interfaces que encuentra. Comentar la línea es equivalente a bind-address=*.

Para comprobar dónde el servicio mysql ha enlazado ejecutar 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 estándar 16)

 277
Author: hovanessyan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-14 07:46:31

Ejecute la siguiente consulta:

use mysql;

update user set host='%' where host='localhost'

NOTA: No recomendado para uso en producción.

 26
Author: Babu James,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-13 15:31:15

A veces

Bind-address = 127.0.0.1

Debe ser

Bind-address = *

 6
Author: user2839051,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-08 16:52:31

MariaDB corriendo en Raspbian - el archivo que contiene bind-address es difícil de identificar. MariaDB tiene algo no-muy-útil-info sobre el tema.

He utilizado

# sudo grep -R bind-address /etc 

Para localizar dónde está la maldita cosa.

También tuve que establecer los privilegios y hosts en mysql como todos los anteriores señalaron.

Y también me divertí abriendo el puerto 3306 para conexiones remotas a mi Raspberry Pi - finalmente usé iptables-persistent.

Todos funciona muy bien ahora.

 3
Author: The Big Zank,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-01 16:17:14

Si tiene muchas redes conectadas a su sistema operativo, debe especificar una de esta red en las direcciones de enlace de mi.archivo conf. un ejemplo:

[mysqld]
bind-address = 127.100.10.234

Esta ip es de una configuración ethX.

 1
Author: felipe cardenas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-24 17:12:37

mysql_update es lo que necesitas.

No se por qué alguien seguiría las formas más complejas de corregir este problema, cuando MySQL gentilmente construyó una herramienta que ya hace esto...

 1
Author: Kieran Foot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-19 10:24:10

En mi caso la configuración "bind-address" fue el problema. Comentar esta configuración en my.cnfhizo no ayuda, porque en mi caso mysql estableció el valor predeterminado a 127.0.0.1 por alguna razón.

Para verificar qué configuración está usando MySQL actualmente, abra la línea de comandos en su casilla local:

mysql -h localhost -u myname -pmypass mydb

Lee 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 recoger la nueva configuración:

sudo service mysql restart

Inténtelo de nuevo y compruebe si se ha seleccionado la nueva configuración.

 0
Author: iHaveacomputer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-26 21:21:47