/zz/MySQL数据库Concat和outfile函数妙用

大家有没有接触过这样的需求,采集历史数据库中或者其他数据库中的某些信息,这些信息是另一个服务器需要执行sql的条件。通常我们的处理手段是把这个信息通过sql找出来或导出,然后使用脚本或者手工拼凑新的新的sql语句。在很多紧急情况下(产品bug、数据错乱)会产生这样的需求,这个时候处理的是在线数据库,不能有一点马虎、如果数据量稍微大一点,DBA们就够焦头烂额了。我之前也多次遇见这种情况,我把一些经验介绍给大家。


其实这种情况下使用concat+out file会得到事半功倍的效果。
比如我们需要找到user表中昨天登录过的用户,然后修改修改他们的garbage中某个物品的属性。
由于数据库的结构,只记录用户最后一次登录的时间,所以当前的数据库中不能确定昨天哪些用户登录过。我们需要从备份中去挖出哪些用户昨天登录过,然后再

我们通常的做法是通过sql在备份数据中找到对应的用户id,然后导出到一个文件中,通过脚本来循环取id,自动生成要执行的sql,或者手工生成要执行的sql。
现在我们使用concat+out file来实现。

在重现备份数据的服务器上。

检查生成的文件以后,在线上服务器直接执行

这个语句还有一个妙用,用来杀掉processlist中的某些连接,索然maatkit提供了类似的工具,但是还是没有mysql自己来完成方便。

生成杀连接的语句,当然你可以使用where条件过滤某些类型的连接。