MySQL中20GB的恢复需要多长时间?(又叫什么东西坏了?)

MySQL中20GB的恢复需要多长时间?(又叫什么东西坏了?),mysql,performance,Mysql,Performance,我正试图通过加载一个备份来构建生产MySQL数据库的开发人员副本。如果未压缩转储为~20G,则执行此操作需要多长时间 这个命令已经运行了大约24小时,CPU负载为10%,我想知道它是否运行得很慢,或者它/我做错了什么 mysql -u root -p < it_mysql_dump.sql mysql-u root-p

我正试图通过加载一个备份来构建生产MySQL数据库的开发人员副本。如果未压缩转储为~20G,则执行此操作需要多长时间

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

mysql -u root -p < it_mysql_dump.sql 
mysql-u root-p


顺便说一句,它是在一台拥有大量ram的强大桌面开发机器上,但它可能在读写同一个硬盘。我想我正在使用InnoDB。

打开另一个终端,运行mysql,并对转储中某些表中的行进行计数(
从表中选择count(*)
)。与源数据库进行比较。这会告诉你进展情况

我在大约14小时内通过网络将大约80GB的数据插入MySQL。它们是每行一次插入转储(速度慢),开销很大,插入到具有快速磁盘的服务器上


如果硬件足够旧,或者您的导入在磁盘IO和内存方面与其他设备竞争,则可能需要24小时。

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

确切地说,你需要做什么来修复它取决于引擎,但一般来说

我想说,做以下几点:

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

  • 确保您有足够的物理ram将最大的一张表放入内存;在此计算中包括操作系统的任何开销(注意:在使用4k页面的操作系统上,即所有页面,页面表本身在大内存系统上占用大量内存-不要忘记这一点)
  • 调整innodb_buffer_池,使其大于最大的单个表;或者,如果使用MyISAM,请调整key_缓冲区,使其足够大以容纳最大表的索引
  • 耐心点
  • 现在,如果您仍然发现执行上述操作很慢,那么可能是您的特定数据库有一个非常复杂的结构需要恢复

    就我个人而言,我已经设法在48小时内重建了一个约2Tb的服务器,但这是一个特殊情况

    如果要将生产数据加载到开发系统中,请确保开发系统具有生产级硬件

    特别是,如果您认为可以将数据大容量加载到不适合内存的表中(或者至少大部分不适合内存),那么请忘记它



    如果这一切看起来太多了,请记住,您可以使用InnoDB联机使用文件系统或LVM快照,然后只复制文件。对于MyISAM来说,这有点棘手,但仍然可以做到

    我刚刚经历了从36.8GB mysqldump文件恢复51.8GB数据库以创建imdb数据库的过程。对我来说,恢复不是通过网络完成的,而是通过本机上的文件完成的,只花了不到4个小时

    这台机器是一台运行Windows Server 2008的四核服务器。人们想知道是否有一种方法可以监测进展情况。确实有。您可以通过转到Program Data目录并查找MYSQL子目录,然后查找具有您的数据库名称的子目录,来观看还原创建数据库文件的过程


    这些文件逐渐构建在目录中,您可以观察它们的构建。当您遇到生产问题并且想知道恢复工作是挂起还是需要很长时间时,您会感到非常欣慰

    有多少内存,硬盘上的详细信息如何?IO是问题所在这是一个256MB内存的奔腾2吗?我在其中一个表(我认为正在加载的表)上这样做了,查询已经几个小时没有返回了,好像该表被锁定,无法读取。保存可能与转储文件中的读取相竞争:o)14小时给了我一个合理的大概时间。不幸的是,您通常无法通过另一个会话监视恢复,因为它们通常持有表锁。您仍然可以查看新服务器上数据文件的大小,以查看它们的增长。监控总是有办法的。你有关于如何做最后一点的链接吗?