ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

shell脚本 安全删除MySQL大表

2021-12-14 14:34:12  阅读:256  来源: 互联网

标签:shell -- safe MySQL test 大表 type id delete


一.简介

源码地址

日期:2018/4/12
介绍:工具用于安全删除MySQL表,对于一些特定场景可能有用

应用场景:大批删除不走索引但是有主键的场景[可以是单列索引,也可是多列索引]
实现思路:根据where条件获取到主键值,然后重新拼接SQL
注:本工具仅用于学习,如用于生产,请充分测试

效果图:
file

二.使用

适用: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,--,safe,MySQL,test,大表,type,id,delete
来源: https://www.cnblogs.com/rxysg/p/15687822.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有