woodongwong / notes

4 stars 0 forks source link

检查 MySQL 字段容量溢出 #77

Open woodongwong opened 1 year ago

woodongwong commented 1 year ago

如果你接手了一个垃圾项目,MySQL 表甚至有几百个,字段的类型很多都是varchar(100),偶尔发现存入的数据被截断,排查了半天发现是长度不够,那这个脚本可能能帮到你。

没错,我就是被这种项目折磨过,写了一个脚本用来检查哪些表的字段的数据已经溢出,代码简单,我放在了 gist :https://gist.github.com/woodongwong/4bcf9a792c15e0ffbd5a4e6271b0a269

用法:

pip3 install pymysql
python3 check_mysql_data_overflow.py -u myuser -H myserver.example.com -P 3306 -d mydatabase -t mytable -p

如果不指定-t则检查数据库所有的表。

输出:

The table news field content has overflowed its capacity, with a total of 2 data entries.

检查的原理很简单,统计字段的每行数据的长度,如果等于当前字段类型的长度,就判断为内容已经溢出。 检查的类型有 varbinary varchar blob text mediumblob mediumtext longblob longtext

注意:不建议在生产运行;如果数据量很大,不要运行;此脚本会扫描全表