- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
网络上有很多文章和 StackExchange 上的答案都建议使用类似这样的行(甚至更长的超时)来避免长时间运行的进程中 MySQL 超时的错误(例如但不限于“MySQL 服务器已经消失了”):
ini_set('mysql.connect_timeout', 300);
ini_set('default_socket_timeout', 300);
但是,我找不到这些解决问题的具体解释。在许多情况下,它们似乎是没有明确基础的 cargo 崇拜编程。我很好奇这些设置对 MySQL 连接生命周期的影响有多大:官方文档对于它们何时应用和测量含糊其辞。
据我所知mysql.connect_timeout
仅与MySQL的原始连接有关。因此,在最初建立成功连接后,此设置似乎与连接失败问题无关。设置 default_socket_timeout
可能与以后的连接问题更相关,但尚不清楚到底是什么会触发超时。它是否也仅在连接时相关,还是整个套接字生命周期的超时?是什么触发了超时?缺乏流量?缺乏特定类型的流量?
准确理解它们如何与 MySQL 连接交互对于能够合理地推断错误行为非常重要。
最佳答案
这两个设置与在长时间运行的进程中获取“mysql 已消失”无关。 MySQL 历史上没有办法限制查询最多运行多长时间,因此它们可以永远运行,并且因为在 I/O 事件期间不会检查 phps 最大执行时间,所以它不会阻止这种情况。
要限制 SQL 查询运行时间,您可以在 5.7 中使用新的 MySQL 功能:
SELECT /*+ MAX_EXECUTION_TIME(1000) */ status, count(*) FROM articles GROUP BY status ORDER BY status;
SET SESSION MAX_EXECUTION_TIME=2000;
SET GLOBAL MAX_EXECUTION_TIME=2000;
我在这里写了一篇关于此内容的博客文章,其中包含详细信息:
但是要修复 MySQL 消失的问题,您需要在长时间运行的脚本中找到一个点,在该点您知道它有一段时间没有执行某些操作并添加“ping”。
try {
$pdo->query("SELECT 1");
} catch (PDOException $e) {
if (stripos($pdo->getMessage(), "mysql gone away")) {
// reconnect
}
}
这样你就可以在 mysql 消失时重新连接。
关于php - default_socket_timeout 和 mysql.connect_timeout 之间的确切关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52008064/
有什么区别: mysql.connect_timeout 我们可以在 php.ini 中找到 和 connect_timeout 属于 mysql 配置(显示变量)。 知道apache serve
Guzzle 中的“connect_timeout”和“timeout”请求选项有什么区别。 最佳答案 我可以解释的最基本的方法是(据我了解): 连接超时 - Time Guzzle 将等待与服务器建
我有一些代码来支持 alexa 前端。 它在 Rpi 上运行,它是 python 查询 mysql 数据库,flask-ask 等。 它一整天都完美运行,第二天早上我收到错误 2006(mysql 已
我正在尝试在 kubernetes 上部署一个自动化的高可用 PostgreSQL 集群。在 master 故障转移或 master 临时故障的情况下,standby 丢失流复制连接,并且在重试时,它
Perl 新手在这里。我有一行代码: my $api_data = decode_json( $ua->get($url)->res->body ); 哪里$ua = Mojo::UserAgent-
我最近收到一条评论,说我应该“在我的脚本中使用 connect_timeout”。我去搜索这实际上意味着什么,我在 php.net 上找到了这个信息。在用户评论中: One thing is to r
网络上有很多文章和 StackExchange 上的答案都建议使用类似这样的行(甚至更长的超时)来避免长时间运行的进程中 MySQL 超时的错误(例如但不限于“MySQL 服务器已经消失了”): in
我们有一个美味的 mysql master + master setup 正在运行。 这对解决我们一直遇到的 innodb 的一些奇怪问题有很大帮助。但这是另一个问题... 为了进一步优化这个 mys
我刚刚通过 cocoapods 更新到 Xcode 9.4 (Swift 4.1) 和 Realm 3.6.0。我第一次收到编译器“语义问题”警告: Enumeration values 'conne
我们最近移植了一些代码,我们必须使用 PHP 的 MySQLi 扩展而不是常规的 mysql。此代码连接到偶尔可能没有响应的数据库,因此我们在 PHP.ini 上设置此变量: mysql.connec
为了在进行 REST 调用时设置超时,我们应该指定这两个参数,但我不确定为什么要同时指定这两个参数以及它们究竟有什么不同的用途。另外,如果我们只设置其中一个或两个设置不同的值怎么办? 最佳答案 CON
我是一名优秀的程序员,十分优秀!