我有一个在 Google Cloud 上运行的 MySQL 数据库。它强制执行 SSL,因此我使用证书和 key 连接到它:
- 在命令行上,我使用:
mysql --ssl-ca=/path/to/server-ca.pem --ssl-cert=/path/to/client-cert.pem --ssl -key=/path/to/client-key.pem --host=ip-address --user=username --password
- 对于 PDO,我使用
PDO::MYSQL_ATTR_SSL_CA
、PDO::MYSQL_ATTR_SSL_CERT
和PDO::MYSQL_ATTR_SSL_KEY
选项来指示所需的文件.
除了 PHP 中的 PDO 连接非常慢之外,两个连接都工作正常。 CLI 方法需要几毫秒来连接和执行查询,而 PDO 方法对于相同数量的连接需要 5-10 倍的时间。我在同一台机器上尝试了这两种方法,所以它似乎不是硬件/网络问题。 PDO 会在这里引起问题吗?
我正在使用 Laravel 以防万一。
更新:我尝试过的事情
- 在同一台服务器上运行任何其他 PHP 脚本(不包括 MySQL 连接):非常快。
- 运行 PHP 脚本连接到 127.0.0.1/localhost 上的数据库并执行查询:非常快。
- 使用 MySQL CLI 进行连接和查询(如问题中已经提到的):速度非常快 - 尽管很难验证有多快,所以我可以想象它。
- 使用所有相同的设置从不同的机器通过 PHP/PDO 连接和查询:非常慢,就像我试过的原始机器一样。
所以我唯一还没有尝试过的是关闭 SSL/TLS。不幸的是,出于安全原因,我不能对这个实例这样做。此外,基于使用 CLI 的 SSL/TLS 连接非常快这一事实,我得出结论,它一定与特定于 PHP 或 PDO 的东西有关。
我将自己进行一些调试,并在获得相关结果后添加它们。
最佳答案
我最终选择了谷歌云计算虚拟机来托管我的 PHP,然后通过私有(private) IP 进行连接。看起来这是可行的。
我不确定 PDO 是否真的比 MySQL CLI 慢,它可能只是看起来如此。
关于php - 通过 mysql cli 快速连接 MySQL,但使用 PDO 速度慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58010429/