文章结构如下:
从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 border="1" cellspacing="0" cellpadding="0">
<tr>
<td wIDth="165">
IP
数据库 *** 作系统数据库版本172.16.20.30erp (t表)传输库linux 6.75.6.38172.16.20.32test(t表)被传输库linux 6.75.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;报错如下:
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。
总结以上是内存溢出为你收集整理的mysql表空间传输(ERROR 1808) row_format设置全部内容,希望文章能够帮你解决mysql表空间传输(ERROR 1808) row_format设置所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)