php如何导出万级sql数据 导出mysql10万条数据

背景:php的执行时间是有限的,一般是30秒。就算是执行时间足够 设置 set_time_limit(0) 但是经过我测试数据量超过1万的时候执行需要n久时间不说主要是必然会报502,然后想到了俩种解决方式 方法一:分页excel导出(这个逻辑大家应该都能想到我这里也不主要介绍了) 方法二:用shell脚本导出(我也算是今儿个第一次写脚本吧所以才屁颠屁颠的跑来记录一哈子,话不多说这就开始详细步骤)

一:假设每天导出当天的数据内容 则下面这一段就够用了(声明:此代码纯粹举例不含任何公司机密,大家也都是借鉴直接粘贴可能你也用不了哈注意!

time=$i

data=$(mysql -h xxx -p xxx -u xxx -p xxxx -D xxx(数据库名称) -e "select * from table where time=$time;")>$time.txt

二:老板要求导出来的文本带有表头咋办:

time=$i

data=$(mysql -h xxx -p xxx -u xxx -p xxxx -D xxx(数据库名称) -e "select 'name' as '用户名','userid' as '用户id' from table where time=$time union select name,userid from table where time=$time;")>$time.txt

带表头吧想了很多方式没搞出来,百度了一圈发现这个挺靠谱还简单,主要是用到了sql的 `union` ;但是实际上我也没太深研究 union的用处感兴趣的同学可以研究研究

三:老板不要求也得考虑到,不能每次都手动跑那就得定时任务跑,定时任务跑的时候如果表里没数据咋拉取所以再补充一下就更完美了

time=$i

data=$(mysql -h xxx -p xxx -u xxx -p xxxx -D xxx(数据库名称) -e "select 'name' as '用户名','userid' as '用户id' from table where time=$time union select name,userid from table where time=$time;")

if [ !$data ]; then
    exit 1;
else 
    echo "$data" > $time.txt
fi

shell脚本返回非0就是失败,但是我用的是内部的定时任务会自动重新执行,至于别的定时任务你要实在不会搞失败自动重新执行就大不了一个或者俩个小时跑一次算了,ok就酱我要搬别的砖去了!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值