MySQL的远程连接[不照常](MySQL remote connection [not as us

2019-07-30 21:33发布

我没有收到以访问MySQL的外部。 我认为这是MySQL或防火墙的东西或MySQL的中的一些特权。

我已经尝试过这样做,是互联网上的步骤。 我把过程一步一步来举例说明我在做什么,并作为其他人有同样的问题教程:

我正在使用:

-ubuntu server 12.04 
-mysql-server5.5
-there is NO hardware firewall just software one

1 -首先我mysql安装有:

sudo apt-get install mysql-server

2-我通过改变根密码:

sudo /etc/init.d/mysql stop
sudo mysqld --skip-grant-tables &
mysql -u root mysql
UPDATE user SET Password=PASSWORD('MYPASSWORD') WHERE User='root'; FLUSH PRIVILEGES; exit;

3-我给所有的特权根到任何IP:

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;

4-之后我编辑的my.cnf

sudo nano /etc/mysql/my.cnf

我评论的线条,波纹管:

#skip-external-locking 
#bind-address           = 127.0.0.1

5-我编辑iptables允许MySQL的3306:

iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT

现在打字的netstat -ant:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:110             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:143             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:10000           0.0.0.0:*               LISTEN
tcp        0      0 66.123.173.170:53       0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:993             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:995             0.0.0.0:*               LISTEN
tcp        0      0 66.123.173.170:22       189.32.2.232:49167      ESTABLISHED
tcp        0    336 66.123.173.170:22       189.32.2.232:49654      ESTABLISHED
tcp6       0      0 :::110                  :::*                    LISTEN
tcp6       0      0 :::143                  :::*                    LISTEN
tcp6       0      0 :::8080                 :::*                    LISTEN
tcp6       0      0 :::21                   :::*                    LISTEN
tcp6       0      0 :::53                   :::*                    LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
tcp6       0      0 ::1:953                 :::*                    LISTEN
tcp6       0      0 :::25                   :::*                    LISTEN
tcp6       0      0 :::993                  :::*                    LISTEN
tcp6       0      0 :::995                  :::*                    LISTEN
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN

看到3306端口是开放的! 我对吗?

6-我重新启动mysql的:

sudo service mysql start

我输入:

service mysql status

结果:

mysql start/running, process 20757

7我试图连接到服务器:

mysql -h 66.123.173.170 -u root -p

我得到这个错误:

ERROR 2003(HY000):无法连接到'66 MySQL服务器.123.173.170' (111)

当我做:

mysql -h 127.0.0.1 -u root -p

它的工作原理打开MySQL的“终端

8的疑问:你看到什么毛病这个过程?

OBS:第4步,我也试图把绑定地址申办地址= 0.0.0.0但它并没有解决问题。

9-的疑问:如果我关闭了MySQL有: service mysql stop的话,我可以访问本地防火墙与MySQL -h 127.0.0.1ü根- P?

我做到了,我可以连接甚至与MySQL停止/等待(这是停止和MySQL的retrieveing状态后给予的状态)。

Answer 1:

恢复解决方案:

我杀了那个拿着3306端口启动mysqld并重新启动它。

我认为这是一个错误或一些相关的检查一步一步我所做的:

1-创建一个程序在3306连接

首先,我在Java中创建一个简单的程序,以确保有不符合我的防火墙任何问题。 该方案只需打开一个端口3306上与2分钟只是用于测试,程序TCP连接:

import java.io.IOException;
import java.net.ServerSocket;

public class PortMysqlTest {
    public static void main(String[] args) {
        int port = 3306;

        ServerSocket ss = null;
        try
        {
            ss = new ServerSocket(port);
            ss.setReuseAddress(true);
        }
        catch (IOException e)
        {
            System.out.println(e.getMessage());
        }

        long futureTime = System.currentTimeMillis() + 1000 * 60 * 2;
        while (System.currentTimeMillis() < futureTime)
        {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        if (ss != null)
        {
            try
            {
                ss.close();
            }
            catch (IOException e)
            {
                System.out.println(e.getMessage());
            }
        }       
    }

2-停止MySQL服务

在执行程序之前,我停止MySQL服务:

sudo service mysql stop

或者它是可以做到的:

/etc/init.d/mysql stop

3-开始了我的程序用java PortMysqlTest

我的程序(PortMysqlTest)抛出一个异常,称该地址/端口已在使用的mysqld!

惊喜? 据我知道有mysql服务停止端口应该是免费的。 我对吗? (我不知道的,如果有人能回答这个...)

4-我搜索的结果是使用地址/端口与应用PID:

sudo netstat -lpn | grep 3306

答案:

tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      6736/mysqld

5我杀的过程中有:

kill -9 6736

OBS,如果你不知道该怎么做杀:6736是抱着端口的过程中,我得到了这个号码与第4步,6736 / mysqld的

6-现在我再次运行我的程序:

java的PortMysqlTest并通过telnet(远程登录66.123.173.170 3306)externaly连接和它的工作

所以,问题不是防火墙 ,因为我可以从外部连接到本机66.123.173.170。

7再次启动MySQL服务:

(我等了2分钟,我的程序就停止并释放3306端口),然后重新启动mysql服务进行测试,与:

sudo service mysql start 

要么

sudo /etc/init.d/mysql start

8我通过telnet外部连接:

telnet 66.123.173.170 3306

和工作!

之后,我试图连接到与MySQL:

mysql -h 66.123.173.170 -u root -p 

和工作!

结论:我想有一个与我的MySQL安装的bug; 什么的,(我不知道是什么),重新启动mysql的时候MySQL不得到的配置:

bind-address = 0.0.0.0 

要么

bind-address = * 

我希望这种帮助别人。



Answer 2:

你的netstat输出中表明,它是不开放给外部连接,它应该显示0.0.0.0在那里,而不是127.0.0.1 (这是回送,而不是当地如此)。

你可能需要一个不同的添加bind-address到你的MySQL配置(不要忘了重新启动该服务)。

尝试

bind-address = *

或者您的实际网卡的IP( 66.123.173.170 )也许吧。



Answer 3:

你需要在my.cnf中设置您的绑定地址为0.0.0.0不只是注释掉该行。

作为一个侧面说明,你应该不会允许所有IP地址的root访问权限,你说你已经配置。 我将限制根只有本地机器。



Answer 4:

默认情况下,MySQL的监听本地主机。 你需要将其配置为您的实际接口上运行,也可以在绑定使用0.0.0.0地址。



文章来源: MySQL remote connection [not as usual]