文章目录
- 1、原题
- 1.1、英文原题
- 1.2、中文翻译
- 1.3、答案
- 2、题目解析
- 2.1、题干解析
- 2.2、选项解析
- 2.2.1、选项A解析
- 2.2.2、选项B解析
- 2.2.3、选项C解析
- 2.2.4、选项D解析
- 2.2.5、选项E解析
- 3、知识点
- 3.1、知识点1:mysqlhotcopy
- 3.2、知识点2:mysqldumpslow,慢查询日志解析工具
- 3.3、知识点3:使用文件系统快照做InnoDB的一致性备份
- 3.4、知识点4:MySQL企业级备份工具
- 3.5、知识点5:mysqldump
- 4、总结
1、原题
1.1、英文原题
which two methods provide a consistent backup of InnoDB tables?
A. MySQL Enterprise Backup
B. file system snapshots
C. mysqlhotcopy
D. mysqldumpslow
E. mysqldump with --binary-data option
1.2、中文翻译
哪两种方法提供了InnoDB表的一致备份?
A. MySQL Enterprise Backup
B. file system snapshots
C. mysqlhotcopy
D. mysqldumpslow
E. mysqldump with --binary-data option
1.3、答案
A、B
2、题目解析
2.1、题干解析
2.2、选项解析
2.2.1、选项A解析
MySQL企业级备份工具是可以做一致性备份的,所以选项A正确。
2.2.2、选项B解析
基于文件系统快照是可以建立一致性备份的,所以选项B正确。
2.2.3、选项C解析
选项C错误,原因如下:
- mysqlhotcopy只能备份数据库目录下的表文件,而InnoDB不一定在数据库目录中存储表内容。
- 更为关键的是,mysqlhotcopy的本质是简单地通过复制所有的表文件来创建一个二进制备份,所以只能在服务器不在更新的时候才适合做备份。而对InnoDB来说,即使服务器没有主动更新数据,InnoDB仍然可能将修改过的数据缓存在内存中,并没有刷新到磁盘上。这时候通过对数据库目录做的备份是不一致的。所以mysqlhotcopy不适用于InnoDB。
2.2.4、选项D解析
mysqldumpslow是慢查询日志解析工具,和备份没有关系,所以选项D错误。
2.2.5、选项E解析
这里没有使用–single-transaction选项,所以不能保证一致性,所以选项E错误。
3、知识点
3.1、知识点1:mysqlhotcopy
mysqlhotcopy是一个Perl脚本,使用FLUSH TABLES、LOCK TABLES和cp或scp来做一个数据库备份。它是一个快速制作数据库或单个表的备份的方法。mysqlhotcopy的本质是简单地通过复制所有的表文件来创建一个二进制备份。但有如下局限性:
- 只能针对服务器不在做更新的时候,也就是只适合做冷备。
- 对InnoDB不起作用,因为InnoDB不一定在数据库目录中存储表内容。另外,即使服务器没有主动更新数据,InnoDB仍然可能将修改过的数据缓存在内存中,没有刷新到磁盘上。
3.2、知识点2:mysqldumpslow,慢查询日志解析工具
MySQL慢速查询日志包含关于需要长时间执行的查询的信息。 mysqldumpslow解析MySQL慢速查询日志文件并总结其内容。
3.3、知识点3:使用文件系统快照做InnoDB的一致性备份
可以使用数据库原始文件来创建一致性备份,方法如下:
- 获得一个读锁。
- 在一个单独的会话中,关闭源服务器:
$> mysqladmin shutdown
- 制作一份MySQL数据文件的副本。下面的例子显示了常见的方法。你只需要选择其中一种。
$> tar cf /tmp/db.tar ./data
$> zip -r /tmp/db.zip ./data
$> rsync --recursive ./data /tmp/dbdata
- 重新启动源服务器。
如果你不使用InnoDB表,你在这个过程中不需要关闭服务器,因为InnoDB会有更新数据在缓存。
3.4、知识点4:MySQL企业级备份工具
如果你使用InnoDB表,你可以使用MySQL企业备份组件的mysqlbackup命令来产生一个一致的快照。该命令记录了将在副本上使用的快照所对应的日志名称和偏移。MySQL企业备份是一个商业产品,作为MySQL企业订阅的一部分而包含。
3.5、知识点5:mysqldump
- mysqldump客户端工具执行逻辑备份,产生一组可以执行的SQL语句,以重现原始数据库对象定义和表数据。它转储一个或多个MySQL数据库,用于备份或转移到另一个SQL服务器。mysqldump命令还可以生成CSV、其他限定文本或XML格式的输出。
- mysqldump对于转储的表至少需要SELECT权限,对于转储的视图需要SHOW VIEW权限,对于转储的触发器需要TRIGGER权限,如果不使用–single-transaction选项,则需要LOCK TABLES,(从MySQL 5.7.31开始)如果不使用–no-tablespaces选项则需要PROCESS。
mysqldump的几个常用选项如下:
- –lock-tables, -l选项:在转储前锁定所有要被转储的表。因为 --lock-tables 是对每个表分别做锁定,所以这个选项并不能保证转储文件中的表在数据库之间逻辑上是一致的。不同数据库中的表可能以完全不同的状态被转储。所以对于InnoDB,–single-transaction是一个比–lock-tables更好的选择,因为它根本不需要锁定这些表。
- –single-transaction选项:这个选项将事务隔离模式设置为REPEATABLE READ,并在转储数据之前向服务器发送一条START TRANSACTION语句,不会阻塞任何应用程序。它只对InnoDB这样的事务表有用。当使用这个选项时,InnoDB表是以一致的状态被转储的。–single-transaction选项和–lock-tables选项是相互排斥的,因为LOCK TABLES会导致任何未决事务被隐式提交。
4、总结
- MySQL可以通过企业级备份工具实现一致性备份,也可以通过关闭服务器后再做文件系统快照做一致性备份,还可以通过mysqldump结合single-transaction选项做一致性备份。
- mysqlhotcopy只是简单拷贝数据目录下的表文件,不适合用于InnoDB表的一致性备份。