MySQL--当mysqldump --single-transaction遇到alter table(2)

摘要:
在之前的MySQL中,当mysqldump单个事务遇到altertable时,测试发现在MySQL 5.6中,如果在mysqldump期间修改了表,mysqldump可能会报告错误,这与同事的执行不一致。因此,测试是在MySQL 5.5中进行的。测试环境:MySQL 5.5.14在testdb01下有一个表tb1001。当前表中有两条数据:##=============================================##发现返回的集合为空,并且没有报告错误。

在上篇《MySQL--当mysqldump --single-transaction遇到alter table》中测试发现,在MySQL 5.6版本中,如果在mysqldump期间修改表,可能会导致mysqldump报错,而该结论与同事的执行现象不符,因此在MySQL 5.5版本中进行下测试。

测试环境:

MySQL 5.5.14

在数据库testdb01下有表tb1001,当前表中存有两条数据:

MySQL--当mysqldump --single-transaction遇到alter table(2)第1张

##=========================================================##

MySQL--当mysqldump --single-transaction遇到alter table(2)第2张

发现竟然返回的是空集,没有任何报错。

这也就合理解释我同事操作的现象:在mysqldump过程中,修改表结构,修改操作没有被阻塞,mysqldump操作也”正常完成“。

由于SELECT /*!40001 SQL_NO_CACHE */ * FROM `tb1001`操作没有返回错误也没有返回数据,mysqldump进程会将tb1001当做一个空表来处理,然后继续导出后面的表直至导出所有的表然后返回执行成功的状态。但导出的备份已经缺失tb1001的数据,如果恰好采用该备份去恢复数据,那么必然最终导致“数据丢失”。

解决办法:

在对MySQL 5.5版本进行修改表操作前,先检查当前服务器是否在进行mysqldump操作,避免两者并行执行。

如果对mysqldump已经导出过的表进行修改操作,修改操作会被阻塞,直到mysqldump结束,该情况与MySQL 5.6版本一致。

##=========================================================================================##

总结:

对于MySQL 5.5版本,mysqldump与表修改操作同时执行:

如果修改表操作在 ”mysqldump开启后但还未导出修改表数据前“ 的时间段内开始,则修改表操作成功完成,而mysqldump不会执行失败,但是无法正常导出修改表的数据;

如果修改表操作在 “mysqldum已导出修改表数据但还未结束mysqldump操作前”的时间段内开始,则修改表操作被阻塞,mysqldum能成功完成,在mysqldump操作完成后修改表操作方可正常执行。

对于MySQL 5.5版本,应该避免mysqldump和修改表操作同时进行,以避免备份丢失修改表的数据,造成数据不一致!

##=========================================================================================##

MySQL--当mysqldump --single-transaction遇到alter table(2)第3张

免责声明:文章转载自《MySQL--当mysqldump --single-transaction遇到alter table(2)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇centos 7 端口设置数字图像处理_图像基本运算下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

几篇关于MySQL数据同步到Elasticsearch的文章---第三篇:logstash_output_kafka:Mysql同步Kafka深入详解

文章转载自:https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484411&idx=1&sn=1f5a371095d61bd0d6461ed111dd252b&chksm=eaa82bd3dddfa2c5b08831bfd4221178b277f03ec74e...

MySQL复合主键下ON DUPLICATE KEY UPDATE语句失效问题

问题的起因,假设有一张表,里面保存了交易订单,每张订单有唯一的ID,有最后更新时间,还有数据,详情如下: 1 2 3 4 5 6 7 +-------+----------+------+-----+---------------------+-------+ |Field|Type|Null|Key|Default|Extra| +--...

Shell 脚本之 MySQL 一键安装及基本配置(几分钟搞定)

准备工作 MySQL 该版本下载地址: https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz mysql_install-v1.0.sh脚本如下: #!/bin/bash # MySQL 安装日志信息 log=/var/...

mysql压缩包安装方式

从官网https://dev.mysql.com/downloads/mysql/上下载mysql-5.6.31-winx64.zip,将其解压,接下来的安装是通过命令来安装MySQL数据库的。(P.S. 5.7的版本会出问题,最好还是5.6的版本) (1)mysql-5.6.31-winx64.zip解压到E:JavaWebDeveloper文件下,打开...

18-MySQL DBA笔记-MySQL Server调优

第18章 MySQL Server调优 本章将为读者介绍针对MySQL Server的优化,这也是DBA最熟悉的领域之一。首先我们介绍MySQL的主要参数,然后,讲述常见硬件资源的优化。我们假设读者已经具备了足够的基础知识,所以,本章将更多的针对一些特定的主题进行叙述。18.1 概述 衡量数据库性能的指标,一般衡量数据库的性能有两个指标:响应时间和吞吐率。...

MySQL的WAL(WriteAhead Logging)机制

MySQL 里经常说到的 WAL技术,也就是先写日志,再写磁盘。 当内存数据页跟磁盘数据页内容不一致的时候,我们成这个内存页为“脏页”。内存数据写入磁盘后,内存和磁盘上的数据页内容就一致了,称为“干净页”。 MySQL 从 内存更新到磁盘的过程,称为刷脏页的过程(flush)。 InnoDB 刷脏页的时机: 内存中的redo log 写满了,这时系统...