zoukankan      html  css  js  c++  java
  • MySQL5.6数据导入MySQL5.7报错:ERROR 1031 (HY000)

    一、故障现象

    今天将一个在MySQL5.7上的数据导入到MySQL5.6里面去,默认存储引擎都是InnoDB,导入报错如下:

    [root@oratest52 data]# mysql -uroot -p123456 < /data/127.sql
    ERROR 1031 (HY000) at line 598885: Table storage engine for 't_config_dbconnects' doesn't have this option
    

    报错提示598885行有问题,t_config_dbconnects表的存储引擎不支持这个选项。由于备份文件较大(50G),不可能用vi打开去看,用sed文件查看该表的建表sql如下:

    [root@oratest52 data]# sed -n '598870,598899p' 127.sql
    --
    -- Current Database: `db_config`
    --
    
    CREATE DATABASE /*!32312 IF NOT EXISTS*/ `db_config` /*!40100 DEFAULT CHARACTER SET utf8 */;
    
    USE `db_config`;
    
    --
    -- Table structure for table `t_config_dbconnects`
    --
    
    DROP TABLE IF EXISTS `t_config_dbconnects`;
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `t_config_dbconnects` (
      `ID` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
      `NAME` char(50) DEFAULT NULL,
      `HOST` char(50) NOT NULL DEFAULT '',
      `PORT` char(10) NOT NULL DEFAULT '',
      `USER` char(50) NOT NULL DEFAULT '',
      `PASSWORD` char(50) NOT NULL DEFAULT '',
      `CHARSET` char(30) DEFAULT NULL,
      `DBNAME` char(50) NOT NULL DEFAULT '',
      `ABOUT` char(200) DEFAULT NULL,
      `POSTTIME` datetime DEFAULT NULL,
      `LASTUSER` char(50) DEFAULT NULL,
      PRIMARY KEY (`ID`),  
      UNIQUE KEY `IDX_NAME` (`NAME`)
    ) ENGINE=InnoDB AUTO_INCREMENT=84 DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED;
    

    可以看到最后一行中有ROW_FORMAT=FIXED

    二、初步分析

    发现报错的表的ROW_FORMAT格式是FIXED,并不是我们熟悉的Dynamic。查看资料和官方文档发现不同版本或者不同源的MySQL对于行记录格式的处理方式不一样,解决上述问题就先要了解row_format的改进历程,这里简单介绍下MyISAM和InnoDB两种存储引擎对于row_format格式的处理。

    2.1MyISAM存储引擎

    MyISAM有3种行存储格式:fixed/dynamic/compressed

    1. fixed:为默认格式,只有当表不包含变长字段(varchar/varbinary/blob/text)时使用,该每行都是固定的,所以很容易获取行在页上的具体位置,存取效率比较高,但是占用磁盘空间较多
    2. dynamic:每行都有一个行头部,包含bitmap,用以记录那些列为空(NULL列不算为空)
    3. compressed只能通过myisampack创建且为只读

    2.2InnoDB存储引擎

    Innodb plugin新引入Barracuda,其包含compressed/dynamic两种行格式,而之前的compact/redundant统属于antelope;目前可选值为Antelope和Barracuda,低版本默认为Antelope,高版本默认为Barracuda。
    了解这两种存储引擎如上两种row_format格式后,就能明白对一张MyISAM表且row_format为fixed格式的表更改存储殷勤为InnoDB肯定是不行的,因为InnoDB的row_format不支持fixed格式。所以可以先备份要更改引擎的表数据,然后将表的row_format更改为存储引擎都能识别的row_format,再进行引擎的变更。

    mysql> alter table t_config_dbconnects ROW_FORMAT = default;
    Query OK, 0 rows affected (0.15 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    mysql> alter table t_config_dbconnects engine = innodb;
    Query OK, 0 rows affected (2.67 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    WilliamZheng©版权所有 转载请注明出处! 运维架构师群:833329925
  • 相关阅读:
    Sample XPS Documents Download
    触发器中的inserted表和deleted表
    Using freewheel.labs.autodesk.com to auto generate preview images of DWF files on your web site
    解除SQL对组件"Ad Hoc Distributed Queries"的"STATEMENT'OpenRowset OpenDatasource"的访问
    读写xps
    XPS文件,在Windows XP下的打开查看阅读和打印方法。
    Learning to Reference Inserted and Deleted Tables
    Get value from updated, inserted and deleted
    Reinstall Microsoft Helper Viewer
    如何查找文件的IFilter
  • 原文地址:https://www.cnblogs.com/williamzheng/p/11453101.html
Copyright © 2011-2022 走看看