V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
? MySQL 5.5 Community Server
? MySQL 5.6 Community Server
? Percona Configuration Wizard
? XtraBackup 搭建主从复制
Great Sites on MySQL
? Percona
? MySQL Performance Blog
? Severalnines
推荐管理工具
? Sequel Pro
? phpMyAdmin
推荐书目
? MySQL Cookbook
MySQL 相关项目
? MariaDB
? Drizzle
参考文档
? http://mysql-python.sourceforge.net/MySQLdb.html
liudaqi
V2EX  ?  MySQL

灵异事件?!一个 request 里,操作数据掉了一半...

  •  
  •   liudaqi · 2021-01-20 18:44:44 +08:00 · 2310 次点击
    这是一个创建于 1200 天前的主题,其中的信息可能已经有所发展或是发生改变。

    腾讯云最新优惠活动来了:云产品限时1折,云服务器低至88元/年 ,点击这里立即抢购:9i0i.cn/qcloud,更有2860元代金券免费领取,付款直接抵现金用,点击这里立即领取:9i0i.cn/qcloudquan

    (福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

    今天遇到一个用户反应数据出错,然后去把数据拉出来核对,真的是错了,只是错误百思不得姐:

    def pipline():
    
        a.name = 'new name'
        sql.session.add(a)
        sql.session.commit()
    
        b.status = 'done'
        sql.session.add(b)
        sql.session.commit()
    
    

    pipline() 是在一个 request 中完成的,程序中没有用事务回滚。结果发现 b.status 存到数据库中了,a.name 在数据库中没有保存下来。

    这个业务流程从来没有出错过,只是有可能用户刚刚在操作的时候,刚好服务器有执行过重启操作,有可能这么巧合吗,把一个 request 中的数据库插入给丢一半、留一半?

    5 条回复  ?  2021-01-20 20:33:00 +08:00
    v2webdev
        1
    v2webdev  
       2021-01-20 19:20:36 +08:00
    它俩又不是在同一个事务里,当然有可能不同时提交。
    liudaqi
        2
    liudaqi  
    OP
       2021-01-20 19:26:57 +08:00
    @v2webdev 也是怀疑到这一步了。疑惑的是,怎么丢的数据不是上半部分,而是后半部分?程序好歹是从上往下执行的,这个 pipline() 大多数时候是在 1 秒之内就能结束的。中途是有 reboot 服务器,还是感到比较灵异
    xupefei
        3
    xupefei  
       2021-01-20 19:32:46 +08:00 via iPhone
    acid 中并没有定义回滚的优先级,回滚与否和执行时刻无关。
    xupefei
        4
    xupefei  
       2021-01-20 19:35:13 +08:00 via iPhone
    另外你检查过 commit 是否同步吗?它可能是异步…
    srx1982
        5
    srx1982  
       2021-01-20 20:33:00 +08:00
    @xupefei 有道理,建议楼主研究一下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   837 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 22:59 · PVG 06:59 · LAX 15:59 · JFK 18:59
    Developed with CodeLauncher
    ? Do have faith in what you're doing.


    http://www.vxiaotou.com