mysqldump通过事物备份不锁表,但是会回滚,会不会造成这段时间数据的丢失?

mysqldump备份,如何能不锁表,备份时写入的数据不会丢失?显示全部

mysqldump备份,如何能不锁表,备份时写入的数据不会丢失?

收起
参与22

查看其它 2 个回答liucj2004的回答

liucj2004liucj2004  其它 , undefined

--single-transaction不锁表
备份是完整的,数据不会丢失
另外,备份时写入的数据对你而言意义不大,因为这只是一个备份,本来就不是一个精确的时间点。

农业其它 · 2017-05-04
浏览3052
彬彬 邀答
  • 主要是实现热备份,例如一个日志表,或者交易流水表,随时有数据写入。那如果备份的时候要锁住表,那写入就会夯住。那业务就相当于要中断。single-transaction不锁表,那在备份的时候,备份出来的数据是备份开始的数据,还是结束的数据哪?
    2017-05-04
  • single-transaction相当于把备份的session设置为REPEATABLE READ隔离级别,所以备份出来是备份开始时候的数据。
    2017-05-04
  • 备份之前不是会建个savepoint么?备份完成后会回滚一下这个savepoint,那这段时间的数据写入不就没有了么?还是在建这个savepoint时是把建的这个截断点的数据导出来之后,应该就不需要回滚了吧
    2017-05-04
  • 这些数据只是在备份中没有,在数据库里面还是存在的
    2017-05-04
  • 但是你们文档中不是有一步回滚么?回滚的时候不是会把数据回滚回去么?建立保存点在备份完之后回滚,这步有需要么?
    2017-05-04
  • 这一步是mysqldump自己实现的,只对它自己这个session
    2017-05-04
  • 那如果是对自己这个session还有必要进行回滚么?备份完成后,就直接跳出啊?
    2017-05-04
  • 这个时候备份的过程就很意思,它先创建了一个savepoint,然后把数据库里的表依次的进行备份,备份完成了之后又回滚到了之前的savepoint,来保证数据的一致性。。。。。这一步是自动进行回滚么?一般业务系统这步动作肯定是不需要的,备份完之后回滚数据就会有缺失
    2017-05-04
  • 这个参数备份相当于执行了这个语句“ SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ”他是从undo里面去读取的数据,效果相当于读取回滚到savepoint的状态,这才保住了数据的一致性。比如说所有表的备份都在同一个时间点,否则表a是11:00的备份,表b是11:10的备份,在业务上就不允许了。
    2017-05-04

回答者

liucj2004 最近回答过的问题

回答状态

  • 发布时间:2017-05-04
  • 关注会员:5 人
  • 回答浏览:3052
  • X社区推广