mysql表空间恢复_mysql通过表空间来恢复或者传递数据

mysql的备份工具通常有 mysqldump ,mysqlpump(5.7后新特性)等备份工具,这里我们可以尝试使用表空间进行传递

方式是:拷贝数据文件+拷贝表空间   对应innodb引擎就是 ibd文件和cfg文件

执行此种方式的要求

(1)需要使用独立表空间,开启innodb_file_per_table参数;

(2)在做表导出时,该表只允许读不允许写;

(3)导入导出的数据data page size必须一样;

(4)在 MySQL 5.7.4之前的版本是不能对分区表做分区迁移;

(5)使用外键的表,需要使用 set foreign_key_check=0强制忽略外键,否则不支持表空间的导入导出,分布表不支持外键表空间的导入导出;

下面举个例子进行说明

准备两个mysql,源+目标,同时进行建表命令,一个我们称呼为源mysql,一个称呼为目标mysql

create table first(id int,name char(16));

在源mysql中插入数据

insert into first values(1,‘ni‘),(2,‘wo‘),(3,‘ta‘);

在目标mysql上面释放表空间

alter table first discard tablespace; #相当于删除了first.ibd文件,留下了 first.frm

此时你可以对 frm 文件操作,例如:rename table,drop table ,但是不能对 ibd 文件操作,比如:dml

验证结果:

在源mysql上面创建.cfg元数据文件,注意,不要关闭当前窗口,否则消失

flush tables first for export; #此时,源MySQL有了first.cfg文件,

验证情况:

insert into first values(10,‘hehe‘); DML 操作是阻塞的

ERROR 1099 (HY000): Table ‘first‘ was locked with a READ lock and can‘t be updated

复制first.cfg文件和first.ibd文件到目标mysql

cp 源mysql路径/first.{cfg,ibd} 目标mysql/

修改权限

chown mysql.mysql *

源mysql释放锁

UNLOCK TABLES;

目标mysql导入表空间

alter table first import tablespace;

目标mysql查看结果

select * from first;

分区表空间传递(mysql5.7.4之后的版本)

。。。。

原文:https://www.cnblogs.com/mmyy-blog/p/11413955.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值