找回失落的磁盘空间

今天遇到一个机器出错,日志显示是磁盘满。于是 df 一下,果然:

# df
Filesystem           1K-blocks      Used Available Use% Mounted on
...
/dev/sda2              4914492   4666144         0 100% /data

Available 是 0,但是,等等,为啥 Used 要小于 1K-blocks 呢?剩下的空间到哪里去了呢? 搜索了一下,原来对 ext2/ext3 文件系统,会保留一定比例空间给 root 用户,普通用户无法使用。所以就会有这样的结果。这个比例默认是 5% 。这样一来,就会有不少空间没法使用。如果想要从这里榨一点空间处理,可以用 tune2fs 。如:

tune2fs -m2 /dev/sda2

之后就会看到:

# df
Filesystem           1K-blocks      Used Available Use% Mounted on
...
/dev/sda2              4914492   4666068    148564  97% /data

这就榨出了 100 多 M 出来。如果分区大的话,这个空间还是很可观的。

给 mysql 系统表加上 trigger

默认情况下,mysql 是不能给系统表,例如 mysql.user 加上触发器的。会提示

ERROR 1465 (HY000): Triggers can not be created on system tables

但是还是可以有办法绕过这个限制。

在其他 db 里另外建一个结构名字一样的表,例如

create table test.user like mysql.user

然后在那个表上建好触发器。这样会在数据库目录中生成 “表名.TRG” 文件。把这个文件拷贝到 mysql 库的目录中,确认访问权限没问题后,重启一下 mysql ,触发器就可以生效了。