首页 / MYSQL / 关于mysqldump的实例详解
关于mysqldump的实例详解
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了关于mysqldump的实例详解,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2635字,纯文字阅读大概需要4分钟。
内容图文
![关于mysqldump的实例详解](/upload/InfoBanner/zyjiaocheng/538/71e8a959bc884cb6a64dedbc9f90138e.jpg)
测试在MySQL 5.6.36上执行,该问题存在版本差异!
##========================================================================##
在mysqldump对single-transaction参数的解释为:
Creates a consistent snapshot by dumping all tables in a single transaction. Works ONLY for tables stored in storage engines which support multiversioning (currently only InnoDB does); the dump is NOT guaranteed to be consistent for other storage engines. While a --single-transaction dump is in process, to ensure a valid dump file (correct table contents and binary log position), no other connection should use the following statements: ALTER TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE, as consistent snapshot is not isolated from them. Option automatically turns off --lock-tables.
红色字体部分是重点,但是看得有些迷糊,还是动手测试下。
根据《mysqldump的几个主要选项探究》的介绍,我们备份执行的命令mysqldump --single-transaction --master-data相当于执行下面代码:
FLUSH TABLES; FLUSH TABLES WITH READ LOCK;SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; START TRANSACTION WITH CONSISTENT SNAPSHOT; SHOW MASTER STATUS; UNLOCK TABLES; SHOW TABLES LIKE 'xxx'SET OPTION SQL_QUOTE_SHOW_CREATE=1SHWO CREATE TABLE 'xxx'SHOW FIELDS FROM 'xxx'SHOW TABLE STATUS LIKE 'xxx'SELECT /*!40001 SQL_NO_CACHE */ * FROM xxx QUIT
场景1:mysqldump开始但尚未备份到表tb001时,另外回话对表tb001进行alter操作,然后mysqldump对表tb001进行导出
alter操作顺利完成,但是mysqldump操作失败。
场景2:mysqldump开始备份并完成tb001的导出,在对其他表进行导出过程中,其他回话对表进行alter操作
alter table操作被阻塞直至mysqldump完成或失败后退出。
使用mysqldump备份时,模拟场景2的环境,报错信息为:
mysqldump: Error 1412: Table definition has changed, please retry transaction when dumping table `tb1002` at row: 0
查看导出文件,最后内容为:
-- -- Dumping data for table `tb1002`--LOCK TABLES `tb1002` WRITE;/*!40000 ALTER TABLE `tb1002` DISABLE KEYS */;
总结:
single-transaction参数通过Innodb的多版本来获得数据一致性,而ALTER TABLE, DROP TABLE, RENAME TABLE,TRUNCATE TABLE等操作会破坏数据一致性,两种操作不能并发执行。
如果修改表操作在 ”mysqldump开启后但还未导出修改表数据前“ 的时间段内开始,则修改表操作成功完成,而mysqldump会执行失败;
如果修改表操作在 “mysqldum已导出修改表数据但还未结束mysqldump操作前”的时间段内开始,则修改表操作被阻塞,mysqldum能成功完成,在mysqldump操作完成后修改表操作方可正常执行。
以上就是关于mysqldump的实例详解的详细内容,更多请关注Gxl网其它相关文章!
内容总结
以上是互联网集市为您收集整理的关于mysqldump的实例详解全部内容,希望文章能够帮你解决关于mysqldump的实例详解所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。