You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux服务器Laravel+MariaDB插入数据后立即查询无新数据求助

问题根因定位

该问题90%以上是读写分离场景下主从同步延迟+Laravel默认读请求路由规则导致的,本地为单节点数据库无主从架构,因此不会复现。

解决方案

1. 优先调整Laravel数据库配置(无需修改数据库配置,优先推荐)

如果你的项目配置了读写分离,在config/database.php的MariaDB连接配置中开启sticky选项即可:

'mysql' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST', '127.0.0.1'),
    // 原有其他配置保持不变
    'read' => [
        'host' => [env('DB_READ_HOST', '127.0.0.1')],
    ],
    'write' => [
        'host' => [env('DB_WRITE_HOST', '127.0.0.1')],
    ],
    'sticky' => true, // 新增该行开启sticky规则
],

sticky开启后,同一个请求生命周期内只要执行过写入操作,后续所有读请求都会自动路由到主库,完全避免刚写入就查询从库遇到的同步延迟问题。

2. 未配置读写分离时调整MariaDB事务隔离级别

如果没有使用读写分离,问题大概率是Linux默认MariaDB的事务隔离级别导致的。Linux环境下MariaDB默认隔离级别为REPEATABLE-READ(可重复读),如果插入和查询逻辑分布在两个不同的未提交事务中,就会出现看不到新数据的情况,可以调整为READ-COMMITTED(读已提交)解决:

  1. 编辑MariaDB配置文件,通常路径为/etc/my.cnf或/etc/mysql/mariadb.conf.d/50-server.cnf
  2. 在[mysqld]配置段下新增规则:
transaction-isolation = READ-COMMITTED
  1. 重启MariaDB服务生效:systemctl restart mariadb

3. 兜底检查项

  • 确认插入操作执行后已经完成事务提交,无遗漏commit()调用
  • 低版本Laravel确认未开启查询缓存,可在查询逻辑中加->withoutCache()测试
  • 确认未开启跨请求的数据库持久连接,避免前一个请求的未回滚事务污染后续请求

内容的提问来源于stack exchange,提问作者dang quang hai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:09:03