当发布 ALTER TABLE 语句时,服务器对 tbl_name.frm 重新编码并修改数据文件和索引文件的内容以反映由该语句表明的结构变化。对于 CREATE 和 DROP INDEX 也是如此,因为服务器认为它们等价于 ALTER TABLE 语句。DROP TABLE 删除代表该表的三个文件。
常规进程提供有关服务器运作的常规信息:谁从哪里进行了连接,以及他们发布了什么查询。更新日志也提供查询信息,但仅仅是修改过的数据库内容的查询信息。更新日志的内容是一些 SQL 语句,这些语句可以通过将它们输入到 mysql 客户机程序来运行。如果出现崩溃且必须转到备份文件时,更新日志将是有用的,因为您能够通过将更新日志输入到服务器来重复这些自崩溃以来所完成的更新操作。这将使得数据库恢复到崩溃发生时所处的状态上。
下面是一个实例,它是作为一个短客户机会话的结果出现在常规日志中的信息中的,这个会话在 test 数据库中从mytest.pet复制一个表,并插入一行到该表中,然后删除该表:
use test; create table mytest select * from mytest.pet; insert into mytest set name='tom',owner='jerry',species='cat',sex='f',birth='2000-01-01'; drop table mytest;
更新纪录中没有记录错误的语句,因此对于恢复被破坏的数据库内容非常有意义。
对于更新日志,日志的扩展格式是可用的,即使是用 --log - long - format 选项。扩展的日志提供有关谁何时发布查询的信息。当然,这将使用更多的磁盘空间,但是,如果您不将更新日志的内容与常规日志中的连接事件相联系就想知道谁正在做什么的话,扩展日志或许是可用的。
状态文件出现在数据目录的最高级,就像数据库目录一样,因此您可能会想到那些文件的名字是否会相互混淆或者被误认为是数据库名(例如,当服务器正在执行 SHOW DATABASE 语句时)。答案是:不会的。状态和日志信息存储在文件中,而数据库是目录,因此可执行程序可以将它们与一个简单的 stat() 调用相区别(是服务器告诉它们怎样区分的)。如果您正在监视数据目录,则可以通过使用 ls -l 将状态文件从数据库目录中区分开来,并且检查该模式信息的第一个字符以查看它是‘-’还是‘d’: