• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > 关于mysqldump的实例详解

关于mysqldump的实例详解

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了--single-transaction,mysqldump,MySQL--等相关知识,希望本文的分享对您有所帮助
部分生产环境采用mysqldump --single-transaction的方式在夜间进行数据库备份,而同事恰好在备份期间执行了alter table操作,操作部分成功部分失败,为啥呢?

测试在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的实例详解的详细内容,更多请关注微课江湖其它相关文章!

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 当mysqldump --single-transaction遇到alter table怎么办?
  • 关于mysqldump的实例详解

相关文章

  • 2018-12-05mysql教程:mysql命令方式创建数据库
  • 2018-12-05关于sqlserver 2005 使用临时表的问题( Invalid object name #te
  • 2018-12-05MySQL性能调优
  • 2018-12-05非常不错的SQL语句学习手册实例版第1/3页
  • 2018-12-05SQL Server修改标识列方法 如自增列的批量化修改
  • 2018-12-05运用mysqldump 工具时需要注意的问题
  • 2018-12-05 写给毕业生
  • 2017-05-11mysql 基本操作
  • 2018-12-05sqlserver中获取当前日期的午夜的时间值的实现方法
  • 2018-12-05SQL Server SQL Agent服务使用教程小结

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • mysql sql语句总结
    • mysql数据库管理工具phpmyadmin的配置
    • mysql服务器查询慢原因分析与解决方法小结
    • 使用SQL实现小计,合计以及排序
    • 解决MySQL Workbench gnome-keyring-daemon错误的方法分享
    • 推荐10款drbd8.4.2特效(收藏)
    • Debian中完全卸载MySQL的方法
    • Oracle存储过程入门学习基本语法_Oracle应用_脚本之家
    • MySQL配置文件my.cnf中文详解附mysql性能优化方法分享
    • 总结MySQL建表、查询优化的一些实用小技巧

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有