数据库分批导出为csv文件

boss需要1500万个手机号码,导出为excel文件

由于数量太大,直接存一个文件,打开电脑会直接卡死。

需要分为15批,每批100万。

可以手工在navicat软件上面运行,根据MySQL分页公式

(page-1)*page_size,page_size

也即是(当前分页-1)*每页数量,每页数量

示例sql:

select mobile from tbl_sms
LIMIT 0,1000000

第二页

select mobile from tbl_sms
LIMIT 1000000,1000000

.......

后面的依次类推

所以写了一个完整的php文件,部分引用数据库连接的地方,请自行修改

<?php
/**
 * Created by PhpStorm.
 * User: xx
 * Date: 2017/12/11
 * Time: 13:29
 */

set_time_limit(0);
//引入框架
include(dirname(__FILE__) .'/../header.php');
ini_set('memory_limit','1200M');

//导出为csv文件
function import_csv($i){
    //csv文件位置
    $filePath="/upload/tmp/sms/".$i. '.csv';
    //PHP文件处理类 SplFileObject,5.12版本以上都有
    $fileObj = new SplFileObject($filePath, 'ab');
    //分页公式 (page-1)*page_size,也即是(当前分页-1)*每页数量
    $start=($i-1)*1000000;
    //sql语句
    $sql="select mobile from tbl_sms_201711
    LIMIT $start,1000000";
    echo $sql."\n";
    //exit;
    //框架连接数据库,这里指定的是sms,执行sql语句
    //注意:这里我自己用的框架,请自行修改
    $res=db::connect('sms')->query($sql);
    //print_r($res);
    //遍历数组,写入文件
    foreach ($res as $values) {
        $fileObj->fputcsv(array_map(function ($item){
            return iconv('UTF-8', 'GBK', $item);
        }, $values));
    }
}

//执行15次
for ($i=1;$i<=15;$i++){
    import_csv($i);
}

执行效果如下:

select mobile from tbl_sms_201711

    LIMIT 0,1000000

select mobile from tbl_sms_201711

    LIMIT 1000000,1000000

select mobile from tbl_sms_201711

    LIMIT 2000000,1000000

select mobile from tbl_sms_201711

    LIMIT 3000000,1000000

select mobile from tbl_sms_201711

    LIMIT 4000000,1000000

select mobile from tbl_sms_201711

    LIMIT 5000000,1000000

select mobile from tbl_sms_201711

    LIMIT 6000000,1000000

select mobile from tbl_sms_201711

    LIMIT 7000000,1000000

select mobile from tbl_sms_201711

    LIMIT 8000000,1000000

select mobile from tbl_sms_201711

    LIMIT 9000000,1000000

select mobile from tbl_sms_201711

    LIMIT 10000000,1000000

select mobile from tbl_sms_201711

    LIMIT 11000000,1000000

select mobile from tbl_sms_201711

    LIMIT 12000000,1000000

select mobile from tbl_sms_201711

    LIMIT 13000000,1000000

select mobile from tbl_sms_201711

    LIMIT 14000000,1000000

查看/upload/tmp/sms目录

total 175800
-rw-r--r-- 1 root root 12000000 Dec 12 15:36 10.csv
-rw-r--r-- 1 root root 12000000 Dec 12 15:36 11.csv
-rw-r--r-- 1 root root 12000000 Dec 12 15:36 12.csv
-rw-r--r-- 1 root root 12000000 Dec 12 15:36 13.csv
-rw-r--r-- 1 root root 12000000 Dec 12 15:36 14.csv
-rw-r--r-- 1 root root 12000000 Dec 12 15:37 15.csv
-rw-r--r-- 1 root root 12000000 Dec 12 15:35 1.csv
-rw-r--r-- 1 root root 12000000 Dec 12 15:35 2.csv
-rw-r--r-- 1 root root 12000000 Dec 12 15:35 3.csv
-rw-r--r-- 1 root root 12000000 Dec 12 15:35 4.csv
-rw-r--r-- 1 root root 12000000 Dec 12 15:35 5.csv
-rw-r--r-- 1 root root 12000000 Dec 12 15:35 6.csv
-rw-r--r-- 1 root root 12000000 Dec 12 15:36 7.csv
-rw-r--r-- 1 root root 12000000 Dec 12 15:36 8.csv
-rw-r--r-- 1 root root 12000000 Dec 12 15:36 9.csv

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程坑太多

springboot (11) mybatis

14930
来自专栏杨建荣的学习笔记

10g升级至11g exp的问题解决(23天)

昨天升级数据库,从10.2.0.5.0升级到11.2.0.2.0.按照预定的步骤很快就操作完了。升级完成后,开始跑一些应用和Job.有一个Job开始报错,Job...

50360
来自专栏扎心了老铁

数据库表反向生成(一) MyBatis-generator与IDEA的集成

在Dao层,通过数据库表反向生成,可以节省我们很多的精力,把更多的精力投入复杂的业务中。 数据库表反向生成,指的是通过数据库如mysql中的库表schema生成...

1.1K80
来自专栏杨建荣的学习笔记

ORACLE 11g导入9i dump的问题及解决

因为系统迁移,需要将一部分的9i的数据导入11g的库里, 目标库是11.2.0.3.0 64位的环境。 导入dump的时候,有一个比较大的分区表,需要用导入分...

37970
来自专栏dalaoyang

SpringBoot整合Mybatis

介绍一下SpringBoot整合mybatis,数据库选用的是mysql。 首先创建数据库 CREATE DATABASE test; 建表以及插入初始数据(s...

45260
来自专栏Netkiller

CentOS7 下 MySQL 5.7 重置root密码

本文节选自《Netkiller MySQL 手札》 CentOS 7.x 添加 skip-grant-tables=1 选项,然后重启mysql # cat /...

37740
来自专栏数据库新发现

Oracle诊断案例-Job任务停止执行

Last Updated: Saturday, 2004-11-20 12:47 Eygle

8420
来自专栏岑玉海

Hbase 学习(十一)使用hive往hbase当中导入数据

  我们可以有很多方式可以把数据导入到hbase当中,比如说用map-reduce,使用TableOutputFormat这个类,但是这种方式不是最优的方式。 ...

497130
来自专栏杨建荣的学习笔记

impdp异常中断导致的问题(r2第8天)

今天查看数据库的负载,发现cpu消耗异常的高。里面有不少dw的进程.但是查看impdp的进程却不存在。 查看datapump的进程情况,发现大量的job,但是状...

398110
来自专栏数据库新发现

Oracle诊断案例-Sql_trace之二

http://www.eygle.com/case/sql_trace_2.htm

11840

扫码关注云+社区

领取腾讯云代金券