在我的数据库中,当从10个表中的2个表中进行选择时,我在spesefic行中给出以下消息:
ERROR 2006 (HY000): MySQL server has gone away例如,当我尝试的时候:
select * from records where id=238一切都很好,甚至是这样:
select * from records where id=270没问题。
但是当你尝试这个的时候:
select * from records where id=239返回错误:

我已经在stackoverflow和google中搜索了这个和所有的引用,提到了增加缓冲区大小和...
但我不认为这个问题与这个主题有关,它似乎一些数据是当前的表。
附言:使用的引擎是innodb
有什么线索吗?
发布于 2021-03-19 09:19:49
当操作尝试从损坏的InnoDB表中读取时,MySQL会自行关闭。
这很烦人,但这是我唯一能牢记在心的方法。
在大多数情况下都可以恢复所有数据,但对于MySQL、MariaDB和XtraDB,恢复过程是相同的。
在官方手册https://dev.mysql.com/doc/refman/8.0/en/forcing-innodb-recovery.html上有很多解释。
但是,从本质上讲,您需要在MySQL配置文件中添加一个名为innodb_force_recovery的选项,重新启动MySQL并尝试SELECT损坏的数据。这个选项从数字1到6,但是在3上面你可能会丢失一些数据。
当您找到一个允许您对这些行进行SELECT的数字时,对整个表执行mysqldump操作,以便在此之后进行恢复。
根据表的状态,您需要在不使用innodb_force_recovery的情况下启动MySQL之前手动删除该文件
rm /var/lib/mysql/myschema/corrupted_table.ibd这将导致其他问题,但是一旦数据库启动,您将需要删除旧的表空间,在另一个数据库中创建“相同的表”,并交换表空间:
USE a;
ALTER TABLE corrupted_table DISCARD TABLESPACE;
CREATE DATABASE b;
-- import the dump inside database b
-- fisically move the "ibd" file from "b" to "a"
-- mv /var/lib/mysql/a/corrupted_table.idb /var/lib/mysql/b/corrupted_table.idb
USE a;
ALTER TABLE corrupted_table IMPORT TABLESPACE;
DROP TABLE b.corrupted_table;https://stackoverflow.com/questions/66691535
复制相似问题