shell脚本 安全删除MySQL大表
一.简介
日期:2018/4/12
介绍:工具用于安全删除MySQL表,对于一些特定场景可能有用
应用场景:大批删除不走索引但是有主键的场景[可以是单列索引,也可是多列索引]
实现思路:根据where条件获取到主键值,然后重新拼接SQL
注:本工具仅用于学习,如用于生产,请充分测试
效果图:

二.使用
适用:centos6+
语言:中文
注意:必须有主键或者非空唯一索引
1.下载
git clone https://gitee.com/mo-shan/safe_delete.git
cd safe_delete
2.配置,将这里的mysql_path改成mysql工具的绝对路径,否则可能会因版本太低导致错误
ed -i 's#^mysql_path=.*#mysql_path=\"/mysqlbinlog_path\"#g' bin/safe_delete
将这里的safe_delete_path改成safe_delete的家目录的绝对路径
sed -i 's#^work_dir=.*#work_dir=\"/safe_delete_path\"#g' bin/safe_delete
3.帮助手册
bash bin/safe_delete -h
4.使用演示
查看表,删除手机号是“00175731528296189904”的数据,手机号不是索引字段
mysql(test@localhost mysqld.sock)> show create table wechat_binding \G
*************************** 1. row ***************************
       Table: wechat_binding
Create Table: CREATE TABLE `wechat_binding` (
  `id` int(20) NOT NULL AUTO_INCREMENT,
  `user_id` bigint(20) DEFAULT NULL COMMENT '用户ID',
  `sales_id` varchar(80) DEFAULT NULL COMMENT '销售编号',
  `open_id` varchar(45) NOT NULL COMMENT 'openID',
  `type` int(2) NOT NULL COMMENT '1 销售,2 用户',
  `phone` varchar(20) NOT NULL COMMENT '手机号',
  `create_time` datetime NOT NULL COMMENT '绑定时间',
  PRIMARY KEY (`id`,`open_id`,`type`),
  KEY `openIdIdx` (`open_id`) USING BTREE,
  KEY `phoneIdx` (`phone`) USING BTREE,
  KEY `salesIdIndex` (`sales_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=5000001 DEFAULT CHARSET=utf8
1 row in set (0.03 sec)
test的功能
bash bin/safe_delete --table=wechat_binding --database=test --count=2000 --time=1 --pri-name=id,open_id,type --where="phone='00175731528296189904'"  --user=test --host=127.0.0.1 --port=3311 --type=test
get的功能
bash bin/safe_delete --table=wechat_binding --database=test --count=2000 --time=1 --pri-name=id,open_id,type --where="phone='00175731528296189904'"  --user=test --host=127.0.0.1 --port=3311 --type=get
delete的功能
bash bin/safe_delete --table=wechat_binding --database=test --count=2000 --time=1 --pri-name=id,open_id,type --where="phone='00175731528296189904'"  --user=test --host=127.0.0.1 --port=3311 --type=delete
shell脚本 安全删除MySQL大表的更多相关文章
- centos下shell脚本kill掉mysql锁表进程【笔记】
		前几天发现服务器上的mysql出现锁表了,show processlist后发现好多都是因为写进session才锁表的,看到这个想起了会不会是硬盘空间不够了,马上查看了服务器硬盘空间,发现都100%了 ... 
- MySQL大表DROP删除小技巧(转)
		在日常工作中,经常会遇到历史大表从主库上迁移到备份机,以便腾出主库空间,那么如果你直接drop table 后,可能会引起数据库抖动,连接数升高等问题,从而影响业务. 那么用一个小技巧,即可轻松平滑的 ... 
- Shell脚本中执行mysql的几种方式(转)
		Shell脚本中执行mysql的几种方式(转) 对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用 ... 
- shell脚本循环执行mysql语句
		参考资料:Shell脚本中执行mysql语句 需求:数据库里有张数据表存储的是用户对电影的评价(user_id movie_id rating time),但是我现在要每部电影的总评分. 解决方法: ... 
- Centos 6.4上面用Shell脚本一键安装mysql 5.6.15
		Centos 6.4上面用Shell脚本一键安装mysql 5.6.15 #!/bin/bash if [ `uname -m` == "x86_64" ];then machi ... 
- [记录]一则清理MySQL大表以释放磁盘空间的案例
		一则清理MySQL大表以释放磁盘空间的案例 一.基本情况: 1.dbtest库554G,先清理st_online_time_away_ds(37G)表的数据,保留半年的数据: 1)删除的数据:sele ... 
- 优秀后端架构师必会知识:史上最全MySQL大表优化方案总结
		本文原作者“ manong”,原创发表于segmentfault,原文链接:segmentfault.com/a/1190000006158186 1.引言 MySQL作为开源技术的代表作之一,是 ... 
- MySQL 大表优化方案(长文)
		当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ... 
- 利用Linux的硬连接删除MySQL大文件
		利用Linux的硬连接删除MySQL大文件 http://blog.csdn.net/wxliu1989/article/details/22895201 原理:硬链接基础当多个文件共同指向同一ino ... 
随机推荐
- 架构小试之IDL
			本文转载自我自己的博客,感兴趣的老爷们可以关注~:https://www.miaoerduo.com/2021/11/16/arch-idl/ 为什么IDL的介绍也放在这里呢?一方面是我想不到放哪里, ... 
- 【从头到脚品读 Linux 0.11 源码】第一回 最开始的两行代码
			从这一篇开始,您就将跟着我一起进入这操作系统的梦幻之旅! 别担心,每一章的内容会非常的少,而且你也不要抱着很大的负担去学习,只需要像读小说一样,跟着我一章一章读下去就好. 话不多说,直奔主题.当你按下 ... 
- [Aizu2993]Invariant Tree
			若$(i,j)\in E$,实际上会不断推出$(p_{i},p_{j})\in E,(p_{p_{i}},p_{p_{j}})\in E,...$ 考虑将$i$向$p_{i}$连边得到了一张(由若干个 ... 
- [loj3300]组合数问题
			将$f(k)=\sum_{i=0}^{m}a_{i}k^{i}$转换为$f(k)=\sum_{i=0}^{m}b_{i}k^{\underline{i}}$,其中$k^{\underline{i}}= ... 
- vagrant创建centos7后虚拟机磁盘爆满
			1.问题现象 使用df -h命令,磁盘占用直接99%,明明啥也没干... 2.解决方案 找到C:\Users\你的用户名\.vagrant.d\boxes\centos7\0\virtualbox目 ... 
- Electron快速入门之事件
			const { app, BrowserWindow } = require('electron') function createWindow () { const win = new Brow ... 
- Matlab指针
			Matlab指针 第一印象貌似是Matlab中不存在指针,所有变量与函数的赋值都是按值传递的,不会对参数进行修改.其实Matlab提供了handle类作为指针代替品.只要我们利用handle子类,就可 ... 
- mysql_sql查性能语句
			mysql> SHOW PROCESSLIST; +----+--------+----------------------+-------+-------------+--------+--- ... 
- matplotlib 画饼图
			有个瑕疵,某一块儿比例过小时,文字会重叠. 1 def pizza(data,labs,title): 2 import matplotlib 3 import matplotlib.pyplot a ... 
- Selenium-IDE,在网页上模拟人的操作
			想偷懒,不想做很机械重复的网页操作,就百度了一下看看有什么方法,能把自己从重复性的网页操作中解放出来,于是,百度到了selenium ide,折腾许久,用最新版火狐添加了自带selenium ide组 ... 
