欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 由于公司业务和应用的调整,之前在Mysql中的很多表都不需要了,故需要对数据库进行整理。 刚开始,我在想:不就删除一些表吗?很好解决,写个简单的脚本就可以了。我先看了数据库中有80000多个表,很
欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入
由于公司业务和应用的调整,之前在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的左边的字符,试了一下,果然成功了。
于是,我将脚本中的 $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的相关知识,其中主要介绍了关于架构原理的相关内容,MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层,下面一起来看一下,希望对大家有帮助。

在mysql中,可以利用char()和REPLACE()函数来替换换行符;REPLACE()函数可以用新字符串替换列中的换行符,而换行符可使用“char(13)”来表示,语法为“replace(字段名,char(13),'新字符串') ”。

mysql的msi与zip版本的区别:1、zip包含的安装程序是一种主动安装,而msi包含的是被installer所用的安装文件以提交请求的方式安装;2、zip是一种数据压缩和文档存储的文件格式,msi是微软格式的安装包。

方法:1、利用right函数,语法为“update 表名 set 指定字段 = right(指定字段, length(指定字段)-1)...”;2、利用substring函数,语法为“select substring(指定字段,2)..”。

转换方法:1、利用cast函数,语法“select * from 表名 order by cast(字段名 as SIGNED)”;2、利用“select * from 表名 order by CONVERT(字段名,SIGNED)”语句。

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于MySQL复制技术的相关问题,包括了异步复制、半同步复制等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了mysql高级篇的一些问题,包括了索引是什么、索引底层实现等等问题,下面一起来看一下,希望对大家有帮助。

在mysql中,可以利用REGEXP运算符判断数据是否是数字类型,语法为“String REGEXP '[^0-9.]'”;该运算符是正则表达式的缩写,若数据字符中含有数字时,返回的结果是true,反之返回的结果是false。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

SublimeText3汉化版
中文版,非常好用

记事本++7.3.1
好用且免费的代码编辑器

Dreamweaver Mac版
视觉化网页开发工具