0

我有一个 MySQL 数据库和一个使用 PDO 连接到它的 PHP 脚本。

MySQL 数据库与 PHP 脚本在同一台服务器上运行。

这是我用来连接的代码:

$dbh = new PDO('mysql:host=' . $db_info[0]['hostname'] . ';dbname=' . $db_info[0]['db'], $db_info[0]['username'], $db_info[0]['password'], array( PDO::ATTR_PERSISTENT => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_EMULATE_PREPARES => true ));
$dbh->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);

我的脚本是多线程的,可以同时打开多个连接。

我看到的是,在运行大约 30 秒后,脚本会死掉并返回SQLSTATE[HY000] [2003] Can't connect to MySQL server错误,但是 MySQL 服务器正在运行并且没有重新启动或任何东西:

mysql> show status like "%uptime%";
+---------------------------+---------+
| Variable_name             | Value   |
+---------------------------+---------+
| Uptime                    | 1033900 |
| Uptime_since_flush_status | 1033900 |
+---------------------------+---------+
2 rows in set (0.00 sec)

我很困惑,因为我的脚本在短时间内可以正常工作,直到(看似)随机的一个线程无法获得与服务器的连接,并返回该错误并崩溃。

我应该在哪里调试为什么在连接到正在运行的本地 MySQL 服务器时会收到该错误?

我确实看到了这看起来有点令人担忧:

mysql> show status like "%connections%";
+-----------------------------------+-------+
| Variable_name                     | Value |
+-----------------------------------+-------+
| Connection_errors_max_connections | 0     |
| Connections                       | 1197  |
| Max_used_connections              | 45    |
+-----------------------------------+-------+
3 rows in set (0.00 sec)

这会导致问题吗?

4

0 回答 0