SQLSTATE[HY000] [2013] Lost connection to MySQL server at 'reading initial communication packet', sy

COS、CDN
wdzsjl 2周前 (01-01) 阅读数 55 #Typecho

错误信息 SQLSTATE[HY000] [2013] Lost connection to MySQL server at 'reading initial communication packet', system error: 111 翻译成中文为:

在读取初始化数据包时失去到MySQL服务器的连接,系统错误111。通讯包初始化失败,估计是不允许连接访问引起的。

解决办法

以下是一些常见的解决办法:

  1. 检查连接地址

    • 尝试使用 localhost 替换 127.0.0.1

      • 在PHP代码中,将连接地址从 127.0.0.1 改为 localhost
      • 例如:
        $dsn = "mysql:host=localhost;dbname=your_database"; $username = "your_username"; $password = "your_password";  try {     $pdo = new PDO($dsn, $username, $password); } catch (PDOException $e) {     echo "Connection failed: " . $e->getMessage(); }
    • 重启MySQL数据库

      • 重启MySQL数据库服务,确保更改生效。
  2. 检查防火墙限制

    • 关闭防火墙(临时测试):

      • 在Linux系统中,可以使用命令:
        sh
         
        sudo systemctl stop firewalld
    • 检查防火墙规则

      • 确保防火墙允许TCP端口3306的流量。
      • 在Linux系统中,可以使用命令:
        sh
         
        sudo firewall-cmd --add-port=3306/tcp --permanent sudo systemctl restart firewalld
  3. 检查MySQL访问权限

    • 检查MySQL用户权限
      • 登录MySQL数据库:
        sh
         
        mysql -u root -p
      • 查看用户的权限:
        sql
         
        SHOW GRANTS FOR 'your_username'@'localhost';
      • 如果没有足够的权限,可以授予必要的权限:
        sql
         
        GRANT ALL PRIVILEGES ON your_database.* TO 'your_username'@'localhost' IDENTIFIED BY 'your_password'; FLUSH PRIVILEGES;
  4. 检查MySQL配置文件 my.ini

    • 检查 bind-address 参数

      • 打开MySQL配置文件 my.ini(通常位于 /etc/mysql/my.cnf 或 /etc/my.cnf)。
      • 查找 bind-address 参数:
        ini
         
        [mysqld] bind-address = 127.0.0.1
      • 将 bind-address 设置为 0.0.0.0 以允许所有IP地址连接:
        ini
         
        [mysqld] bind-address = 0.0.0.0
    • 重启MySQL服务

      • 保存配置文件并重启MySQL服务:
        sh
         
        sudo systemctl restart mysql

验证连接

  1. 创建测试脚本

    • 创建一个简单的PHP脚本来测试连接:
      <?php $dsn = "mysql:host=localhost;dbname=your_database"; $username = "your_username"; $password = "your_password";  try {     $pdo = new PDO($dsn, $username, $password);     echo "连接成功!"; } catch (PDOException $e) {     echo "连接失败: " . $e->getMessage(); } ?>
  2. 运行测试脚本

    • 将脚本保存为 test.php 并放在Web服务器的根目录下。
    • 通过浏览器访问 http://yourserver/test.php,检查输出结果。

通过上述步骤,你应该能够解决 SQLSTATE[HY000] [2013] Lost connection to MySQL server at 'reading initial communication packet', system error: 111 的问题。如果还有其他问题或需要进一步的帮助,请随时告知。

COS、CDN
热门