mysqldump

今天有个需求需要导出以下两部分线上数据库数据:
1、回购表需要整表导出: /home/mysql/mysql/bin/mysqldump -uroot -p -h127.0.0.1 -P3306 --single-transaction outreach_platform report_overdue_back_detail > report_overdue_back_detail.sql
2、部分bill_flow: /home/mysql/mysql/bin/mysqldump -uroot -p -h127.0.0.1 -P3306 --single-transaction outreach_platform bill_flow --where="loan_no in (select distinct loan_no from report_overdue_back_detail)" > bill_flow.sql

一开始没有加入--single-transaction参数,结果1执行没有问题,1执行完再执行2的话报如下错:


image.png

ERROR1100:未使用LOCK TABLES锁定表
具体原因也不太清楚,涉及到了表锁问题,可能是在包含了子查询的查询语句中,子查询又需要获取一次默认--lock-tables全局锁却获取不到的缘故。

mysqldump默认加入的参数是--lock-tables,与--single-transaction的区别可以参考如下链接:
mysqldump --single-transaction 和--lock-tables参数详解

总结:

1、--single-transaction将整个备份过程作为一个事务,避免了表锁
2、--single-transaction的备份速度高于--lock-tables
3、使用--single-transaction可以保证在备份过程中,整个备份集的数据一致性;使用--lock-tables参数并不能保证全库备份情况下的数据一致性,即所有的数据,不一定是在一个时间点的数据

你可能感兴趣的:(mysqldump)