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

php 专栏收录该内容
33 篇文章 0 订阅

背景: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
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页

打赏作者

慕世妮

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值