zoukankan      html  css  js  c++  java
  • mysql表空间传输(ERROR 1808) row_format设置

    文章结构如下:

    从MYSQL5.6版本开始,引入了传输表空间这个功能,可以把一张表从一个数据库移到另一个数据库或者机器上。迁移的时候很方便,尤其是大表。

    由于本次达到测试使用版本5.6.38传到5.7.20。

    1、数据库详情

    传输和被传输数据库条件:

    1、mysql版本必须是5.6及以上的版本。

    2、使用独立表空间方式,现在版本默认开启innodb_file_per_table。

    3、源库和目标库之间的page size必须一致。

    4、当表做导出操作时,该表只能进行只读操作。

    5、查看innodb_file_format参数(建表结构注意这个参数)

    IP

    数据库

    类型

    操作系统

    数据库版本

    172.16.20.30

    erp (t表)

    传输库

    Linux 6.7

    5.6.38

    172.16.20.32

    test(t表)

    被传输库

    Linux 6.7

    5.7.20

    注意:

    从MySQL5.7.7版本中innodb_file_format参数(该参数表示innodb文件格式)的默认值发生了变化,在MySQL5.7.7以前innodb_file_format参数默认是Antelope而默认的行格式是(ROW_FORMAT)是COMPACT从MySQL5.7.7以后版本innodb_file_format默认值为Barracuda默认的行格式是(ROW_FORMAT)是DYNAMIC所以需要在创建表结构时指定row_format=compact从MySQL5.7.7版本中innodb_file_format参数(该参数表示innodb文件格式)的默认值发生了变化,在MySQL5.7.7以前innodb_file_format参数默认是Antelope,而默认的行格式是(ROW_FORMAT)是COMPACT,从MySQL5.7.7以后版本innodb_file_format默认值为Barracuda,默认的行格式是(ROW_FORMAT)是DYNAMIC,所以需要在创建表结构时指定row_format=compact;5.7.7以后版本到5.6经测试未通过;

    2、传输条件检查

    1、传输数据库条件检查

    版本:5.6.38(满足要求)

     

    innodb_file_per_table参数

    mysql> show global variables like 'innodb_file_per_table';

    +-----------------------+-------+

    | Variable_name         | Value |

    +-----------------------+-------+

    | innodb_file_per_table | ON    |

    +-----------------------+-------+

    1 row in set (0.00 sec)

     

    查看传输page size(满足要求)

     

    page size 16k

    MySQL5.7.7以前innodb_file_format参数默认是Antelope,而默认的行格式是(ROW_FORMAT)是COMPACT,从MySQL5.7.7以后版本innodb_file_format默认值为Barracuda,默认的行格式是(ROW_FORMAT)是DYNAMIC,所以需要在创建表结构时指定row_format=compact;

    2、被传输数据库条件检查

    版本:5.7.20(满足要求)

     

    innodb_file_per_table参数(满足)

     

    查看传输page size

     

    page size(16K)

    查看innodb_file_format参数:

     

    MySQL5.7.7以前innodb_file_format参数默认是Antelope,而默认的行格式是(ROW_FORMAT)是COMPACT,从MySQL5.7.7以后版本innodb_file_format默认值为Barracuda,默认的行格式是(ROW_FORMAT)是DYNAMIC,所以需要在创建表结构时指定row_format=compact;

      

    3、传输演练

    1、被传送库建表(表结构,名称一样)

    查看传送端建表语句:

    CREATE TABLE `t` (

      `id` int(11) DEFAULT NULL

    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

     

    注意:

    如果此处(向高版本传送表空间)row_format不一样,建表不设置row_format;报错如下:

    ERROR 1808 (HY000): Schema mismatch (Table flags don't match, server table has 0x4 and the meta-data file has 0x21)

     test库建一张t表:

    CREATE TABLE `t` (

      `id` int(11) DEFAULT NULL

    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 row_format=compact;

      

    2、卸载被传送端表空间数据文件

    注意,这个不能用操作系统删除。

    查看生成的数据文件:

     

    卸载表空间数据文件

    alter table t discard tablespace;

     

    查看数据文件是否卸载:

     

    无t.idb文件,已卸载。

    3、在传送端执行表空间导出操作

    在传送端(erp库执行)

    flush table t for export;

     

    多了一个t.cfg文件。

     

    将t.cfg,t.ibd文件复制到erp库指定路径并修改权限。

     

    4、被传送端执行导入操作

    传送端test数据库执行解锁操作(因为目前处于只读操作,需要解锁操作)

    unlock tables;

     

    被传送端执行导入操作:

    alter table t import tablespace;

    select count(*) from t;

     

     成功把5.6.38 erp.t数据传输到5.7.20 test.t。

  • 相关阅读:
    面试题23:从上往下打印二叉树
    面试题22:栈的压入、弹出序列
    【opencv基础】imwrite函数与图像存储质量
    【c++基础】从json文件提取数据
    【图像处理基础】LBP特征
    【机器学习基础】SVM实现分类识别及参数调优(二)
    【leetcode】14-LongestCommonPrefix
    【leetcode】13-Roman2Integer
    【leetcode】9-PalindromeNumber
    【leetcode】7-ReverseInteger
  • 原文地址:https://www.cnblogs.com/hmwh/p/9122408.html
Copyright © 2011-2022 走看看