1

我们为 MySQL(在 Linux 上)编写命令(通常为 PERL),这些命令有时会创建被遗忘的临时文件。我正在尝试编写一个可以删除已孤立文件的监视脚本。我不仅需要知道该文件不再使用,我可以通过操作系统调用来做到这一点,而且 MySQL 已经完全完成了它。

有人可以告诉我如何通过 PERL 或什至只是一个 SQL 命令(我可以弄清楚脚本方面)询问 MySQL 以确定 MySQL 是否完成了特定的临时表文件或当前正在使用它的进程。谢谢你。

4

1 回答 1

1

发出“显示进程列表;” 并专注于 id、db、command、state、info 列

让我们调用 perl 脚本 PERL 和清理 CLEANUP 的例程(通过 cron 或其他方式)。

如果您在 perl 脚本中将“select connection_id()”的输出保存到 id #59 等变量中,然后将其插入到带有时间戳的信息表中,即(id 和时间戳)然后洒在您的 PERL 代码中时不时地做同样的事情。

CLEANUP 可以做日期数学来知道外面的东西正在积极运行。如果时间戳是最近的,信息表会告诉它,是的,您的 PERL 例程之一是活动的

当 PERL 完成后,它可以删除该信息表中具有其连接 ID 的行(作为 1 个想法)。

通过这种方式,CLEANUP 可以知道是否有任何类似 PERL 的东西处于活动状态并采取必要的步骤进行清理

您可以通过另一个 CONTROL-TABLE 来增加它,PERL 试图获得一个 WRITE 锁(不一定会写入它,而只是一次尝试)。并且 CLEANUP 可以在尝试清理之前尝试获取 CONTROL-TABLE 上的写锁。当 PERL 完成时,它会释放写锁。如果它崩溃,锁就会消失。因此,CLEANUP 并不完全依赖于带有来自 PERL 的进程 ID 的信息表,而是像信号量一样。CLEANUP 将锁定该表,进行清理并阻止其他 PERLS 启动。您可以有 CLEANUP 的排他表锁和 PERL 的行级锁的变体,因此多个 PERLS 可以同时运行

于 2013-05-18T14:41:35.243 回答