zoukankan      html  css  js  c++  java
  • [PHP]关于连接MySQL的问题

    概述

    PHP中无论使用MySQL函数抑或PDO连接MySQL服务器,都允许有两种方式,一是通过TCP网络层,一是通过unix socket

    PHP并没有给出指明用何种方式去连接数据库,决定使用何种方式去连接数据库的是,连接时host的指定:

    1、当host为一个ip值时,PHP使用TCP网络层方式去连接数据库;

    2、当host的值为localhost时,PHP使用unix socket的方式连接数据库;

    问题

    当使用unix socket的方式连接数据库时,你必须确保本地的MySQL服务启用了unix socket这个连接方式;

    一般来说MySQL服务会在/var/lib/mysql目录下建立一个mysql.sock,以确保PHP通过打开此文件连接MySQL服务;

    试图打开和读取mysql.sock的程序必须具备对mysql.sock的rw权限;

    并且php.ini在以下配置项,必须明确指明该文件的位置:

    mysql.default_socket = /tmp/mysql.sock
    pdo_mysql.default_socket= /tmp/mysql.sock
    mysqli.default_socket =/tmp/mysql.sock
    //使用mysqld引擎的数据库应修改为如下设置
    mysql.default_socket = /tmp/mysqld.sock
    pdo_mysql.default_socket= /tmp/mysqld.sock
    mysqli.default_socket =/tmp/mysqld.sock

    假如没有正确配置php.ini的mysql[d].sock路径,连接数据库时,PHP的MySQL函数会抛出以下错误:

    SQLSTATE[HY000] [2002] No such file or directory

    在MySQL查看unix socket状态

    可以通过以下命令查看unix socket状态:

    mysql>show variables like '%sock%';
    +-----------------------------------------+---------------------------+
    
    | Variable_name                           | Value                     |
    
    +-----------------------------------------+---------------------------+
    
    | performance_schema_max_socket_classes   | 10                        |
    
    | performance_schema_max_socket_instances | -1                        |
    
    | socket                                  | /var/mysql/mysql.sock |
    
    +-----------------------------------------+---------------------------+
    
    3 rows in set (0.00 sec)

    如果不socket的位置和你实际位置不一样。可以使用ln命令进行链接一下

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

     

  • 相关阅读:
    MySQL数据类型
    Linux网络编程:客户端/服务器的简单实现
    初学JAVA
    依据函数名字符串执行函数
    Windows Server 2012学习文档
    DELPHI WEBSERVICE
    常用函数、常量、类型记录
    CAD2007_DWG转PDF
    MCU_头文件编写
    MCU_存储器
  • 原文地址:https://www.cnblogs.com/yiyide266/p/11923490.html
Copyright © 2011-2022 走看看