背景: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就酱我要搬别的砖去了!!!