1、MySQL 数据库提供查看二进制日志 binlog 内容的命令是 mysqlbinlog,常用的命令如下:mysqlbinlog -vv bin.000668 | less mysqlbinlog -vv bin.000668 --start-datetime="2023-11-16 14:15:00" --stop-datetime="2023-11-16 14:15:00" | less 但有时会出现错误:mysqlbinlog: Error ...
与mysqlbinlog命令使用相关的2个小问题
1、MySQL 数据库提供查看二进制日志 binlog 内容的命令是 mysqlbinlog,常用的命令如下:
mysqlbinlog -vv bin.000668 | less
mysqlbinlog -vv bin.000668 --start-datetime="2023-11-16 14:15:00" --stop-datetime="2023-11-16 14:15:00" | less
但有时会出现错误:mysqlbinlog: Error writing file '/tmp/tmp.wOdzVS' (Errcode: 28 - No space left on device)
错误原因:binlog 解析后内容过大,导致 mysqlbinlog 默认解析后的临时文件存放路径 /tmp 空间不足。
解决方法:解析前手动指定临时文件存放路径,保证空间足够,注意参数 TMPDIR,不能用小写,如下:export TMPDIR=/opt/mysql3306/tmp
mysqlbinlog -vv bin.000668 | less
2、在查看 binlog 或者 mysqldump 导出 sql 文本时,经常看到如下格式的注释语句:
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE */
/*!80000 SET SESSION information_schema_stats_expiry=0 */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
对后面跟的5位数字好奇吗?binlog 为什么需要这串数字?
这5位数字是 MySQL 版本指示器,与数据库版本的对应规则为:'/' '*' '!', 后跟主版本号(VERSION_MAJOR)、小版本号(VERSION_MINOR)、Patch号(VERSION_PATCH)。
示例:32302 -> 3.23.02,50738 -> 5.7.38,80025 -> 8.0.25。
例如,第一个注释语句的含义是:当 MySQL 数据库版本为 5.0.3 或更高版本时,将 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE 读取出来参与 SQL 语法解析,并最终被执行;当版本低于 5.0.3 时,该行语句被当成一个普通的注释。
带 /*!version-number SQL*/ 的可执行注释是为了解决不同 MySQL 版本之间的兼容问题。2024-08-10