我最近开发了一个脚本,该脚本生成多个进程以使用 mysqlimport 和 --tab 类型的 mysqldump 导出并行导入表。在开发服务器上,它工作得很好,与标准的 mysql db_name < backup.sql 类型的导入相比,它将时间从大约 15 分钟缩短到 4 或 5 分钟。
问题出在我们的生产服务器上,这个脚本似乎在系统范围内锁定表。也就是说,我正在将备份导入到一个完全不同的数据库,但我们的实时应用程序表最终仍处于锁定状态。SHOW PROCESSLIST 确认我们的实时数据库上的表确实被锁定,但没有 INSERT 或 UPDATE 查询正在该数据库中的任何表上运行。
为什么会这样?是否有我可以调整的配置变量/设置以防止发生此锁定?
如果您从开始
mysqlimport
,--lock-tables=0
那么将没有锁。mysqlimport
使用LOAD DATA
而不是INSERT
/UPDATE
。(问题是关于
mysqlimport
,并且已经得到回答。这个“答案”是关于基本目标的,我将重申这一点。)如何在单个MySQL实例上快速克隆单个数据库(到另一个名称的数据库)?
一个想法是
dev_db
创建并清空,然后做类似的事情注意事项:
CREATEs
和DROPs
“锁定”。FOREIGN KEY
问题。通过使用管道,中间文件不需要接触磁盘(至少对于 *nix OS 不需要)。