加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

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

发布时间:2020-12-12 00:00:01 所属栏目:MySql教程 来源:网络整理
导读:文章结构如下: 从MYSQL5.6版本开始,引入了传输表空间这个功能,可以把一张表从一个数据库移到另一个数据库或者机器上。迁移的时候很方便,尤其是大表。 由于本次达到测试使用版本5.6.38传到5.7.20。 1、数据库详情 传输和被传输数据库条件: 1、mysql版本

<tr>
<td width="165">

IP

注意:

从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;报错如下:

?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。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

文章结构如下:

从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参数(建表结构注意这个参数)

<div align="center">
<table style="width: 626px" border="1" cellspacing="0" cellpadding="0">

    推荐文章
      热点阅读