批量执行SQL文件

13 篇文章 1 订阅

一.功能

匹配处理数据库的命令,可用于批量数据迁移和导入。

二.操作步骤

step1.生成需要执行的SQL文件

生成需要执行的sql文件(每行一个sql命令)。示例如下:

delete from lbs_poi where poiid=1000052855 limit 1;
delete from lbs_poi where poiid=1000052856 limit 1;
delete from lbs_poi where poiid=1000052857 limit 1;
delete from lbs_poi where poiid=1000052858 limit 1;
delete from lbs_poi where poiid=1000052859 limit 1;

step2.将原始sql文件按照固定行数拆分

jar包存放位置:10.74.28.129 /data1/bingqing/shAndJar/splitFile.jar splitFile.jar

上面目录是笔者操作的机器,处于公司内网中,如果没有连接内网,请参考者先进入内网。

执行jar包查看jar调用说明:

/data1/bingqing/shAndJar # java -jar splitFile.jar
split file with fixed lineNum
paras: inputFilePath encode fileLineNum
sample: java -jar splitFile.jar poiToDeleteSql.sql utf8 1000

根据说明,将目标sql文件拆分成多个子文件。

step3.人工监控执行有停顿的脚本

shell脚本存放位置:10.74.28.129 /data1/bingqing/shAndJar/sleepSql.sh

脚本内容:

/data1/bingqing/shAndJar # cat sleepSql.sh
#!/bin/sh
echo '------------------------' >> deletelog.txt

current=`date "+%Y-%m-%d %H:%M:%S"`
#echo $current
echo $current >> deletelog.txt

#mysql -uLBQ -pPSBPkJaHX6aTeWEOds -hm4000i.randa.grid.sina.com.cn --default-character-set=utf8 -P4000 LBQ < poiToDeleteSqlAll2.sql


for i in {3001..10000};
do
#echo $i
echo $i >> deletelog.txt
mysql -uLBQ -pPSBPkJaHX6aTeWEOds -hm5000i.randa.grid.sina.com.cn --default-character-set=utf8 -P4000 LBQ < poiToDeleteSqlAll${i}.sql

current=`date "+%Y-%m-%d %H:%M:%S"`
#echo $current
echo $current >> deletelog.txt

sleep 3s
done


echo 'over!' >> deletelog.txt

注:

1.mysql -uLBQ -pPSBPkJaHX6aTeWEOds -hm4000i.randa.grid.sina.com.cn --default-character-set=utf8 -P4000 LBQ < poiToDeleteSqlAll${i}.sql

这是数据库的连接串儿,参数解析如下:

-uLBQ 指定用户名(有时候也习惯采用数据库们或者部门名称)

-pPSBPkJaHX6aTeWEOds 密码

-hm4000i.randa.grid.sina.com.cn 连接对象或者连接目标,这个参数包含了主机名,端口,目标库的模式是主库还是从库,与jdbc中的MySQL连接配置异曲同工。其中hm表名连接的是主库,如果是hs则为从库;4000为端口号;后缀为主机名称(内网有配置,直接使用域名)

--default-character-set=utf8 指定编码格式,防止操作过程产生乱码问题


-P4000 指定端口

LBQ 指定数据库
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值