我有这个巨大的 32 GB SQL 转储,我需要将其导入 MySQL。我以前不必导入如此庞大的 SQL 转储。我做了通常的:
mysql -uroot dbname < dbname.sql
Run Code Online (Sandbox Code Playgroud)
时间太长了。有一个大约有 3 亿行的表,在大约 3 小时内达到了 150 万行。因此,整个过程似乎需要 600 小时(即 24 天)并且不切实际。所以我的问题是,有没有更快的方法来做到这一点?
innodb_flush_log_at_trx_commit = 2建议的设置似乎没有(明显可见/指数级)改进。在 MySQL 中删除重复索引需要很长时间,所以在我等待的时候,我搜索了它并找到了 2006 年的这篇文章,谈论 MySQL 如何处理ADD和DROP索引。
如果表 T 是具有四个索引(ndx1、ndx2、ndx3、ndx4)的 MySQL 表,并且您想“更改表 T 删除索引 ndx3;” 这正是幕后发生的事情:
1) MySQL 将 T.MYD 复制到临时表,即 S.MYD 和零字节 S.MYI。2) MySQL 确实 'alter table S add index ndx1 (...); 3) MySQL 确实 'alter table S add index ndx2 (...); 4) MySQL 'alter table S add index ndx4 (...); 5) MySQL 删除 T.MYD 并删除 T.MYI 6) MySQL 将 S.MYD 重命名为 T.MYD,并将 S.MYI 重命名为 T.MYI
这仍然是真的吗?他的建议是否仍然有效?
给定具有四个索引(ndx1、ndx2、ndx3、ndx4)的同一个 MyISAM 表 T 并且您想“更改表 T …
MySQL 5.1.4x (Windows) | 数据库
我最近从 mySQL 数据库(几十万行)中清除了数据,我打算使用
OPTIMIZE TABLE LOGTABLEFOO1,LOGTABLEFOO2,LOGTABLEFOO3;
Run Code Online (Sandbox Code Playgroud)
为了减少文件系统中的空白空间占用的数据空间。
我担心的是,一旦我开始执行此命令,我将不知道要花多长时间或在此过程中处于什么位置。无论如何我可以确定这些信息吗?据我所知,没有进度指示器。
我在做:
type db.sql | mysql
Run Code Online (Sandbox Code Playgroud)
控制台输出什么都没有。我看到 ibdata1 文件在增长,但我不知道它会增长到多少 GB。
我想看到某种百分比进度指示器。有任何想法吗?
我目前正在上传维基百科的转储文件之一。它有 1GB 压缩和约 7GB 未压缩。它已经导入了 6 个小时。MySQL 中导入表的大小目前为 1.5GB(数据+索引)。会一直导入直到表的大小达到7GB吗?
注意:数据库的数据目录在外部硬盘上。考虑到这只是一个发展,所以我并不关心真实的表现。