数据大批量迁移处理

在大批量迁移数据的时候,有多种可行的方式;

1、一次查询,然后insetAll插入。但这种方式也有数量上限。

2、分批查询再插入,但是这种量大后会很慢很慢

还有一种推荐的,利用mysqlimport命令,和前两个相比,速度极快

$str = '';
foreach ($addData as $v) {
    $str .= $v['name'] . "\t" . $v['image'] . "\t" . $v['difficultyLevel'] . "\t" . $v['categoryId'] . "\t" . $v['source'] . "\t" . $v['introduce'] . "\t" . $v['isHasVideo'] . "\t" . $v['description'] . "\t" . $v['cookTime'] . "\t" . $v['unit'] . "\t" . $v['calories'] . "\t" . $v['thirdId'] . "\t" . $v['thirdNo'] . "\t" . $v['createTime'] . "\t" . $v['updateTime'] . "\t" . $v['status'] . "\t" . $v['nutrition'] . "\n";
}

//写入到文件
$re = file_put_contents("/tmp/detail.txt", $str);

//执行导入数据命令
//注意密码用单引号,注意账号权限,注意格式
$cmd = '/usr/local/mysql/bin/mysqlimport -h' . config("database.db_test.hostname") . ' -u' . config("database.db_test.username") . ' -p\'' . config("database.db_test.password") . '\'  db_test /tmp/detail.txt --columns=\'name,image,difficultyLevel,categoryId,source,introduce,isHasVideo,description,cookTime,unit,calories,thirdId,thirdNo,createTime,updateTime,status,nutrition\' -L';
shell_exec($cmd);

10万条的数据 ,基本10秒内插入成功。还是贼拉快的。

注意 缓存文件读写权限要有。字段要对应。表名和缓存文件名要一致(detail )。数据库密码加引号(部分密码里有特殊符号) 服务器要开启shell_exec权限。

 

posted @ 2020-11-17 16:03  一颗星—Broken  阅读(324)  评论(0编辑  收藏  举报