ERROR 1033: Incorrect information in file: './qs_52_table/qs_member_table.frm' mysql数据库迁移

本文提供了解决MySQL表修复问题的详细步骤,包括错误检测、简单修复、困难修复及非常困难的修复方法。针对不同级别的损坏情况,给出了具体的修复建议。
部署运行你感兴趣的模型镜像

ERROR 1033: Incorrect information in file: './qs_52_table/qs_member_table.frm'

在mysql的一个版本到不一样的版本的时候出现了以上问题! 使用表修复都没得到解决!后来查找资料。好像是结构版本不兼容问题!

办法1:新建表(与原表一样)然后把数据导入!可以把原来备份的表清空插入新数据。

2:把原来备份的表中的.frm覆盖到新的数据库中。操作前请备份。

我的可以了,不知道是不是适合你的数据库。

下面是查找的部分资料:

13.4 使用myisamchk进行崩溃恢复 前进
 

--------------------------------------------------------------------------------
 
2004-02-12 MySQL 译者:晏子 http://www.mysql.com/doc.html
 
 
由MySQL用来存储数据的文件格式以已经被广泛地测试过,但是总是有外部情况可以导致数据库表

被破坏:

mysqld进程在一个写入当中被杀死。
计算机的意外关闭(例如,如果计算机掉电)。
一个硬件错误
这章描述如何检查和处理在MySQL数据库中的数据损坏。如果你的表损坏很多,你应该尝试找出其

原因!见G.1 调试一个MySQL服务器。

在执行崩溃恢复时,理解在一个数据库中的每一个表tbl_name对应的在数据库目录中的3个文件是

很重要的:

文件 用途
“tbl_name.frm” 表定义(表格)文件
“tbl_name.MYD” 数据文件
“tbl_name.MYI” 索引文件

这3个文件的每一个文件类型可能遭受不同形式的损坏,但是问题最常发生在数据文件和索引文件

myisamchk通过一行一行地创建一个“.MYD”(数据 )文件的副本来工作,它通过由删除老的

“.MYD 文件并且重命名新文件到原来的文件名结束修复阶段。如果你使用--quick,myisamchk不

创建一个临时“.MYD”文件,只是假定“.MYD”文件是正确的并且仅创建一个新的索引文件,不接

触“.MYD”文件,这是安全的,因为myisamchk自动检测“.MYD”文件是否损坏并且在这种情况下

,放弃修复。你也可以给myisamchk两个--quick选项。在这种情况下,myisamchk不会在一些错误

上(象重复键)放弃,相反试图通过修改“.MYD”文件解决它们。通常,只有在你在太少的空闲磁盘

空间上实施一个正常修复,使用两个--quick选项才有用。在这种情况下,你应该至少在运行

myisamchk前做一个备份。


13.4.1 怎样检查表的错误

为了检查一张表,使用下列命令:

myisamchk tbl_name
这能找出所有错误的99.99%。它不能找出的是仅仅涉及数据文件的损坏(这很不常见)。如果你想要

检查一张表,你通常应该没有选项地运行myisamchk或用-s或--silent选项的任何一个。
myisamchk -e tbl_name
它做一个完全彻底的数据检查(-e意思是“扩展检查”)。它对每一行做每个键的读检查以证实他们

确实指向正确的行。这在一个有很多键的大表上可能花很长时间。myisamchk通常将在它发现第一

个错误以后停止。如果你想要获得更多的信息,你能增加--verbose(-v)选项。这使得myisamchk继

续一直到最多20个错误。在一般使用中,一个简单的myisamchk(没有除表名以外的参数)就足够了


myisamchk -e -i tbl_name
象前面的命令一样,但是-i选项告诉myisamchk还打印出一些统计信息。

13.4.2 怎样修复表

一张损坏的表的症状通常是查询意外中断并且你能看到例如这些错误:

“tbl_name.frm”被锁定不能改变。
不能找到文件“tbl_name.MYI”(Errcode :### )。
从表处理器的得到错误###(此时,错误135是一个例外)。
意外的文件结束。
记录文件被毁坏。
在这些情况下,你必须修复表。myisamchk通常能检测并且修复出错的大部分东西。

修复过程包含最多4个阶段,在下面描述。在你开始前,你应该cd到数据库目录和检查表文件的权

限,确保他们可被运行mysqld的Unix用户读取(和你,因为你需要存取你正在检查的文件)。如果它

拒绝你修改文件,他们也必须是可被你写入的。

阶段1:检查你的表

运行myisamchk *.MYI或(myisamchk -e *.MYI,如果你有更多的时间)。使用-s(沉默)选项禁止不

必要的信息。

你必须只修复那些myisamchk报告有一个错误的表。对这样的表,继续到阶段2。

如果在检查时,你得到奇怪的错误(例如out of memory错误),或如果myisamchk崩溃,到阶段3。

舞台 2 :简单安全的修复

首先,试试myisamchk -r -q tbl_name(-r -q意味着“快速恢复模式”)。这将试图不接触数据文

件来修复索引文件。如果数据文件包含它应有的一切和在数据文件指向正确地点的删除连接,这应

该管用并且表可被修复。开始修理下一张表。否则,使用下列过程:

在继续前做数据文件的一个备份。
使用myisamchk -r tbl_name(-r意味着“恢复模式”)。这将从数据文件中删除不正确的记录和已

被删除的记录并重建索引文件。
如果前面的步骤失败,使用myisamchk --safe-recover tbl_name。安全恢复模式使用一个老的恢

复方法,处理常规恢复模式不行的少数情况(但是更慢)。
如果在修复时,你得到奇怪的错误(例如out of memory错误),或如果myisamchk崩溃,到阶段3。

舞台 3 :困难的修理

如果在索引文件的第一个16K块被破坏,或包含不正确的信息,或如果索引文件丢失,你只应该到

这个阶段 。在这种情况下,创建一个新的索引文件是必要的。按如下这样做:

把数据文件移更安全的地方。
使用表描述文件创建新的(空)数据和索引文件:
shell> mysql db_name
mysql> DELETE FROM tbl_name;
mysql> quit

将老的数据文件拷贝到新创建的数据文件之中。(不要只是将老文件移回新文件之中;你要保留一

个副本以防某些东西出错。)
回到阶段2。现在myisamchk -r -q应该工作了。(这不应该是一个无限循环)。

阶段4:非常困难的修复

只有描述文件也破坏了,你才应该到达这个阶段。这应该从未发生过,因为在表被创建以后,描述

文件就不再改变了。

从一个备份恢复描述文件并且回到阶段3。你也可以恢复索引文件并且回到阶段2。对后者,你应该

用myisamchk -r启动。
如果你没有一个备份但是确切地知道表是怎样被创建的,在另一个数据库中创建表的一个拷贝。删

除新的数据文件,然后从其他数据库将描述和索引文件移到破坏的数据库中。这给了你新的描述和

索引文件,但是让数据文件独自留下来了。回到阶段2并且尝试重建索引文件。

13.4.3 表优化

为了组合成碎片的记录并且消除由于删除或更新记录而浪费的空间, 以恢复模式运行myisamchk:

shell> myisamchk -r tbl_name

你可以用SQL的OPTIMIZE TABLE语句使用的相同方式来优化一张表,OPTIMIZE TABLE比较容易,但

是myisamchk更快。也没有在一个实用程序和服务器之间不必要的交互可能性,因为当你使用

OPTIMIZE TABLE时,服务器做所有的工作。

myisamchk也有你可用来改进一个表的性能的很多其他选项:

-S, --sort-index
 
-R index_num, --sort-records=index_num
 
-a, --analyze
 
对于选项完整的描述见13.1.1 myisamchk调用语法。
 
**************************************************
///牵手迁移问题:
***************************************************
mysql> select * from qs_member_table limit 2;
ERROR 1033: Incorrect information in file: './qs_52_table/qs_member_table.frm'
mysql> select * from qs_member_table limit 2;
ERROR 1105: File '/usr/local/mysql/var/qs_52_table/qs_member_table.MYD' not found

(Errcode: 13)
mysql> select * from qs_member_table limit 2;
ERROR 1105: File '/usr/local/mysql/var/qs_52_table/qs_member_table.MYD' not found

(Errcode: 13)
mysql> exit
Bye
[root@ccnpic root]# chown -R mysql:mysql

/usr/local/mysql/var/qs_52_table/qs_member_table.MYD;
[root@ccnpic root]# chown -R mysql:mysql

/usr/local/mysql/var/qs_52_table/qs_member_table.MYD;
[root@ccnpic root]# mysql -u root -p
新建qs_member_table.frm表结构覆盖
可能是因为表的结构不兼容的问题!

、、、、、、、、、、、、、、、、
ERROR 2013: Lost connection to MySQL server during query
‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’
ERROR 2006: MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    25
Current database: qianshou1
使用mysql做数据库还原的时候,由于有些数据很大,会出现这样的错误:The MySQL Server

returned this Error:MySQL Error Nr.2006-MySQL server has gone away。我的一个150mb的备

份还原的时候就出现了这错误。解决的方法就是找到mysql安装目录,找到my.ini文件,在文件的

最后添加:max_allowed_packet = 10M(也可以设置自己需要的大小)。 max_allowed_packet 参数

的作用是,用来控制其通信缓冲区的最大长度。

您可能感兴趣的与本文相关的镜像

TensorFlow-v2.9

TensorFlow-v2.9

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

<think>好的,我现在要解决用户提到的Docker中MySQL报错的问题,错误信息是java.sql.SQLException,具体关于文件'./criminal_case_process/act_hi_procinst.frm'的"Incorrect information in file"。首先,我需要理解这个错误的可能原因以及如何排查。 首先,用户提到使用的是Docker环境下的MySQL,所以可能需要检查容器内的配置和文件系统。错误信息中的.frm文件是MySQL用来存储表结构的文件,如果这个文件损坏或者信息不正确,可能会导致这样的错误。 接下来,我需要考虑可能的原因。根据引用中的信息,类似错误如Incorrect string value或Incorrect integer value通常与数据插入时的类型不匹配有关,比如引用[3]提到的字段顺序错误导致类型不匹配。但这里的错误是关于.frm文件的信息不正确,这可能涉及到表结构的损坏或版本不兼容。 另外,引用[2]提到磁盘空间不足导致临时文件写入失败,这也可能导致MySQL在操作表结构时出现问题。因此,需要检查Docker容器的磁盘空间是否足够,使用类似df -h的命令查看。 引用[4]涉及Docker镜像中缺少动态链接文件的问题,这可能提示检查MySQL容器是否正确配置,特别是文件挂载或存储路径是否存在问题。如果.frm文件所在的目录挂载不正确,可能导致文件损坏或无法访问。 可能的解决方案步骤包括: 1. 检查磁盘空间,确保MySQL有足够的空间进行操作。 2. 验证数据库表结构是否正确,比如使用CHECK TABLE或REPAIR TABLE命令。 3. 确认MySQL版本与.frm文件的兼容性,是否有升级或降级导致的结构不匹配。 4. 检查Docker容器的文件挂载配置,确保数据卷正确且权限合适。 5. 备份数据后尝试修复或重建问题表。 此外,用户可能需要进入MySQL容器内部,运行mysqlcheck工具来检查和修复表。如果问题依旧,可能需要从备份恢复数据,或重新创建表结构。</think>### 分步解决方案:Docker中MySQL报错`Incorrect information in file act_hi_procinst.frm`的解决方法 #### 1. 检查Docker容器磁盘空间 MySQL写入表结构或数据时,若磁盘空间不足会导致文件损坏或写入失败。 **操作步骤**: - 进入MySQL容器:`docker exec -it <容器名> /bin/bash` - 执行`df -h`查看磁盘使用率[^2] - 若空间不足,清理日志文件(如`/var/lib/mysql/`下的临时文件)或扩展存储空间 --- #### 2. 验证表结构完整性 `.frm`文件损坏可能由非正常关闭MySQL、磁盘错误或版本冲突导致。 **操作步骤**: - 进入MySQL命令行:`mysql -u root -p` - 执行表检查命令: ```sql USE criminal_case_process; CHECK TABLE act_hi_procinst; ``` - 若提示需要修复,执行: ```sql REPAIR TABLE act_hi_procinst; ``` --- #### 3. 检查MySQL版本兼容性 若MySQL版本升级后出现此问题,可能是`.frm`文件格式与新版不兼容。 **操作步骤**: - 查看MySQL版本:`SELECT VERSION();` - 若版本升级导致问题,尝试回退到原版本,或通过`mysql_upgrade`工具修复: ```bash mysql_upgrade -u root -p ``` --- #### 4. 检查Docker数据卷配置 错误的数据卷挂载可能导致文件权限或路径错误。 **操作步骤**: - 查看容器挂载配置:`docker inspect <容器名>` - 确认MySQL数据目录(如`/var/lib/mysql`)是否正确挂载到宿主机 - 检查挂载目录权限:`chown -R 999:999 /宿主机/数据目录`(MySQL容器默认用户ID为999) --- #### 5. 重建问题表(终极方案) 若文件损坏严重,需从备份恢复或重建表结构。 **操作步骤**: 1. 导出表结构: ```bash mysqldump -d criminal_case_process act_hi_procinst > table_structure.sql ``` 2. 删除问题表: ```sql DROP TABLE act_hi_procinst; ``` 3. 重新导入表结构: ```bash mysql -u root -p criminal_case_process < table_structure.sql ``` --- ### 其他注意事项 - **定期备份数据**:使用`mysqldump`或物理备份工具 - **监控磁盘使用率**:通过`crontab`设置定时清理任务 - **避免强制重启容器**:使用`docker stop`和`docker start`替代`docker kill`
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值