inoify在InnoDB文件上失败

时间:2014-02-11 17:38:27

标签: mysql innodb inotify

我使用inotify来监视对mysql数据文件的更改,而存储引擎是InnoDB。当实际更新InnoDB文件中的数据时,inotify将始终无法捕获任何事件。但是,当我将相同表的存储转换为MyISAM存储引擎时,一切都像魅力一样。

关于发生了什么的任何想法?

3 个答案:

答案 0 :(得分:1)

我可以监控InnoDB表空间:

$ inotifywatch -v -t 60 -r /var/lib/mysql/data/*

. . .

Finished establishing watches, now collecting statistics.
Will listen for events for 60 seconds.
total  access  modify  close_nowrite  open  filename
21     12      0       4              5     /var/lib/mysql/data/test/
3      1       0       1              1     /var/lib/mysql/data/imdb/
3      1       0       1              1     /var/lib/mysql/data/performance_schema/
2      0       2       0              0     /var/lib/mysql/data/ibdata1
2      0       2       0              0     /var/lib/mysql/data/ib_logfile0
1      0       1       0              0     /var/lib/mysql/data/mysqld-bin.000017

我做了一些测试,似乎当我有innodb_flush_method=O_DIRECT时,我使用像INSERT这样的DML来更改数据,inotify不报告它。

但是当我禁用O_DIRECT并允许InnoDB I / O通过文件系统缓冲区时,inotify会报告对.ibd文件的DML更改。


其他细节:

Linux distro: CentOS 6.5
Linux kernel version: 2.6.32
inotify version: 3.14
Filesystem for MySQL datadir: xfs

答案 1 :(得分:1)

我假设您使用的是innodb_flush_method = O_DIRECT,它在打开文件时使用O_DIRECT标志。我认为inotify不能与O_DIRECT一起使用,但无法快速找到确认。

答案 2 :(得分:0)

在标准MySQL服务器配置下,InnoDB使用一组数据文件(ibdata1等)来存储服务器管理的所有InnoDB表的数据。数据库目录中的文件仅用于存储元数据,例如列布局。此外,InnoDB缓冲对这些数据文件的写入。对数据库的更改不一定与对InnoDB数据文件的写入相对应。

如果要查看数据库表以进行修改,请使用MySQL触发器。