mysql - 如何避免使用 Keycache 进行修复?

标签 mysql mysqldump

我有一些优化 my.cnf 文件的经验,但我的数据库有大约 400 万条记录 (MyISAM)。我正在尝试从 mysqldump 恢复,但每次我最终都会得到可怕的“使用 Keycache 修复”,这可能需要几天时间。有什么办法可以解决这个问题,让它滚动为“Repair By Sorting”?

我有 2GB RAM、双核、大量额外的硬盘空间。

从 my.cnf 中剪掉:

set-variable = max_connections=650
set-variable = key_buffer=256M
set-variable = myisam_sort_buffer_size=64M
set-variable = join_buffer=1M
set-variable = record_buffer=1M
set-variable = sort_buffer_size=2M
set-variable = read_buffer_size=2M
set-variable = query_cache_size=32M
set-variable = table_cache=1024
set-variable = thread_cache_size=256
set-variable = wait_timeout=7200
set-variable = connect_timeout=10
set-variable = max_allowed_packet=16M
set-variable = max_connect_errors=10
set-variable = thread_concurrency=8

最佳答案

“通过排序修复”使用文件排序例程,该例程反过来(通常)会在您的 tmpdir 中创建几个临时文件。

如果您的 tmpdir 没有足够的空间供它们使用,它将恢复为“通过 keycache 修复”。这非常糟糕,因为它速度慢得多并且创建的索引不太理想。

还有一些其他情况,但我没有确定。

计算出 filesort() 所需的 tmpdir 大小并非易事;存储在文件排序缓冲区中的格式数据与 MYD 文件不同,它通常会占用更多空间。

因此,如果您的 tmpdir 指向较小的/tmp(或 tmpfs),您可能需要将其更改为较大的/var/tmp - 如果存在的话。

关于mysql - 如何避免使用 Keycache 进行修复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1067367/

相关文章:

MySQL 5.6.5-m8 转储失败

mysql - 从以前的安装加载数据库

Mysql最佳备份方式

mysql - 重度平均MYSQL

php - LOAD DATA LOCAL INFILE 只进入5行

MySQL 从连接表中选择两个计数

mysql - 备份的理想 mysqldump 选项

java - 如何从php获取json的COUNT(id)值到android

PHP - 使用一组 ID 从数据库中删除许多项目

mysql - 导入 MySQL 转储文件时如何覆盖 ENGINE=INNODB 参数?