Configurar acceso remoto a MySQL en un servidor

Por norma general la mayoría de servidores tan solo permiten que las conexiones a MySQL se realicen en local, es decir desde el mismo servidor, y no desde un servidor o equipo externo.

En los “setups” en los que es necesario configurar MySQL en un servidor aparte, para no sobrecargar el frontal web por ejemplo, se tienen que llevar a cabo algunas configuraciones para poder conectar de forma remota a las bases de datos.

A continuación explicamos los pasos a seguir para configurar este acceso:

  1. Accede a tu servidor a través de SSH como usuario “root

    Información adicional

    Puedes encontrar más información sobre el acceso por SSH a tu servidor en el artículo:

    Acceder por SSH a Linux

  2. Es necesario darle privilegios de acceso remoto a la base de datos que quieras que sea accesible. Esto lo deberás hacer utilizando los siguientes comandos:

    Nota

    Recuerda que antes de lanzar el comando tienes que cambiar:

    • xxx.xxx.xxx.xxx“, por la IP que tendrá acceso a las bases de datos
    • nombre_base_de_datos” por el nombre de la base de datos en cuestión
    • usuario_base_de_datos” por el usuario que hará la conexión

    # mysql -u root -p
    mysql> USE nombre_base_de_datos;
    mysql> update db set Host='xxx.xxx.xxx.xxx' where db=’nombre_base_de_datos‘;
    mysql> update user set Host='xxx.xxx.xxx.xxx' where user=’usuario_base_de_datos‘;

    • Una alternativa a configurar manualmente los privilegios a cada base de datos como hemos descrito, sería configurarlos para todas las bases de datos.

      Advertencia

      Puede suponer un grave problema de seguridad garantizar privilegios sobre todas las bases de datos al usuario root del servidor remoto. En la mayoría de casos será mejor crear un usuario con menos privilegios y que pueda acceder solo a la base de datos necesaria para la conexión.

      Para configurar los privilegios en todas las bases de datos habría que utilizar los siguientes comandos:

      mysql> GRANT ALL ON *.* to root@'xxx.xxx.xxx.xxx' IDENTIFIED BY ‘contraseña_de_root‘;
       
      mysql> FLUSH PRIVILEGES;
       
      mysql> exit;

  3. Finalmente, lo que deberás hacer es habilitar el puerto 3306 en las Iptables. Una sintaxis sencilla para hacerlo sería:

    # /sbin/iptables -A INPUT -i eth0 -p tcp –destination-port 3306 -j ACCEPT
    


    # service iptables save
    

    Nota

    Dependiendo de la versión de MySQL es posible que la sintaxis del comando varíe. Si el comando anterior devuelve algún error puedes probar con la siguiente linea:

    
    # /sbin/iptables -A INPUT -i eth0 -p tcp --destination-port 3306 -j ACCEPT
    

    # service iptables save
    

    Para comentar sobre este artículo, rellena el formulario. Los campos marcados con un asterisco (*) son obligatorios.


    *

    Comentarios de los visitantes
    1. Comentario (Publicado por Ruben L)

      No funciono
      update db set Host=’xxx.xxx.xxx.xxx’ where db=’nombre_base_de_datos‘;
      genera
      ERROR 1146 (42502): Table ‘nombre_base_de_datos.db‘ doesn’t exist

      alguna sugerencia o corrección???

      Responder

      • Comentario (Publicado por cldn-kb-admin)

        Hola Ruben,

        Según el código de error que has recibido, parece que has copiado el código de ejemplo sin sustituir nombre_base_de_datos por el nombre de tu base de datos, y por eso te está fallando.

        Recuerda también que debes cambiar xxx.xxx.xxx.xxx, por la IP de tu servidor 😉

        Un saludo!

        Responder