mysql 数据记录导出_mysql如何导出600万条记录的数据表?

目前我这么写:

/**

* Created by IntelliJ IDEA.

* User: felix

* Date: 2019-03-01

* Time: 18:49

*/

set_time_limit(0);

$servername = 'localhost';

$username = '';

$password = '';

$dbname = '';

$i = 57007;

$bingTime = microtime(true);

echo 'bing ' . $bingTime . ' s' . PHP_EOL;

while (9690183 > $i) {

$i++;

A:

// 创建连接

$conn = new mysqli($servername, $username, $password, $dbname);

/* check connection */

if ($conn->connect_errno) {

printf("Connect failed: %s\n", $conn->connect_error);

sleep(3);

goto A;

}

$pySql = "select count(*) as sum from wzjs_product_journal_21_6 where product_journal_id = {$i}";

$result = $conn->query($pySql);

if ($result === false) {

printf("Invalid query: %s\nWhole query: %s\n", $conn->error, $pySql);

}

if ($result->fetch_assoc()['sum'] == 0) {

$pySql = "INSERT INTO wzjs_product_journal_21_6 SELECT * FROM wzjs_product_journal_21 WHERE product_journal_id = {$i}";

$result = $conn->query($pySql);

if ($result === false) {

printf("Invalid query: %s\nWhole query: %s\n", $conn->error, $pySql);

}

}

usleep(5);

$conn->close();

usleep(5);

}

$endTime = microtime(true);

echo ' end ' . $endTime . ' s' . PHP_EOL;

$diffTime = $endTime - $bingTime;

echo 'Diff Time ' . $diffTime . ' s' . PHP_EOL;

echo 'i:' . $i . "\n";

根据主键一条一条复制。我有 9690183 多条数据需要迁移,因为之前的表加不上索引了……

不过不知为啥,经常出

PHP Warning: mysqli::mysqli(): (HY000/2002): No such file or directory in /data/wwwroot/www.scienceport.cn/copy_2.php on line 24

上面的 goto 就是打算解决这个问题。目前正在测试。

之所以先查询后复制是之前老是自己就停了。而且现在也这样,连接着 shell 才会执行的比较久, 用的阿里云,关掉 shell 没多久就自己停了。就是必须看着它,要不然就自己跑不见了……

这样运行的

php copy.php > copy.log &

在写这个的时候,又打印log了,不过这个程序挺过去了……

2019年03月04日

这个也不可靠,有100多万条不知道为啥没过去……正在寻找故障原因。

No such file or directory 貌似是阿里云出故障了,反正今天有新闻。

2019年03月11日

发现写入数据不等会有的情况索引是不会加上的,而且还丢东西。现在都能复制走了。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值