MySQL清理千万级表数据脚本

一、脚本

cat clean_data.sh
#!/bin/bash

#定义数据库连接信息
username="xxxxx"
password="xxxxx"
host="xxxxx"
port="xxxxx"
database="xxxxx"

#定义要删除的历史数据周期
d=`date -d "30 days ago" + "%Y-%m-%d"`
table="${1}"
start_num=${2}
end_num=${3}
limit=${4}

#删除历史数据
for i in $(seq -w $start_num $end_num)
do
        t=${database}.${tables}${i}
		echo ${t}
		row_count=1
		sql_str="set session ob_query_timeout=10000000000;delete from ${t} where gmt_create<'${d}' limit ${limit};select row_count()"
        echo "sql_str: ${sql_str}"
		while [ $row_count -gt 0 ];do
        s_time=$(date +%s)
        row_count=$(mysql -u${username} -h${host} -p${password} -P${port} -Nse "${sql_str}")
		e_time=$(date +%s)
        elapsed=$(( e_time - s_time ))
            if [ $? -ne 0 ];then
			    echo "row_count:${row_count},time:${elapsed}s"
				exit
		    fi
		    echo "delete:${row_count},time:${elapsed}s"
		    sleep 1
		done
done

二、用例

#可以开启多个进程,并行删除(生产环境千万不能打爆CPU,内存)
sh clean_data.sh test 001 029 200000
sh clean_data.sh test 030 059 200000
sh clean_data.sh test 060 089 200000
sh clean_data.sh test 090 099 200000
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CN-FuWei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值