1. 程式人生 > 其它 >shell指令碼 安全刪除MySQL大表

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

本文版權歸作者所有,歡迎轉載,請務必新增原文連結。