由于公司业务和应用的调整,之前在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
 
   cat ipDB.txt|while read DBname
 
   do
 
   mysql -uroot -p123456 -A -e "use cdn;DROP TABLE IF EXISTS $DBname;" 2》drop.err
 
   if [ $? -ne 0 ] ;then
 
   echo "Drop $DBname failed"
 
   fi
 
   done
 
   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
 
   我很疑惑,为什么会报错呢?于是我在终端中进入到数据库,执行:
 
   DROP TABLE IF EXISTS '192.168.1.30';
 
   可是还是报相同的错误,我很是疑惑。WHY?根本就没道理啊,没有语法错误啊!后来仔细一想,感觉不对:表名里面的点一概失算特殊字符,可能是这个问题。于是我查阅了一些资料,遇到这种问题的解决方法是:把表名放到``里面,注意`是跟字母在一起的数字1的左边的字符,试了一下,果然成功了托福答案 www.qcwy123.com
 
   于是,我将脚本中的 $DBname变成`$DBname`,但是中兴的时候,居然又报错了:command not found,仔细一想应该是双引号的问题,于是将引号改成单引号,胆码如下:
 
   #! /bin/bash
 
   cat ipDB.txt|while read DBname
 
   do
 
   mysql -uroot -p123456 -A -e 'use cdn;DROP TABLE IF EXISTS `$DBname`;' 2》drop.err
 
   if [ $? -ne 0 ] ;then
 
   echo "Drop $DBname failed"
 
   fi
 
   done
 
   exit 0
 
   然后执行,没有再报错,问题应该解决了吧!可我一查看标的数量,居然还是没有变化,天理何在啊!没报错了,但怎么就没将表删除了。再仔细想想,原来是shell脚本中特殊字符的处理,改成以下就好了:
 
   #! /bin/bash
 
   cat ipDB.txt|while read DBname
 
   do
 
   mysql -uroot -p123456 -A -e "use cdn;DROP TABLE IF EXISTS \`$DBname\`;" 2》drop.err
 
   if [ $? -ne 0 ] ;then
 
   echo "Drop $DBname failed"
 
   fi
 
   done
 
   exit 0
 
   此时,再次执行,没报错,再看看表的数量,果然变少了。居然被几个符号搞了一天!唉!吸取点教训吧!

Mysql删除表名中有特殊字符的表的更多相关文章

  1. MySQL ALTER命令-修改数据表名或者修改数据表字段

    需要修改数据表名或者修改数据表字段时,就需要使用到MySQL ALTER命令. 删除,添加或修改表字段 如下命令使用了 ALTER 命令及 DROP 子句来删除表的 i 字段: ALTER TABLE ...

  2. sqlite 查询数据库中所有的表名,判断某表是否存在,将某列所有数值去重后获得数量

    1.列出当前db文件中所有的表的表名 SQL语句:SELECT * FROM sqlite_master WHERE type='table'; 结构如下: 注:网上有人说可以带上db文件的名称,如: ...

  3. SQL表名,应该用表对应资源对象的复数形式还是单数形式

    原文:http://blog.csdn.net/lizeyang 问题 SQL表名,应该用表对应资源对象的复数形式还是单数形式.例如一个用户表,表名是用user还是users更合适呢?   精华回答 ...

  4. 让 MySQL 在 Linux 下表名不区分大小写(实为表名全小写)

    把 Windows 下的应用部署到 Linux 下,使用到了 Quartz 集群的特性,所以建了 MySql 的中间表,一启动看到报错: Invocation of init method faile ...

  5. 查询MySQL中某个数据库中有多少张表

    SELECT COUNT(*) TABLES, table_schema FROM information_schema.TABLES   WHERE table_schema = '数据库' GRO ...

  6. linux中mysql表名默认区分大小写导致表找不到的问题

    天将window的项目迁移到linux上面,然后登录时一直报用户表找不到的错误信息. 检查发现数据库中的表名是m_user, 后来才想起来是大小写问题, 找到问题原因,解决方案如下: 修改/etc/m ...

  7. ZT:在mybatis的Mapping文件写入表名 出现异常ORA-00903: 表名无效 的解决

    简而言之,把#{tablename}换成${tablename}就能解决问题. 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:htt ...

  8. mysql查询一个库中有多少张表

    SELECT COUNT(*) TABLES, table_schema FROM information_schema.TABLES  WHERE table_schema = 'palm_2_0_ ...

  9. mysql 删除以某字符串开头的表

    Select 'SET FOREIGN_KEY_CHECKS = 0;'unionSelect CONCAT( 'drop table ', table_name, ';' )FROM informa ...

随机推荐

  1. 哈希集合——hashSet

    /**     哈希集合特点:存取顺序不确定,同一个哈希值的位置可以存放多个元素,                   哈希集合存放元素的时候是先判断哈希地址值:hashCode()是否相同,如果不同 ...

  2. Intention Locks 意向锁

    Intention Locks 意向锁 InnoDB 支持多颗粒度锁定允许row-level locks和锁整个表共存. 为了使锁在多个颗粒级别实现, 额外类型的锁被称为意向锁是被使用. . Inte ...

  3. LU分解(2)

    接着上次LU分解的讲解,这次给出使用不同的计算LU分解的方法,这种方法称为基于GaxPy的计算方法.这里需要了解lapapck中的一些函数.lapack中有一个函数名为gaxpy,所对应的矩阵计算公式 ...

  4. H - Food - hdu 4292(简单最大流)

    题目大意:有N个人,然后有F种食品和D种饮料,每个人都有喜欢的饮料和食品,求出来这些食品最多能满足多少人的需求. 输入描述: 分析:以前是做过类似的题目的,不过输入的信息量比较大,还是使用邻接表的好些 ...

  5. xml中不能直接添加ViewGroup

    我知道可以直接添加一个<View />的,今天想添加个容器类,然后后台动态添加SurfaceView到ViewGroup容器里,不过提示inflate报错了.难道ViewGroup不能直接 ...

  6. UITouch附加

    框架 /System/Library/Frameworks/SpriteKit.framework 可用性 可用于iOS 7.0或者更晚的版本 声明于 SKNode.h 概览 重要提示:这是一个初步的 ...

  7. 【原创】车载实时路况信息接收终端移植于Smart210开发板 --- 综合教程

    [原创]车载实时路况信息接收终端移植于Smart210开发板 --- 综合教程 所用工具: windows电脑 Ubuntu12.04 Smart210开发板 4g以上SD卡 U盘 步骤: 1.    ...

  8. 1033 - Merging Maps

    Pictures taken from an airplane or satellite of an ar ea to be mapped are often of sufficiently high ...

  9. PHP5.4新特性(转)

    PHP5.4正式前两天发布了,之前有看了一些PHP5.4主要特性相关文章,因此在这里小结一下. 其中好几点更新是由Laruence贡献的!本文部分内容也是源自Laruence的博客. 1. Buid- ...

  10. [转] PostgreSQL学习手册(数据表)

    from: http://www.cnblogs.com/stephen-liu74/archive/2012/04/23/2290803.html 一.表的定义: 对于任何一种关系型数据库而言,表都 ...