zoukankan      html  css  js  c++  java
  • 解决*unix系统下Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

    在windows下,即使是root使用也不用强制使用socket,而*unix则不同。
    一般情况下,可以设置php.ini与mysql.cnf的配制,使其能找到mysql.sock。
    /etc/my.cnf:

    port = 3306
    socket = /var/lib/mysql_data/mysql.sock


    /etc/php.ini:

    mysql.default_socket=/tmp/mysql.sock

    一种情况是,在系统下没有/tmp/mysql.sock这个文件,但php.ini又指定只能从/tmp位置获取。可以复制吗?
    cp /var/lib/mysql/mysql.sock   /tmp/mysql.sock
    cp: 无法打开 “/var/lib/mysql/mysql.sock” 读取数据: 没有那个设备或地址,不好意思,设置文件,不能编辑,不能复制。看来只能建立链接

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

    再次登陆,应该正常了。
    但在php中,运行mysql时可能还是会再次验证sock,这时我们只能作判断了:

    if (! function_exists('find_socket'))
    {
    function find_socket()
    {
    $file = '/var/lib/mysql/mysql.sock';
    $link = '/tmp/mysql.sock'; // php 指定mysql.sock存放地址
    return is_file($file) ? $file : ( is_file($link) ? $link : ( is_link($link) ? readlink($link) : null) );
    }
    }

    如果两个位置都不能获取,则只能返回null值。
  • 相关阅读:
    PKUSC 2018 题解
    [bzoj 1758] 重建计划
    bzoj 5329 [SDOI2018] 战略游戏
    bzoj 5285 [HNOI2018] 寻宝游戏
    Django 之认证模块
    Django之form表单
    Django 之AJAX
    Django 之中间组件
    Django之 Cookie,Session
    Django之F和Q查询等其他查询
  • 原文地址:https://www.cnblogs.com/sumsung753/p/3821495.html
Copyright © 2011-2022 走看看