我有一个 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)
这会导致问题吗?