ThinkPHP配置Aurora Serverless数据库:AWS无服务器数据库在ThinkPHP中的自动扩缩容

看不見的法師

看不見的法師

2026-06-07

600人浏览

原创

thinkphp本身不感知aurora serverless v2自动扩缩容,需显式配置connect_timeout=20、wait_timeout=28800、persistent=false,并禁用持久连接、开启trace_sql、限制事务边界、合理设置minacu以适配其动态扩缩特性。

thinkphp配置aurora serverless数据库:aws无服务器数据库在thinkphp中的自动扩缩容

ThinkPHP 本身不感知 Aurora Serverless 的自动扩缩容,它只把数据库当做一个标准 MySQL 兼容端点来用;真正起作用的是连接池行为、超时配置和 Aurora 自身的扩缩策略 —— 配置不当,冷启动或突发扩容时就会连不上、查超时、事务中断。

ThinkPHP 数据库配置必须显式设置 connect_timeout 和 wait_timeout

Aurora Serverless v2 启用自动暂停(SecondsUntilAutoPause)后,空闲 5 分钟默认会暂停;恢复需约 15 秒。若 ThinkPHP 的 PDO 连接未设超时,mysql_connectPDO::__construct 会卡住远超这个时间,最终报错 SQLSTATE[HY000] [2002] Connection refusedCan't connect to MySQL server

  • 'params' => ['connect_timeout' => 20, 'wait_timeout' => 28800] 必须加进数据库配置的 params 数组(非 dsn 字符串)
  • connect_timeout=20 确保连接建立阶段能撑过冷启动期;低于 15 秒有失败风险
  • wait_timeout 建议设为 28800(8 小时),避免 Aurora 主动踢掉长空闲连接导致 ThinkPHP 报 MySQL server has gone away
  • 不要在 dsn 里写 ?connect_timeout=20 —— ThinkPHP 8.x 及以前版本对 DSN 参数解析不一致,PDO 可能忽略它

连接池与长连接必须关掉:禁用 persistent

Aurora Serverless 的扩缩是动态的,IP 和后端实例可能随时变化;复用持久连接(persistent => true)会导致连接指向已销毁的旧计算节点,出现间歇性 Lost connection to MySQL server during query 或乱码响应。

ThinkPHP 8.1.0
ThinkPHP 8.1.0

ThinkPHP 8.1.0 正式发布,深度优化路由与验证机制,完美兼容 PHP 8.4。本版本修复了数组路由配置异常,新增枚举值校验与高级数组验证功能,支持路由分类默认处理。作为高性能 PHP 框架的最新迭代,它延续了简洁实用的设计原则,提供更稳定的底层架构与更流畅的开发体验,助力开发者快速构建现代化 Web 应用与企业级系统。

下载
  • ThinkPHP 配置中明确设 'persistent' => false(即使文档没提,默认也是 false,但务必显式写出来)
  • 禁用 MySQLi 的 MYSQLI_OPT_CONNECT_TIMEOUT 外部设置,它和 PDO 不兼容
  • 如果用了 Swoole + ThinkPHP,必须配合 Db::close() 在协程结束前释放连接,否则连接会滞留在已缩容的 ACU 上

查询慢日志与 ACU 扩容阈值要对齐

Aurora Serverless v2 扩容触发依赖实时指标:CPU > 70% 持续 10 秒、查询队列深度 > 50、内存压力 > 75%。ThinkPHP 默认不记录慢查,你无法判断是 SQL 本身拖垮了 ACU,还是扩缩滞后导致排队堆积。

  • database.php 中开启 'trace_sql' => true,并用中间件捕获执行时间 > 500ms 的查询,打标记录
  • 在 AWS 控制台将集群的 MinACU 设为 1.0(不是 0.5),避免低负载下频繁在 0.5 ↔ 1.0 之间抖动;v2 最小粒度是 0.5 ACU,但 0.5 容易因瞬时毛刺误扩容
  • 避免在 ThinkPHP 的 where 链式调用里拼接未绑定参数的原生 SQL,这类语句容易绕过预处理,触发 Aurora 的查询计划缓存失效,间接拉高 CPU

事务边界必须短,不能跨 HTTP 请求生命周期

Aurora Serverless 缩容时会终止空闲连接,但不会中断正在执行的事务;如果 ThinkPHP 把一个事务从请求开始拖到响应结束(比如在控制器里 startTrans → 多个 model 操作 → commit),而此时 ACU 正在缩减,事务可能卡在提交阶段,最终被 Aurora 强制 kill,报 Lock wait timeout exceededTransaction was rolled back due to capacity reduction(AWS 内部错误码)。

  • 事务块必须限制在单个业务方法内,且总耗时建议 Db::transaction(function () { ... }) 而非手动 startTrans
  • 禁止在 __destruct__sleep 里做 commit —— PHP 生命周期结束时连接可能已断
  • 如果必须长事务(如导入),改用 Aurora Serverless v2 的 MaxACU 锁定上限,并配合 RDS Proxy 缓冲连接,但代价是失去“缩到零”的成本优势

最常被忽略的一点:Aurora Serverless v2 的自动暂停功能在启用 RDS Proxy 时会完全失效 —— 如果你在架构里加了代理,SecondsUntilAutoPause 就不起作用,数据库永远无法缩到零。这点在 ThinkPHP 配置里看不到,但决定你是否真能省下闲置费用。

php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2023.09.01

5530

6

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

3630

5

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

1808

5

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

2023.10.23

2295

4

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

2023.10.23

2832

6

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.03

2021

9

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.09

3077

8

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.13

2362

8

sprintf函数用法详解
sprintf函数用法详解

sprintf函数的用法:1、格式化字符串;2、指定输出宽度和精度;3、返回值。更多关于sprintf函数用法详解的内容,大家可以阅读下面的文章。

2023.11.27

10932

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程