复制数据库表-Mysql-PHP时脚本卡住

复制数据库表-Mysql-PHP时脚本卡住,php,mysql,database,duplicates,copy,Php,Mysql,Database,Duplicates,Copy,这是我的问题的后续问题 我使用下面的代码来复制数据库表,但有时如果表太大,脚本会挂起,页面会一直等待,当我比较两个表中的行数时,我会发现类似的情况 原始表计数:855057 备份表计数:855022 因此,这个过程似乎没有完全完成,这就提出了一个问题,为什么在执行插入语句的过程中它会被卡住 请记住,在大多数情况下,这两个值实际上是相同的,尽管它完成了复制,但仍然挂起 这是我的密码: //duplicate tables structure $query = "CREATE TABL

这是我的问题的后续问题

我使用下面的代码来复制数据库表,但有时如果表太大,脚本会挂起,页面会一直等待,当我比较两个表中的行数时,我会发现类似的情况

原始表计数:855057
备份表计数:855022

因此,这个过程似乎没有完全完成,这就提出了一个问题,为什么在执行插入语句的过程中它会被卡住

请记住,在大多数情况下,这两个值实际上是相同的,尽管它完成了复制,但仍然挂起

这是我的密码:

//duplicate tables structure 
 $query = "CREATE TABLE $this->dbName.`$newTableName` LIKE $this->dbName.`$oldTable`";
    ..
    ..
    
//duplicate tables data
  $query = "INSERT INTO $this->dbName.`$newTableName` SELECT * FROM $this->dbName.`$oldTable`";
    ..
    ..

另外,我从本地主机运行复制脚本到远程服务器中的备份数据库。

您需要通过运行show full processlist检查查询是否仍在运行。 您还必须记住,如果表引擎是innodb,则还将创建一个撤消日志,以防中断,事务将不得不回滚。

使用锁表

// duplicate tables structure 
$query = "CREATE TABLE $this->dbName.`$newTableName` LIKE $this->dbName.`$oldTable`";

// lock source and target table
$query = "LOCK TABLES $this->dbName.`$newTableName` WRITE, $this->dbName.`$oldTable` AS source WRITE";

// duplicate tables data
$query = "INSERT INTO $this->dbName.`$newTableName` SELECT * FROM $this->dbName.`$oldTable` AS source";

// unlock
$query = "UNLOCK TABLES";

您可以检查php日志中是否有任何错误。您还可以在mysql中运行“show full processlist”来查看它是否仍在运行查询。每台机器上的mysql服务器版本是什么?(在我的机器上->5.5.16)(在服务器上它说->5.0.77-log)我是通过运行mysql\u get\u server\u info()得到的,当我尝试从源表复制数据时,我会出现以下错误:(查询中出错。查询:在此处插入db_名称。
badges_userstats_temp_015303_271212
SELECT*FROM db_name_here。
badges_userstats_gw18_271212
错误:表'badges_userstats_temp_015303_271212'未用锁表锁定)这是否意味着我需要锁定两个表!刚刚测试了代码,没有执行错误:但是,D将尝试看看复制过程是否不会挂起,如果是,我将在几天后回来,并选择此作为正确答案。谢谢,非常感谢。还有一件事,为什么认为在复制数据之前锁定表是必要的?后期评论,t谢谢你的消息!