MySQL无法打开情况下读取frm文件的表结构

一、背景:

        开发人员通过MySQL客户端工具,可以访问MySQL5.7.6,可以访问具体的DB,可以查看小写表的数据,但是无法查看大写表的数据,报错信息为“table does not exist”。

二、检查与分析:

        ssh登录MySQL数据库Linux主机,使用命令行工具,本地访问MySQL,也出现“table does not exist”问题,检查数据库参数lower_case_table_names=1

        检查MySQL官方文档,查看参数描述与默认值等信息。

Command-Line Format--lower-case-table-names[=#]
System Variablelower_case_table_names
ScopeGlobal
DynamicNo
TypeInteger
Default Value (macOS)2
Default Value (Unix)0
Default Value (Windows)1
Minimum Value0
Maximum Value2

If set to 0, table names are stored as specified and comparisons are case-sensitive. If set to 1, table names are stored in lowercase on disk and comparisons are not case-sensitive.If set to 2, table names are stored as given but compared in lowercase. This option also applies to database names and table aliases. For additional details, see Section 9.2.3, “Identifier Case Sensitivity”.

        发现lower_case_table_names参数被修改,数据库只能识别小写,所以开发人员的大写表does not exist,但是表结构依然存在于MySQL中。

三、解决办法:

        解决方法1:表结构替换

       1)在异机上新建库、新建表,创建相同名称的大表,字段数量没有限制,可以只有一个字段id

                create table TTT1(id int primary key);

        2)将问题库中的TTT1.frm文件替换异机上新建的TTT1.frm文件。

        3)重启MySQL服务。

        4)查看表结构show create table TTT1

        5)如果提示表的字段数据不一致,则考虑创建相同字段数量的表TTT1

        6)可能需要设置innodb_force_recovery=6并重启mysql

        解决方法2:使用mysql utilities工具解析frm文件

        1)下载并安装mysql utilities

        2)可能还需要下载并安装mysql-connector-python

        3)在Linux主机上安装以上两个rpm包

                rpm -ivh mysql-utilities-1.6.5-1.el7.noarch.rpm mysql-connector-python-2.1.7-1.el7.x86_64.rpm

        4)查看mysql-utilities工具包

                rpm -qa|grep mysql-utilities

                rpm -ql mysql-utilities-1.6.5-1.el7.noarch

                which mysqlfrm

                确认mysqlfrm工具已安装

        5)mysqlfrm使用帮助

                man mysqlfrm

                mysqlfrm --help

四、具体操作:

        frm文件解析,可以使用--diagnostic参数

        mysqlfrm --diagnostic TTT1.frm

五、结论:

        如果只需要表结构,则可以考虑使用mysql utilities工具提供的mysqlfrm解析frm文件。

        如果需要数据,则考虑将数据库参数lower_case_table_names修改为默认值。原则上,MySQL创建完成后,不允许修改lower_case_table_names参数值。

        

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值