背景
MySQL 在 26 日 16:23:49 产生了大量的慢查询, 在这段时间内, binlog 文件刷新的很快 (查看慢日志是 MySQL DML 并发比较多), 想知道写完一个 binlog 文件究竟花了几分钟时间?
分析
三个 binlog 文件的最后修改间隔时间分别是 2 分钟和 1 分钟
同一个事务只能写同一个 binlog 文件
MySQL-bin.016126 文件的最后修改时间 16:22 不一定是 MySQL-bin.016127 文件创建的时间 (存在大事务的情况下, 大事务还在写上一个 binlog 文件, 新的事务已经在写新创建的 binlog 文件了)
使用 mysqlbinlog 可以读取 binlog 文件中的 event, 知道文件的创建时间
在 Linux 下, 是否有命令可以查出文件的创建时间了?
方法
1, 使用 stat 命令
- stat MySQL-bin.016126
- File: 'mysql-bin.016126'
- Size: 262146609 Blocks: 512016 IO Block: 4096 regular file
- Device: fd02h/64770d Inode: 135529302 Links: 1
- Access: (0640/-rw-r-----) Uid: ( 5701/actiontech-MySQL) Gid: ( 5701/actiontech-MySQL)
- Access: 2019-04-28 14:41:42.967043003 +0800
- Modify: 2019-04-26 16:24:21.823932020 +0800
- Change: 2019-04-26 16:24:21.823932020 +0800
1, 访问时间, 读一次这个文件的内容, 这个时间就会更新. 比如对这个文件运用 more,cat 等命令. ls,stat 命令都不会修改文件的访问时间
2, 修改时间, 修改时间是文件内容最后一次被修改时间. 比如: vi 后保存文件. ls -l 列出的时间就是这个时间
3, 状态改动时间. 是该文件的 i 节点最后一次被修改的时间, 通过 chmod,chown 命令修改一次文件属性, 这个时间就会更新
如果文件创建后就没有修改过, 修改时间 = 创建时间; 如果文件创建后, 状态就没有改变过, 那么状态改变时间 = 创建时间; 如果文件创建后, 没有被读取过, 那么访问时间 = 创建时间. 对使用过的文件, 这些基本不太可能
2, 使用 debugfs
获取 binlog 文件存放根文件目录
- grep 'datas' /etc/fstab
- /dev/mapper/CentOS-datas /datas ext4 defaults 1 2
得到 binlog 文件 inode 号
- ls -i MySQL-bin.016127
- 135529232 MySQL-bin.016127
得到文件创建时间
- debugfs -R 'stat <135529232>' /dev/mapper/CentOS-datas
- debugfs 1.42.9 (28-Dec-2013)
- Inode: 135529232 Type: regular Mode: 0640 Flags: 0x80000
- Generation: 2396969921 Version: 0x00000000:00000001
- User: 5701 Group: 5701 Size: 262147164
- File ACL: 0 Directory ACL: 0
- Links: 1 Blockcount: 512016
- Fragment: Address: 0 Number: 0 Size: 0
- ctime: 0x5cc2c082:47dcd9bc -- Fri Apr 26 16:25:38 2019
- atime: 0x5cc55c49:2929fd18 -- Sun Apr 28 15:54:49 2019
- mtime: 0x5cc2c082:47dcd9bc -- Fri Apr 26 16:25:38 2019
- crtime: 0x5cc2c035:c470d1d0 -- Fri Apr 26 16:24:21 2019
- Size of extra inode fields: 28
- EXTENTS:
crtime 即为文件创建时间
crtime 和 mtime 文件最后修改时间差 1 分 17 秒
MySQL 写完一个 binlog 文件用时 1 分多钟
注意
xfs 文件系统不支持用 debugfs 来查看文件的创建时间
- grep root /etc/fstab
- /dev/mapper/CentOS-root / xfs defaults 1 1
- ls -i /test1
- 357556 /test1
- debugfs -R 'stat <357556>' /dev/mapper/CentOS-root
- debugfs 1.42.9 (28-Dec-2013)
- /dev/mapper/CentOS-root: Bad magic number in super-block while opening filesystem
- stat: Filesystem not open
来源: http://www.linuxidc.com/Linux/2019-07/159526.htm