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日
發現寫入數據不等會有的情況索引是不會加上的,而且還丟東西。現在都能復制走了。
總結
以上是生活随笔為你收集整理的mysql 数据记录导出_mysql如何导出600万条记录的数据表?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言验证24点,C语言解24点游戏程序
- 下一篇: c java json_cJSON_js