1.- Editamos (/etc/mysql/my.cnf en Debian, /etc/my.cnf en CentOS) y ponemos la bind-address como la IP del propio servidor. Reiniciar el servicio mysql. Esto hará que escuche en el puerto 3306 del propio servidor en vez de sólo el bucle local localhost.
bind-address = ip_servidor
Si está presente la directiva skip-networking hay que comentarla
2.- Crear un usuario remoto. Entar en mysql y hacer
GRANT ALL ON nombre_db.* TO 'usuario'@'ip-usuario' IDENTIFIED BY 'password';
O si queremos otorgar acceso remoto a root:
GRANT ALL PRIVILEGES on *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
3.- Abrir el puerto 3306 con iptables,
#iptables -A INPUT -i eth0 -s ip_remota -p tcp --destination-port 3306 -j ACCEPT
#service iptables save
sudo ufw allow proto tcp from ip/mascara to any port 3306