mysql - 在 MySQL 中恢复 20GB 需要多长时间? (A.k.a. 有什么东西坏了吗?)

标签 mysql performance

我正在尝试通过加载其中一个备份来构建生产 MySQL 数据库的开发副本。如果未压缩转储约为 20G,需要多长时间才能完成此操作?

这个命令已经运行了 24 小时,CPU 负载为 10%,我想知道它是不是很慢,或者它/我做错了什么。

mysql -u root -p < it_mysql_dump.sql 

顺便说一句,它位于具有大量内存的强大桌面开发机器上,但它可能正在读取和写入相同的 HDD。我想我正在使用 InnoDB。

最佳答案

恢复 MySQL 转储可能需要很长时间。这是因为它确实重建了整个表。

修复它的确切方法取决于引擎,但一般来说

我会说,执行以下操作:

第零条规则:仅使用 64 位操作系统。

  1. 确保您有足够的物理内存来将最大的单个表放入内存;在此计算中包括操作系统的任何开销(注意:在使用 4k 页的操作系统上,即所有这些页表本身在大内存系统上占用大量内存 - 不要忘记这一点)
  2. 调整 innodb_buffer_pool 使其大于最大的单个表;或者,如果使用 MyISAM,请调整 key_buffer,使其足够大以容纳最大表的索引。
  3. 要有耐心。

现在,如果您在执行上述操作后仍然发现它很慢,可能是您的特定数据库具有非常棘手的结构来恢复。

就我个人而言,我已经在 < 48 小时内成功地重建了一个约 2Tb 的服务器,但那是一个特例。

如果您打算将生产数据加载到其中,请确保您的开发系统具有生产级硬件。

特别是,如果您认为可以将数据批量加载到不适合内存(或至少大部分不适合内存)的表中,那就算了。


如果这一切看起来太多了,请记住您可以通过 InnoDB 在线使用文件系统或 LVM 快照,然后复制文件。使用 MyISAM 它有点棘手,但仍然可以完成。

关于mysql - 在 MySQL 中恢复 20GB 需要多长时间? (A.k.a. 有什么东西坏了吗?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4404590/

相关文章:

Php/Mysql 日期保存为 '0000-00-00'

mysql - 如何在 SQL 表列中获取 N 个间隙?

c# - SqlDataReader 索引器性能

c++ - .so 大小会影响虚函数性能吗

Python cgi 性能

每次我打开我的应用程序时都会触发 Android 工作管理器

C# 7.2 在关键字性能方面

mysql - 在 MYSQL QUERY 上输出逗号而不是点

MySQL可重复读隔离级别和丢失更新现象

c# - 为什么 BLToolkit 在生成的查询中插入\0 而不是 '@' 符号?