【问题标题】:loading mysql database from dump is taking a long time从转储加载 mysql 数据库需要很长时间
【发布时间】:2011-01-31 18:44:20
【问题描述】:

我是 mySQL 数据库的新用户。我正在尝试使用 .sql 转储文件加载数据库。 .sql 文件大小为 1GB,加载过程已运行两天,尚未完成。我在 MacOS 主机上的虚拟 Linux 机器上运行 SQL。

我希望有人已经尝试过了,所以我想知道我做的是否正确?预计这会很慢吗?还需要多长时间?

顺便说一句,我使用的命令是

mysql -u root -p dblinux < dblinux.sql

谢谢 orasp


my.cnf 文件

[mysqld] 

datadir=/var/lib/mysql 
socket=/var/lib/mysql/mysql.sock 
user=mysql 

# Default to using old password format for compatibility with mysql 3.x 
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1 
# Disabling symbolic-links is recommended to prevent assorted security risks; 
# to do so, uncomment this line: 
# symbolic-links=0 

[mysqld_safe] 

log-error=/var/log/mysqld.log 
pid-file=/var/run/mysqld/mysqld.pid

顶部输出

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
24273 mysql 18 0 128m 29m 6084 S 0.0 2.9 0:46.88 mysqld 
26157 bioinf 0 -20 11528 4960 1380 S 0.0 0.5 0:06.68 mysql

【问题讨论】:

  • 1GB 的两天时间太长了。任何体面的硬件都应该不超过一个小时。您可能应该告诉我们您为表使用的存储引擎(MyISAM 与 InnoDB),并向我们展示您的服务器设置(可在my.cnf 文件中找到)。稍微了解一下你的 VM 设置(它有多少 RAM,它有多少 CPU 能力)也会很有帮助。
  • 嗨 Mchl,我的 my.cnf 文件包含 [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # 默认使用旧密码格式为了与 mysql 3.x # 客户端兼容(使用 mysqlclient10 兼容包的客户端)。 old_passwords=1 # 建议禁用符号链接以防止各种安全风险; # 为此,请取消注释此行: # symbolic-links=0 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid 你能告诉我如何检查数据库类型。和虚拟机设置?谢谢
  • 嗨.. 我检查了我的虚拟机有 1 GB 的 RAM。我需要增加吗?谢谢
  • 我认为您应该从增加 MySQL 允许使用的内存量开始。在此处查看一些提示:dev.mysql.com/doc/refman/5.0/en/server-parameters.html(在页面底部)

标签: mysql virtual-machine


【解决方案1】:

我怀疑你的 Linux 虚拟机可能正在交换空间。

虚拟机的分配内存通常受到限制。你检查过它是否用完了吗? 'top' 命令对此很有用。

如果您不熟悉“top”,它的屏幕上部会显示一般内存和 CPU 使用统计信息,这可能会立即回答您的问题。最严重的 CPU 占用将位于占据屏幕其余部分的进程列表的开头。

如果你点击“?”在它运行时,它会显示对进程列表进行排序的选项:您可能希望按内存使用(虚拟或硬)对其进行排序。

【讨论】:

  • 嗨乔恩,这是我看到的顶部输出 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 24273 mysql 18 0 128m 29m 6084 S 0.0 2.9 0:46.88 mysqld 26157 bioinf 0 -20 11528 4960 1380 S 0.0 0.5 0:06.68 mysql 这看起来好吗?谢谢
  • 嗨 - 这表明 mysqld 已冻结。在您分配给虚拟机的 1GB RAM 中,它只占用了 128MB 的虚拟内存(29MB 的芯片内存),这不是交换抖动的模式——但它没有使用任何 CPU,所以你是查看锁定的进程。 Mchl 的建议(上图)是绝对正确的。看起来mysqld实际上已经进入了内部“致命的拥抱”,已经达到了它自己配置的内存限制:它正在(永远)等待一些内存被释放。 [续]
  • 首要任务是杀死 mysqld,将其限制更改为有用的东西(如 Mchl 所述),重新启动它,然后重新开始。如果可以将您的 1GB SQL 文件明智地分割成更小的块,我建议您也这样做,并一次提供一个。它可能不会对 mysqld 使用的内存产生影响,但它可以让您了解在事情锁定之前您获得的数据库负载有多远,进而您可以使用它来估计您的最终内存量'将需要。不过,这可能超出了 Mac 所能提供的范围。 [续]
  • 您可能需要考虑调查Amazon EC2。大型实例(7.5GB 内存;使用时为 0.34 美元/小时)听起来像是您所需要的。当您不使用您的 EC2 实例时,您可以暂停它,因此在您需要它之前不会花钱。只要确保你暂停它而不是终止它! Amazon Web Services 需要一些学习和一些实验才能习惯,但它们非常有用。这些知识可能也会为您提供专业的服务,因为按需计算和存储在几乎所有业务中都有应用。
猜你喜欢
  • 2017-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多