我有一个用mysqldump创建的InnoDB表的8GB MYSQL数据库转储。我用以下内容导入数据:
mysql -uroot -p my_db < dump.sql
在一小时内导入了5 GB的DB转储。 8 GB转储需要50个小时计算。当我用
检查进程列表时SHOW PROCESSLIST;
大多数情况下,只有一个INSERT查询可见状态为“'释放项”
除了复制原始文件之外,还有办法加快导入过程吗?
答案 0 :(得分:14)
真正的诀窍是确保最大的单个表适合innodb缓冲池。如果没有,那么插入(当然导入)将非常慢。
整个数据库的大小并不重要,但是最大的单表。
对于大得多的数据库,您可能需要考虑传输数据库的其他方法,例如文件系统快照。如果您的机器运行相同版本的数据库,操作系统和体系结构,这当然最有效。
答案 1 :(得分:6)
机器有多少内存?我的第一个猜测是机器有6GB或8GB的内存,并且mysql能够将第一个转储完全保留在内存中,但在第二次导入时以某种方式交换硬核。您可以在执行导入时运行vmstat 5
几次迭代,看看系统交换的重要程度吗?