• mysql_connect(): [2002] No such file or directory


    在mac中搭建php的开发环境 

    1. apach ---- 推荐用MAMP。你只要把你的php文件/项目放入到htdocs(/Applications/MAMP/htdocs)目录下,启动mamp,输入localhost就可以直接看见你这个目录下的所有文件了。--由于这种相对简单,这里不再赘述,如果任何问题,欢迎联系交流。

    2. nginx ---- 由于没有已经集成的工具,nginx相对apach的配置相对复杂。比如你需要下载mysql,下载php-fpm,甚至还需要用homebrew来安装。(我下面的说明都是基于homebrew安装的情况)在这里我简单的说明几点需要特别注意的情况:

    2.1 nginx的配置

    需要说明的是/usr/local/etc/nginx下的conf文件server的配置,fastcgi_param选项,注意当加上$document_root,如下面所示:实际上,下面的$document_root$fastcgi_script_name;是和fastcgi.conf里面的值一致。

    server {
            listen       80;
            server_name  localhost; //指定你的域名
     
            #charset koi8-r;
     
            #access_log  logs/host.access.log  main;
     
            location / {
                root   /Users/megan/www/; // 指定你项目的路径
                index  index.html index.htm;
            }
     
            #error_page  404              /404.html;
     
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
     
            # proxy the PHP scripts to Apache listening on 127.0.0.1:80
            #
            #location ~ .php$ {
            #    proxy_pass   http://127.0.0.1;
            #}
     
            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            #
            location ~ .php$ {
                root           html;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        fastcgi_params;
            }
     
            # deny access to .htaccess files, if Apache's document root
            # concurs with nginx's one
            #
            #location ~ /.ht {
            #    deny  all;
            #}
        }

    本文是有mysql引发的,这里就简单的说说mysql的简单命令。

    启动 -- mysql.server start 

    关闭 -- mysql.server stop

    重启 -- mysql.server restart

    连接 -- mysql -uroot 或者 mysql -uroot -p (这里是密码)

    导入数据 -- source ../*.sql

    2.3 php-fpm的配置

    这玩意儿最郁闷的是我没有找到很好的重启和关闭的命令。比如nginx的启动用sudo nginx,关闭用sudo nginx -s -stop重启用sudo nginx -s reload. 可php-fpm我只会用sudo php-fpm来启动。关闭的方式简直是粗暴。

    我首先用ps aux|grep php来查看有那些php进程在运行,然后执行kill php-fpm相关进程。比如下面这样的结果执行(sudo)kill 3870 3871 3872.再查看一次,你会发现这些进程没有了。(如果哪位同仁有更好的办法并能指点迷津,比女子将不胜感激)

    [megan@megan:~]$ps aux|grep php
    megan            1338   4.6  7.4  1824760 389504   ??  S    10:51AM  23:40.56 /Applications/zend-eclipse-php/zend-eclipse-php.app/Contents/MacOS/zend-eclipse-php -os macosx -ws cocoa -arch x86 -launcher /Applications/zend-eclipse-php/zend-eclipse-php.app/Contents/MacOS/zend-eclipse-php -name Zend Eclipse for PHP Developers --launcher.library /Applications/zend-eclipse-php/zend-eclipse-php.app/Contents/MacOS//../../../plugins/org.eclipse.equinox.launcher.cocoa.macosx_1.1.200.v20120522-1813/eclipse_1503.so -startup /Applications/zend-eclipse-php/zend-eclipse-php.app/Contents/MacOS//../../../plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar --launcher.overrideVmargs -showlocation -launcher /Applications/zend-eclipse-php/zend-eclipse-php.app/Contents/MacOS/zend-eclipse-php -showlocation -data /Users/megan/www -launcher /Applications/zend-eclipse-php/zend-eclipse-php.app/Contents/MacOS/zend-eclipse-php -showlocation -keyring /Users/megan/.eclipse_keyring -showlocation -vm /System/Library/Frameworks/JavaVM.framework -vmargs -Xms128M -Xmx512M -Djava.awt.headless=true -XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts -Xdock:icon=../Resources/Eclipse.icns -XX:MaxPermSize=256m
    megan          3981   0.4  0.0  2442000    628 s001  S+    6:48PM   0:00.01 grep php
    nobody         3872   0.0  0.2  2481552  12008   ??  S     5:57PM   0:05.74 php-fpm
    nobody         3871   0.0  0.2  2481552  12748   ??  S     5:57PM   0:01.09 php-fpm
    root           3870   0.0  0.0  2464912    592   ??  Ss    5:57PM   0:00.23 php-fpm
    回到问题

    其实这个问题很简单,只需要找到你的mysql.sock 然后回到你的php.ini修改一个配置就好了。主要是下面三行代码。

    pdo_mysql.default_socket=/tmp/mysql.sock //如果使用的是zendframework,这个需要配置
     
    // 如果使用的是opencart等并没有使用pdo的需要配置下面两项。
    mysql.default_socket = /tmp/mysql.sock
     
    mysqli.default_socket =/tmp/mysql.sock

    实际上只做了一件事,那就是将mysql.sock配置给default_socket。

    其实这里最主要的问题是你怎么找到你的mysql.sock, 怎么找你的php.ini。玩了这么就的mac,除了做iOS开发,无论是玩java还是php还是其他,最郁闷的一件事情是找相关的配置文件。什么whereis,locate,which等都用了个遍,往往还是找不到文件,那种痛苦,不想多说。

    找到php.ini最简单的办法--建一个文件,phpinfo()会让世界变得异常美好。

    找到mysql.sock -- 你可能会使用mysqladmin viriables 查看mysql所有的参数,你或许发现mysql.sock的路径指向了/tmp/mysql.sock,可是你找不到那个文件,尽管你现实所有隐藏文件你还是看不到这个文件。

    DirectiveLocal ValueMaster Value
    pdo_mysql.default_socket /var/mysql/mysql.sock /var/mysql/mysql.sock

    那么你可以执行sudo find / -name mysql.sock 它会告诉你,其实你的mysql.sock在private/tmp/mysql.sock这里。那么你可能会想用下面这行代码来建一个快捷方式。

    ln -s /private/tmp/mysql.sock /tmp/mysql.sock
     

    ok,是可以,或许它会提醒你这个文件已经存在了。没关系,不用理会它,尽管你在/tmp里面还是看不见mysql.sock。你只管用就行了。我也不知掉多到哪个我看不见的角落了。总之,有个mysql.sock的快捷方式在/tmp下面给你使用。

    来源:http://my.oschina.net/megan/blog/325040

  • 相关阅读:
    架构设计中的方法学——迭代设计
    架构重构改善既有代码的设计
    架构如何为业务和技术“服务”(2)
    架构如何为业务和技术“服务”(1)
    选用面向领域的多层分布式架构(DDD风格架构)的理由
    传话游戏(2013编程之美全国挑战赛资格赛)
    2012年蓝桥杯软件设计大赛河南省初赛试题和答案
    最大值最下化
    NYOJ120 校园网络(强连通缩点targan算法)
    NYOJ176整数划分(二)
  • 原文地址:https://www.cnblogs.com/wangxusummer/p/4092405.html
Copyright © 2020-2023  润新知