mysql1808_mysql表空间传输(ERROR 1808) row_format设置

本文详细介绍了如何在MySQL 5.6和5.7之间传输表空间,特别强调了在不同版本间由于innodb_file_format和ROW_FORMAT变化导致的问题。在迁移过程中,需要确保相同版本的页大小,设置innodb_file_per_table为ON,并在创建表时指定row_format=compact以避免ERROR 1808。文中给出了具体的建表、卸载表空间、导出和导入的操作步骤。
摘要由CSDN通过智能技术生成

文章结构如下:

f7592b773d1521557db97dcb000dc5e9.png

从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(满足要求)

80e4a95472e0450d17f53651eef215d3.png

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)

2bd4a9efe11f0b2c88d001b61b60135c.png

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

c193de4e614b7d264b4347d7319c4b4d.png

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(满足要求)

2f0ae2b3a48508bc2a61b4962bdd6b5c.png

innodb_file_per_table参数(满足)

f9c0eae303b48ab335c17b84c03c02bf.png

查看传输page size

bddeae8b0251a6b95f5eee86437b3dd5.png

page size(16K)

查看innodb_file_format参数:

e2aec4c73455ea41a6863244219fb470.png

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;

d84a988b4ddfb981a545fac03e02f11a.png

注意:

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

5208e60f9e977518d0cd7b0b308262bb.png

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;

ba88132ea4d8827ae8cc5629a70caa9a.png

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

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

查看生成的数据文件:

439597d8c505d6ab2942dd5774643641.png

卸载表空间数据文件

alter table t discard tablespace;

ae71ced329dcbcad7867bd36c77ac1b0.png

查看数据文件是否卸载:

15a03808015a87eebebc95cf6b7e0fac.png

无t.idb文件,已卸载。

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

在传送端(erp库执行)

flush table t for export;

78fd64df5d49709e95855f55bd5c53ab.png

多了一个t.cfg文件。

70ab3f8a019d241cadd8e1854b6f2ae2.png

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

85ae46ffec1b33c846091eb8999abc09.png

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

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

unlock tables;

9dd3b15055f8b2af164276592c901f95.png

被传送端执行导入操作:

alter table t import tablespace;

select count(*) from t;

d3ad9d5ccfe5d9d51b7726b27ff3cc85.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值