当前位置: 首页 > 面试题库 >

MySQL,错误126:表的密钥文件不正确

陶锋
2023-03-14
问题内容

我阅读了以下具有相关性的问题,但答复并未使我满意:MySQL:#126-表的密钥文件不正确

问题

运行查询时出现此错误

错误126(HY000):表的密钥文件不正确`

问题

当我试图找到问题时,我找不到问题,所以我不知道如何使用repair命令修复它。在我已经尝试过之后,是否有其他任何方法可以指示我如何找到导致此问题的问题呢?

查询

mysql>       SELECT
    ->         Process.processId,
    ->         Domain.id AS domainId,
    ->         Domain.host,
    ->         Process.started,
    ->         COUNT(DISTINCT Joppli.id) AS countedObjects,
    ->         COUNT(DISTINCT Page.id)   AS countedPages,
    ->         COUNT(DISTINCT Rule.id)   AS countedRules
    ->       FROM Domain
    ->         JOIN CustomScrapingRule
    ->           AS Rule
    ->           ON Rule.Domain_id = Domain.id
    ->           LEFT JOIN StructuredData_Joppli
    ->             AS Joppli
    ->             ON Joppli.CustomScrapingRule_id = Rule.id
    ->         LEFT JOIN Domain_Page
    ->           AS Page
    ->           ON Page.Domain_id = Domain.id
    ->         LEFT JOIN Domain_Process
    ->           AS Process
    ->           ON Process.Domain_id = Domain.id
    ->       WHERE Rule.CustomScrapingRule_id IS NULL
    ->       GROUP BY Domain.id
    ->       ORDER BY Domain.host;
ERROR 126 (HY000): Incorrect key file for table '/tmp/#sql_2b5_4.MYI'; try to repair it

mysqlcheck

root@scraper:~# mysqlcheck -p scraper
Enter password: 
scraper.CustomScrapingRule                         OK
scraper.Domain                                     OK
scraper.Domain_Page                                OK
scraper.Domain_Page_Rank                           OK
scraper.Domain_Process                             OK
scraper.Log                                        OK
scraper.StructuredData_Joppli                      OK
scraper.StructuredData_Joppli_Product              OK

计算行

mysql> select count(*) from CustomScrapingRule;
+----------+
| count(*) |
+----------+
|       26 |
+----------+
1 row in set (0.04 sec)

mysql> select count(*) from Domain;
+----------+
| count(*) |
+----------+
|        2 |
+----------+
1 row in set (0.01 sec)

mysql> select count(*) from Domain_Page;
+----------+
| count(*) |
+----------+
|   134288 |
+----------+
1 row in set (0.17 sec)

mysql> select count(*) from Domain_Page_Rank;
+----------+
| count(*) |
+----------+
|  4671111 |
+----------+
1 row in set (11.69 sec)

mysql> select count(*) from Domain_Process;
+----------+
| count(*) |
+----------+
|        2 |
+----------+
1 row in set (0.02 sec)

mysql> select count(*) from Log;
+----------+
| count(*) |
+----------+
|       41 |
+----------+
1 row in set (0.00 sec)

mysql> select count(*) from StructuredData_Joppli;
+----------+
| count(*) |
+----------+
|    11433 |
+----------+
1 row in set (0.16 sec)

mysql> select count(*) from StructuredData_Joppli_Product;
+----------+
| count(*) |
+----------+
|   130784 |
+----------+
1 row in set (0.20 sec)

更新资料

磁盘使用情况

root@scraper:/tmp# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       20G  4.7G   15G  26% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            237M  4.0K  237M   1% /dev
tmpfs            49M  188K   49M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            245M     0  245M   0% /run/shm
none            100M     0  100M   0% /run/user

问题答案:

看来您的查询返回的是一个大型的中间结果集,需要创建一个临时表,并且mysql临时磁盘表(/ tmp)的配置位置对于生成的临时表来说还不够大。

您可以尝试通过重新安装来增加tmpfs分区的大小:

mount -t tmpfs -o remount,size=1G tmpfs /tmp

您可以通过编辑/ etc / fstab使此更改永久生效

如果无法执行此操作,则可以尝试通过编辑my.cnf文件中的“
tmpdir”条目来更改磁盘临时表的位置(如果尚未存在,请添加它)。请记住,您选择的目录应该是mysql用户可写的

您也可以尝试通过增加mysql配置选项的值来阻止在磁盘上创建临时表:

tmp_table_size
max_heap_table_size

更大的值。您将需要同时增加以上两个参数

例:

set global tmp_table_size = 1G;
set global max_heap_table_size = 1G;


 类似资料:
  • 问题内容: 我不经常来这里寻求帮助,但是对此我感到非常沮丧,我希望有人以前遇到过它。 每当我尝试使用多个联接从表中获取记录时,都会出现此错误: 因此,此查询将产生错误: 但这不会: 而且这个也不会: 是什么原因造成的?我真的不知道如何修复tmp表,但是我真的不认为这是问题所在,因为每次都是新的tmp表。用户名表相当大(目前有233,718条记录),但我怀疑这与它有关。 任何帮助将非常感激。 更新

  • 问题内容: 我有一个主键为varchar(255)的表。在某些情况下,255个字符不够用。我尝试将字段更改为文本,但是出现以下错误: 我怎样才能解决这个问题? 编辑:我还应该指出,该表具有包含多个列的复合主键。 问题答案: 发生错误是因为MySQL只能索引BLOB或列的前N个字符。所以错误主要发生时,有一个领域/列类型或BLOB或那些属于或类型,如,,,,,和您尝试使一个主键或索引。无论长度是完整

  • 问题内容: 我尝试创建一个新的自我认证的密钥库文件 我使用的命令是: 但我总是收到这个烦人的错误: 我不明白为什么会收到此错误。上面的命令应该创建一个新的密钥库,所以为什么它抱怨不存在的密钥库? 问题答案: 生成密钥对(和新的密钥库)必须作为为该密钥创建自签名证书的单独操作来完成。 即

  • 有人能帮我整合一下。带jmeter的pfx客户端证书?我已将pfx文件转换为jks文件。我已经在系统中添加了相同的功能。财产。但我无法执行客户的请求。我得到以下错误。 2018-11-08 22:31:08137信息o.a.j.u.SSLManager:JmeterKeyStore位置:C:MyWorkSpace/apache-jmeter-5.0certclientcert。jks type j

  • 问题内容: 我已经使用熊猫成功读取了一个csv文件。当我尝试从数据框中打印特定列时,出现键盘错误。因此,我与错误共享代码。 ** 有人可以帮我吗? 问题答案: 我认为首先最好调查一下,什么是真实的列名,如果转换成更好的列表会看到一些空格或类似的东西: print (reviews_new.columns.tolist()) 我认为可能有2个问题(显然): 1.列名中的空格(也可能在数据中) 解决方

  • 问题内容: 这个问题已经在这里有了答案 : 进行多个联接时,tmp表的MySQL错误密钥文件 (11个答案) 2年前关闭。 我写了一个查询,它可以在本地服务器上正确运行,它的数据较少, 但是,当我在生产服务器上运行它时,会出现错误-(此数据在6GB左右) 这是我的查询 任何人都知道如何从该错误中恢复-诸如优化此查询或其他任何方式的谢谢 问题答案: 做这些步骤 停止mysql服务 将.myi文件重命