来源:自学PHP网 时间:2015-04-16 10:51 作者: 阅读:次
[导读] 由于公司业务和应用的调整,之前在Mysql中的很多表都不需要了,故需要对数据库进行整理。刚开始,我在想:不就删除一些表吗?很好解决,写个简单的脚本就可以了。我先看了数据...
由于公司业务和应用的调整,之前在Mysql中的很多表都不需要了,故需要对数据库进行整理。 刚开始,我在想:不就删除一些表吗?很好解决,写个简单的脚本就可以了。我先看了数据库中有80000多个表,很多表都是以IP命名的,而这些表就是要清理的对象。 于是我使用下面一条命令,先将所有表名导出到一个文件中: mysql -uroot -p123456 -A -e "use cdn;show tables;" >allDBName.txt 然后,执行:cat allDBName.txt|grep "^[0-9]\{1,3\}\.[0-9]\{1,3\}\.">ipDB.txt 将以IP开始的表名导入到ipDB.txt中。再使用如下脚本,进行删除。 #! /bin/bash exit 0 我在后台执行了以上脚本,也没看执行是否正确,个人感觉应该没问题了,于是就做其它事情去了。可是,一段时间后,我在information_schema数据库下,执行下列语句,查看数据库大小时,发现与删除表之前的数据库大小不减,反而增加了(实际环境中,正在跑着业务)。 select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as datasize from TABLES where table_schema='cdn'; 再看刚才脚本的目录下,多了一个drop.err文件,发现里面全是同一个错误: ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''192.168.1.30'' at line 1 我很疑惑,为什么会报错呢?于是我在终端中进入到数据库,执行: 于是,我将脚本中的 $DBname变成`$DBname`,但是中兴的时候,居然又报错了:command not found,仔细一想应该是双引号的问题,于是将引号改成单引号,胆码如下: #! /bin/bash exit 0 然后执行,没有再报错,问题应该解决了吧!可我一查看标的数量,居然还是没有变化,天理何在啊!没报错了,但怎么就没将表删除了。再仔细想想,原来是shell脚本中特殊字符的处理,改成以下就好了: #! /bin/bash 此时,再次执行,没报错,再看看表的数量,果然变少了。居然被几个符号搞了一天!唉!吸取点教训吧! |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com