我有学校数据库谁有超过8万条记录,我想更新并使用php插入我的newSchool数据库,每当我尝试运行查询更新或插入近2 000条记录,并在一段时间后自动停止请帮助
答案 0 :(得分:1)
您可以(应该)执行完整转储并稍后导入该转储。我不确定如何用php做到这一点 - 并且认为你最好用cli上的那些命令来做这件事:
mysqldump -u <username> -p -A -R -E --triggers --single-transaction > backup.sql
在你的本地主机上:
mysql -u <username> -p < backup.sql
备份语句标记含义from the docs:
-u
DB_USERNAME
-p
DB_PASSWORD
请勿在此处粘贴密码,但在mysql要求输入密码后输入密码。在命令行界面上使用密码可能不安全。
-A
转储所有数据库中的所有表。这与使用--databases选项并在命令行上命名所有数据库相同。
-E
在输出中包含转储数据库的事件计划程序事件。 此选项需要这些数据库的EVENT权限。
使用--events生成的输出包含CREATE EVENT 用于创建事件的语句。但是,这些陈述没有 包括诸如事件创建和修改之类的属性 时间戳,所以当重新加载事件时,它们是用。创建的 时间戳等于重新加载时间。
如果您要求使用原始时间戳创建活动 属性,不要使用--events。而是转储并重新加载内容 直接使用mysql.event表,使用具有的MySQL帐户 适用于mysql数据库的权限。
-R
包含转储的存储例程(过程和函数) 输出中的数据库。使用此选项需要SELECT mysql.proc表的特权。
使用--routines生成的输出包含CREATE PROCEDURE和 CREATE FUNCTION语句来创建例程。但是,这些 语句不包括例程创建和 修改时间戳,所以当重新加载例程时,它们是 创建时间戳等于重新加载时间。
如果您需要使用原始时间戳创建例程 属性,不要使用--routines。相反,转储并重新加载 mysql.proc表的内容直接使用MySQL帐号 具有适当的mysql数据库权限。
--single-transaction
此选项将事务隔离模式设置为REPEATABLE READ和 在转储之前向服务器发送START TRANSACTION SQL语句 数据。它仅适用于InnoDB等事务表, 因为那时它会转储数据库的一致状态 发布START TRANSACTION时没有阻止任何应用程序。
如果您只需要数据并且不需要例程或事件,请跳过这些标记。
答案 1 :(得分:0)
确保在几个命令之后执行提交,例如在500行之后。节省内存但存在的问题是,在回滚的情况下只返回到最后一次提交。