Linux 超大文件拆分与关键数据提取

一、概述

​ 在生产环境中有时候可能会遇到大文件的读取问题,5-10G日志文件很常见。这些大文件普通文本文件根本打不开,更别想在其中查找关键信息了,并且,这些大文件在传输上也不方便,因此,可以通过linux系统split命令,将文件进行按文本大小或者行数进行切分为小文件,再对小文件进行操作。

二、案例

​ 数据量千万级的Mysql生产环境做数据备份,将整个库通过mysqldump导出为单个sql文件,单个文件达到100G左右。通过source命令导入mysql数据库时,由于数据量太大,某些表达到200万数据,整个过程同步完估计至少得3-5天。由于系统着急使用,所以必须先恢复核心表,经过一番研究,提供以下可行方案。

2.1 切分大文件

​ 对于split命令不熟悉的同学,可以查找更多详细资料,在此不做赘述。

注意:对于sql脚本按行提取需求,一定要按行分隔文件,按文件大小分,会造成某些行不完整,被截断的问题。

# -l 2000 按2000行分隔
# -d 文件末尾以数字结尾 0000
# --suffix=5 末尾5位数字表示
# --additional-suffix=.sql 添加文件后缀
# test.sql 要切分的大文件
# comon 文件名前缀,最终生成文件格式为:comon00000.sql
split -l 2000 -d --suffix=5  --additional-suffix=.sql test.sql comon

​ 通过上述命令,大文件test.sql就被切分为2000行的一个个小文件,大大缩小单个文件体积。接下来,就从切分完的一堆小文件中,提取关键数据。

2.2 通过shell脚本,提取关键数据

split.sh

#!/bin/bash

#遍历当前文件夹下切分后的comon0000x.sql 文件
for fileName in $(ls comon0*.sql)
do
	echo '扫描到文件:' $fileName
	echo '开始提取内容......'
	#通过cat命令,查看包含 insert into `sys_role` 语句的行,将结果追加到result.sql文件
	cat $fileName | grep -i 'insert into `sys_role`' >> result.sql
	
	echo $fileName '文件提取完毕,扫描下一个文件 *******************************'
done

​ 通过运行该脚本,可以遍历一个个小文件,提取关键行到目标文件中。这样提取出关键表的数据,就可以对其进行优先恢复了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值