一个批量删除大表数据的shell小脚本
2012-04-09 17:43
531 查看
通常我们在删除线上的大表数据的时候,如果超过一定数目就不能直接删除,否则可能会造成数据库长时间锁定或者直接导致服务器挂掉。合理的做法应该是分多批次删除,比如下面脚本中是每次删除1000行,然后休息10s种后继续删除。
点击(此处)折叠或打开
#Purpose: 批量删除大表的数据,减少对线上数据的影响,每次删除1000行数据,然后sleep 10
#Author: Carl Zhang
#Date: 2012-04-09
#Useage: ./delete_bigtable_data.sh 'DELETE FROM test.test WHERE test.datetime <="2012-04-09 00:00:00"'
MYSQL='/usr/local/mysql/bin/mysql'
USER='root'
HOST='localhost'
PASSWORD='zhang@123'
if [ $# -ne 1 ];then
echo "Usage: ./delete_bigtable_data.sh 'DELETE_SQL'"
echo "For example: ./delete_bigtable_data.sh 'DELETE FROM test.test WHERE test.datetime <="2012-04-09 00:00:00"'"
echo "Please try again"
exit 1
fi
DELETE_SQL=$1
echo "DELETE_SQL is $DELETE_SQL"
SELECT_SQL=`echo $DELETE_SQL|sed 's/;$//;s/^\w*/SELECT */;s/$/ LIMIT 1/;s/.*/select count(1) from (&) a/'`
echo "SELECT_SQL is $SELECT_SQL"
LAST_SQL=`echo $DELETE_SQL |sed 's/;$//;s/$/ LIMIT 1000/'`
echo "LAST_SQL is $LAST_SQL"
while [ `$MYSQL -u$USER -p$PASSWORD -h$HOST -ss -e "$SELECT_SQL"` -gt 0 ];do
echo "deleting 1000 rows,please wait"
$MYSQL -u$USER -p$PASSWORD -h$HOST -ss -e "$LAST_SQL"
echo "sleep 10"
sleep 10
done
点击(此处)折叠或打开
#Purpose: 批量删除大表的数据,减少对线上数据的影响,每次删除1000行数据,然后sleep 10
#Author: Carl Zhang
#Date: 2012-04-09
#Useage: ./delete_bigtable_data.sh 'DELETE FROM test.test WHERE test.datetime <="2012-04-09 00:00:00"'
MYSQL='/usr/local/mysql/bin/mysql'
USER='root'
HOST='localhost'
PASSWORD='zhang@123'
if [ $# -ne 1 ];then
echo "Usage: ./delete_bigtable_data.sh 'DELETE_SQL'"
echo "For example: ./delete_bigtable_data.sh 'DELETE FROM test.test WHERE test.datetime <="2012-04-09 00:00:00"'"
echo "Please try again"
exit 1
fi
DELETE_SQL=$1
echo "DELETE_SQL is $DELETE_SQL"
SELECT_SQL=`echo $DELETE_SQL|sed 's/;$//;s/^\w*/SELECT */;s/$/ LIMIT 1/;s/.*/select count(1) from (&) a/'`
echo "SELECT_SQL is $SELECT_SQL"
LAST_SQL=`echo $DELETE_SQL |sed 's/;$//;s/$/ LIMIT 1000/'`
echo "LAST_SQL is $LAST_SQL"
while [ `$MYSQL -u$USER -p$PASSWORD -h$HOST -ss -e "$SELECT_SQL"` -gt 0 ];do
echo "deleting 1000 rows,please wait"
$MYSQL -u$USER -p$PASSWORD -h$HOST -ss -e "$LAST_SQL"
echo "sleep 10"
sleep 10
done
相关文章推荐
- 为什么分次批量删除一个带索引的大表里的数据会慢
- 用户管理(二):使用shell脚本批量删除除root用户以外的其它用户
- 通过shell批量检测集群跑数据是否异常脚本
- Linux 下Shell脚本回滚删除数据 推荐
- shell脚本――批量增加、删除、重命名当前目录下所有文件名后缀
- 一个批量重命名文件名的shell脚本
- 简单问题-Sequoiadb数据库脚本批量删除数据
- 用shell脚本在mysql表中批量插入数据的方法
- 写了一个Linux下批量添加用户的shell脚本
- Linux下使用Shell脚本删除一个目录下的所有子目录和文件
- 使用shell脚本往数据库批量插入数据和执行sql
- 程序员(媛)Shell脚本必备技能之中的一个: 在Linux下怎样自己主动备份mysql数据
- Linux系统的rm命令太危险,一不小心就会删除系统文件。写一个shell脚本来替换系统的rm命令,
- sqlserver 根据一个泛型id查询数据,批量删除数据
- 一个用于批量下载网络图片的Shell脚本
- HBase shell执行脚本(批量添加数据)
- 批量删除一些数据的一个存储过程
- 一个用于批量下载网络图片的Shell脚本
- Shell脚本实现数据父子关系定义——目标:将目标数据批量导入MySQL数据库
- 批量删除用户--Shell脚本