1、原题
1.1、英文原题
1.2、答案
C、E
2、题目解析
2.1、题干解析
本题考察二进制日志文件的删除。
2.2、选项解析
- 可以通过PURGE BINARY LOGS删除已不需要的二进制日志文件(既不需要用来恢复,也没有SLAVE需要基于这个文件进行复制)。删除前务必通过SHOW SLAVE STATUS确认该日志文件在各个SLAVE都用不到了,并且最好做个备份。所以选项C和E是正确的。
3、知识点
3.1、知识点1:删除二进制日志和PURGE BINARY LOGS语句
- PURGE BINARY LOGS 语句会删除了在指定的日志文件名称或日期之前、并在日志索引文件中列出的所有二进制日志文件。BINARY和MASTER是同义词。被删除的日志文件也会从索引文件中记录的列表中删除,这样,给定的日志文件就成为列表中的第一个。BEFORE变量的datetime_expr参数应该为一个DATETIME值(一个’YYYY-MM-DD hh:mm:ss’格式的值)。
- 语法:
PURGE { BINARY | MASTER } LOGS {
TO 'log_name'
| BEFORE datetime_expr
}
- 示例:
PURGE BINARY LOGS TO 'mysql-bin.010';
PURGE BINARY LOGS BEFORE '2019-04-02 22:46:26';
- PURGE BINARY LOGS需要BINLOG_ADMIN权限。如果服务器在启动时没有使用-log-bin选项来启用二进制日志,则该语句没有效果。
- 如果有一个SLAVE目前正在读取你试图删除的一个日志文件,PURGE语句不会删除正在使用的日志文件或比它晚的任何日志文件,但它会删除任何早期的日志文件。但如果运行PURGE语句时凑巧有个SLAVE没有连接,那么被清除的日志文件可能导致SLAVE无法正常复制。所以在运行PURGE语句时要确认所有SLAVE的复制进度,不会用到即将被删除的日志文件。
- 要安全地清除二进制日志文件,请遵循以下程序。
- 在每个副本上,使用SHOW SLAVE STATUS来检查它正在读取哪个日志文件。
- 用SHOW BINARY LOGS获得复制源服务器上的二进制日志文件的列表。
- 确定所有副本中最早的日志文件。这就是目标文件。
- 对你要删除的所有日志文件做一个备份。(这一步是可选的,但总是建议的)。
- 清除所有的日志文件,直到但不包括目标文件。
- PURGE BINARY LOGS TO和PURGE BINARY LOGS BEFORE在.index文件中列出的二进制日志文件已经通过其他方式从系统中删除时(例如在Linux上使用rm),都会出现错误。要处理这样的错误,可以手动编辑.index文件(这是一个简单的文本文件),确保它只列出实际存在的二进制日志文件,然后重新运行失败的PURGE BINARY LOGS语句。
4、总结
- 可以通过PURGE BINARY LOGS删除已不需要的二进制日志文件(既不需要用来恢复,也没有SLAVE需要基于这个文件进行复制)。删除前务必通过SHOW SLAVE STATUS确认该日志文件在各个SLAVE都用不到了,并且最好做个备份。