目前我这么写:
/**
* 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日
发现写入数据不等会有的情况索引是不会加上的,而且还丢东西。现在都能复制走了。