代码之家  ›  专栏  ›  技术社区  ›  mk12

MySQL连接不起作用:2002没有这样的文件或目录

  •  125
  • mk12  · 技术社区  · 16 年前

    <?php
        $conn = mysql_connect('localhost', 'USER', 'PASSWORD');
        if(!$conn) {
            echo 'Error: ' . mysql_errno() . ' - ' . mysql_error();
        }
    ?>
    

    我总是得到这样的结果:

    目录

    更新:我发现套接字位于/tmp/mysql.sock,因此在php.ini中,我用它替换了所有出现的错误路径。

    23 回复  |  直到 7 年前
        1
  •  86
  •   Alec Gorge    16 年前

    我也遇到了类似的问题,可以通过使用以下命令解决我的mysql来解决它 127.0.0.1 localhost .

        2
  •  121
  •   bryan kennedy    14 年前

    如果您使用Linux:mysql.sock文件的路径错误。这通常是因为您使用的是(LAMPP)XAMPP,而它不在/tmp/mysql.sock中

    打开php.ini文件,找到以下行:

    mysql.default_socket
    

    mysql.default_socket = /path/to/mysql.sock
    
        3
  •  33
  •   Jacek Laskowski    10 年前

    MySQL的自定义安装 .

    为Apache HTTP启用PHP5支持

    /etc/apache2/httpd.conf .

    使用以下命令编辑文件 sudo vi /etc/apache2/httpd.conf ; 从开始)线加载 php5_模块

    LoadModule php5_module libexec/apache2/libphp5.so
    

    使用以下命令启动Apache HTTP sudo apachectl start restart

    /var/log/apache2/error_log 包含一行,该行告诉php5_模块已启用-您应该看到 PHP/5.3.15

    [notice] Apache/2.2.22 (Unix) DAV/2 PHP/5.3.15 with Suhosin-Patch configured -- resuming normal operations
    

    MySQL启动并运行时( ./bin/mysqld_safe localhost

    Logging to

    130309 12:17:59 mysqld_safe Logging to '/Users/jacek/apps/mysql/data/localhost.err'.
    130309 12:17:59 mysqld_safe Starting mysqld daemon with databases from /Users/jacek/apps/mysql/data
    

    localhost.err tail -1 /Users/jacek/apps/mysql/data/localhost.err 要找出套接字文件的名称,它应该是最后一行。

    $ tail -1 /Users/jacek/apps/mysql/data/localhost.err
    Version: '5.5.27'  socket: '/tmp/mysql.sock'  port: 3306  MySQL Community Server (GPL)
    

    socket: part-这是您应该在其中使用的套接字文件 php.ini .

    还有另一种方法(有人说是更简单的方法)可以通过登录MySQL并运行来确定套接字文件名的位置:

    show variables like '%socket%';
    

    /etc 目录在那里 文件。复制到 .

    sudo cp /etc/php.ini.default /etc/php.ini
    

    /etc/php.ini .

    sudo vi /etc/php.ini
    

    默认值为 mysql.default_socket /var/mysql/mysql.sock 。你应该把它改成你之前注意到的值——它是 /tmp/mysql.sock

    更换 file以反映套接字文件的名称:

    mysql.default_socket = /tmp/mysql.sock
    mysqli.default_socket = /tmp/mysql.sock
    

    sudo apachectl restart 
    

    如果没有与PHP5相关的错误,请检查日志。没有错误意味着你已经完成了,PHP5和MySQL应该可以正常工作。恭喜!

        4
  •  13
  •   Oleg    10 年前

    service mysql restart
    

    sudo service mysql restart

        5
  •  9
  •   Todd Moses    16 年前

        6
  •  6
  •   Myles    16 年前

    首先,确保MySQL正在运行。命令:mysqld启动

    你的/etc/my.cnf是什么样子的?(或/etc/msyql/my.cnf)

    关于设置LAMP的一个很好的教程是: http://library.linode.com/lamp-guides/centos-5.3/index-print

        7
  •  6
  •   Arthur Reutenauer    16 年前

    扩展到 Matthias D's answer here

    首先得到

    netstat -ln | grep -o -m 1 '/.*mysql.sock'
    

    然后得到 :

    php -r 'echo ini_get("mysql.default_socket") . "\n";'
    

    ,将它们连接起来:

    sudo ln -s /actualpath/mysql.sock /phppath/mysql.sock
    

    No such file or directory /var/mysql/mysql.sock 你会跑:

    sudo mkdir -p /var/mysql
    

        8
  •  6
  •   JackSun    12 年前
        9
  •  6
  •   masoud2011    10 年前

        10
  •  6
  •   Community Mohan Dere    9 年前

    我也遇到了这个问题,然后我将“localhost”修改为“127.0.0.1”,它奏效了。

        11
  •  5
  •   Avani Khabiya    8 年前

    就我而言,mysqli_connect有问题。

    mysqli_connect('localhost', 'myuser','mypassword')
    mysqli_connect_error()返回错误“没有这样的文件或目录”

    这对我奏效了 mysqli_connect('localhost:3306', 'myuser','mypassword')

        12
  •  3
  •   Community Mohan Dere    9 年前

    错误2002表示MySQL无法通过socket文件连接到本地数据库服务器(例如。 /tmp/mysql.sock ).

    要找出套接字文件的位置,请运行:

    mysql_config --socket
    

    php -i | grep mysql.default_socket
    

    .

    mysql --socket=/var/mysql/mysql.sock
    

    ln -vs /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock
    

    php.ini ).

    测试 PDO

    php -r "new PDO('mysql:host=localhost;port=3306;charset=utf8;dbname=dbname', 'root', 'root');"
    

    可能是服务器正在运行,但您正试图使用与服务器正在侦听的端口不同的TCP/IP端口、命名管道或Unix套接字文件进行连接。为了纠正这一点,您需要调用客户端程序(例如指定 --port --socket

    Troubleshooting Problems Connecting to MySQL


    其他可以帮助跟踪问题的实用程序/命令:

    • mysql --socket=$(php -r 'echo ini_get("mysql.default_socket");')
    • netstat -ln | grep mysql
    • php -r "phpinfo();" | grep mysql
    • php -i | grep mysql
    • 使用XDebug xdebug.show_exception_trace=1 在你的 xdebug.ini
    • 在OS X上试试 sudo dtruss -fn mysqld ,在Linux上使用调试 strace
    • 检查Unix套接字的权限: stat $(mysql_config --socket) df -h ).
    • 检查 net.core.somaxconn .
        13
  •  2
  •   Husain Al Faraj    10 年前

    确保您的本地服务器(MAMP、XAMPP、WAMP等)正在运行。

        14
  •  0
  •   Jignesh Rawal    12 年前

    也许我回答得晚了,但解决我问题的是安装mysql服务器

    sudo apt-get install mysql-server
    

    如果顶级答案对他们没有帮助,我希望这能帮助到他们

        15
  •  0
  •   Steven Ventimiglia    8 年前

    通过使用 127.0.0.1 localhost

        16
  •  0
  •   navotera    8 年前

    添加此文件末尾 /etc/mysql/my.cnf

    [mysqld]
    innodb_force_recovery = 1
    



    service mysql restart

        17
  •  0
  •   Fom    8 年前

    然后

    如果MySQL没有运行。然后,请分享您将要进一步排除故障的错误日志。

        18
  •  0
  •   Park JongBum    8 年前

    我也有类似的问题。






    你应该可以走了:)