我用inotify监控mysql数据文件的变化,存储引擎是InnoDB。当实际更新 InnoDB 文件中的数据时,inotify 将始终无法捕获任何事件。然而,当我将相同表的存储转换为 MyISAM 存储引擎时,一切都很顺利。
对正在发生的事情有什么想法吗?
最佳答案
我可以很好地监控 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
关于mysql - inotify 在 InnoDB 文件上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21709053/