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

MySQL服务器在自制升级后消失了

  •  2
  • forthrin  · 技术社区  · 6 年前

    我刚做了一个 brew upgrade 到PHP 7.2.8和MySQL 8.0.12。在此之后,尝试从PHP脚本(从Bash)连接到MySQL会在10秒后超时(默认MySQL超时值)。

    new PDO("mysql:host=localhost;dbname=foo;charset=utf8", "user", "pass");
    
    [2006] MySQL server has gone away
    

    我周围的一切似乎都很正常。我没有改变我的设置。从Bash连接到MySQL很好。如何从PHP重新获得MySQL访问权限?

    $ php -i | grep php.ini
    Configuration File (php.ini) Path => /usr/local/etc/php/7.2
    Loaded Configuration File => /usr/local/etc/php/7.2/php.ini
    
    $ tail /usr/local/etc/php/7.2/php.ini
    mysql.default_socket = /tmp/mysql.sock
    pdo_mysql.default_socket = /tmp/mysql.sock
    
    $ ls /tmp/mysql*
    srwxrwxrwx  0 /tmp/mysql.sock
    -rw-------  5 /tmp/mysql.sock.lock
    srwxrwxrwx  0 /tmp/mysqlx.sock
    -rw-------  6 /tmp/mysqlx.sock.lock
    
    $ mysql
    Welcome to the MySQL monitor.
    mysql> show variables like '%socket%';
    +-----------------------------------------+------------------+
    | mysqlx_socket                           | /tmp/mysqlx.sock |
    | socket                                  | /tmp/mysql.sock  |
    +-----------------------------------------+------------------+
    
    2 回复  |  直到 6 年前
        1
  •  3
  •   forthrin    6 年前

    解决方案:将其添加到MySQL配置文件中( my.cnf ):

    [mysqld]
    default_authentication_plugin=mysql_native_password
    

    PHP manual :

    MySQL 8默认为 caching_sha2_password ,旧PHP版本无法识别的插件。 相反,通过设置更改它 default_authentication_plugin=mysql_native_password 在里面 我的.cnf . 这个 缓存密码 插件将在未来的PHP中得到支持 释放。

    我希望这样可以省去别人的一些头痛和时间。

        2
  •  1
  •   Philip Parodayco    6 年前

    这是一个不需要更改默认身份验证配置的解决方案。

    mysql> create user 'username'@'host' identified with mysql_native_password by 'password';
    

    MySQL8.0引用: CREATE USER Syntax GRANT USER Syntax

    一旦更新了PHP以进行SHA-256身份验证,您就可以再次“更改用户”以使用缓存的sha2密码进行标识。