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

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

.cfg: 该文件存储了表的数据字典信息

执行此种方式的要求

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

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

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

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

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

使用这种的方式的几个限制

源库和目标库版本一致

只适用于 innodb 引擎表

源库执行 flush tables tfor export 时,该表会不可写

对于移动一个大表我们来思考一下

使用mysqldump+source的方式:考虑逻辑备份的语句是不是很多,对于一个大表,如果用了很长时间的话,操作频繁,耗时也长

使用select into outfile+ load infile 会快一点,但是在生产上主从的环境,要知道主库会将所有的数据当作一个事务执行,只有把数据全部成功插入后,才会将 binlog 复制到从库,

这样会造成从库严重延迟,而且生成的单个 binlog 大小严重超标,在磁盘空间不足时可能会把磁盘占满。

使用xtraback增量备份的话,如何之前一直有备份最好,合并就行,临时使用的话,io消耗比较大,备份的文件大小也比mysqldump的大

使用移动表空间,消耗的时间较短,但是要考虑锁表的问题,并且目标数据库需要提前建库建表

下面举个例子进行说明

1 普通表空间的传递

准备两个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;

注意:如果是加密的表空间,传递的文件就是 .cfp  .cfg  .ibd三个文件

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

接替上一篇博客建立的分区表 test_range_partition 我们来做分区表的迁移

在目标服务器上面建立database和表test_range_partition

mysql>CREATE TABLE test_range_partition(->id INT auto_increment,->createdate DATETIME,->primary key (id,createdate)->)->PARTITION BY RANGE (TO_DAYS(createdate) ) (-> PARTITION p201801 VALUES LESS THAN ( TO_DAYS('20180201') ),-> PARTITION p201802 VALUES LESS THAN ( TO_DAYS('20180301') ),-> PARTITION p201803 VALUES LESS THAN ( TO_DAYS('20180401') ),-> PARTITION p201804 VALUES LESS THAN ( TO_DAYS('20180501') ),-> PARTITION p201805 VALUES LESS THAN ( TO_DAYS('20180601') ),-> PARTITION p201806 VALUES LESS THAN ( TO_DAYS('20180701') ),-> PARTITION p201807 VALUES LESS THAN ( TO_DAYS('20180801') ),-> PARTITION p201808 VALUES LESS THAN ( TO_DAYS('20180901') ),-> PARTITION p201809 VALUES LESS THAN ( TO_DAYS('20181001') ),-> PARTITION p201810 VALUES LESS THAN ( TO_DAYS('20181101') ),-> PARTITION p201811 VALUES LESS THAN ( TO_DAYS('20181201') ),-> PARTITION p201812 VALUES LESS THAN ( TO_DAYS('20190101') )->);

Query OK, 0 rows affected (0.06 sec)

在目标服务器上面删除表的指定分区表空间

alter table test_range_partition discard partition p201802 tablespace;

查看

[root@localhost target]#ls

db.opt test_range_partition#P#p201805.ibd test_range_partition#P#p201810.ibd

test_range_partition.frm test_range_partition#P#p201806.ibd test_range_partition#P#p201811.ibd

test_range_partition#P#p201801.ibd test_range_partition#P#p201807.ibd test_range_partition#P#p201812.ibd

test_range_partition#P#p201803.ibd test_range_partition#P#p201808.ibd

test_range_partition#P#p201804.ibd test_range_partition#P#p201809.ibd

源服务器上面导出表空间,并复制到目标服务器上面

mysql> flush tables test_range_partition forexport;

Query OK, 0 rows affected (0.00 sec)

scp 源服务器ip/test_range_partition#P#p201802.{cfg,ibd} 目标服务器/

查看目标服务器的内容,并修改权限,否则导入的时候报错

[root@localhost target]#ls

db.opt test_range_partition#P#p201803.ibd test_range_partition#P#p201808.ibd

test_range_partition.frm test_range_partition#P#p201804.ibd test_range_partition#P#p201809.ibd

test_range_partition#P#p201801.ibd test_range_partition#P#p201805.ibd test_range_partition#P#p201810.ibd

test_range_partition#P#p201802.cfg test_range_partition#P#p201806.ibd test_range_partition#P#p201811.ibd

test_range_partition#P#p201802.ibd test_range_partition#P#p201807.ibd test_range_partition#P#p201812.ibd

chown mysql.mysql *

源服务器释放锁

mysql>unlock tables;

Query OK, 0 rows affected (0.00 sec)

目标服务器导入表空间

mysql> alter table test_range_partition importpartition p201802 tablespace; #这里报错是因为没有修改属主

ERROR1812 (HY000): Tablespace is missing fortable `target`.`test_range_partition`.

mysql> alter table test_range_partition importpartition p201802 tablespace;

Query OK, 0 rows affected (0.02sec)

mysql> select * fromtest_range_partition; #只有两个数据,是因为导入了一个分区表空间,可以尝试导入所有的表空间+----+---------------------+

| id | createdate |

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

| 2 | 2018-02-05 00:00:00 |

| 3 | 2018-02-06 00:00:00 |

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

2 rows in set (0.00 sec)

空间mysql数据还原_mysql通过表空间来恢复或者传递数据相关推荐

  1. 清除mysql数据碎片_MySQL 清除表空间碎片方法总结

    mysql数据库会生成空间碎片了,这些空间碎片对于我们来讲影响不大但如果空间碎片多了会导致mysql查询缓存了,下面一起来看MySQL 清除表空间碎片方法吧,具体的如下所示. 碎片产生的原因 (1)表 ...

  2. mysql 查看表v空间自增涨_MySQL InnoDB表空间加密

    从 MySQL5.7.11开始,MySQL对InnoDB支持存储在单独表空间中的表的数据加密 .此功能为物理表空间数据文件提供静态加密.该加密是在引擎内部数据页级别的加密手段,在数据页写入文件系统时加 ...

  3. mysql ibd文件还原_MySQL单表ibd文件恢复方法详解

    前言: 随着innodb的普及,innobackup也成为了主流备份方式.物理备份对于新建slave,全库恢复的需求都能从容应对. 但当面临单表数据误删,或者单表误drop的情况,如果使用物理全备进行 ...

  4. mysql表空间不足_MySQL Innodb表空间不足的处理方法 风好大

    官方给出的解决方案: 添加和删除 InnoDB 数据和日志文件 这一节描述在InnoDB表空间耗尽空间之时,或者你想要改变日志文件大小之时,你可以做的一些事情. 最简单的,增加InnoDB表空间大小的 ...

  5. mysql数据库表空间压缩,表空间中有数据也可以压缩表空间(数据文件)大小!!...

    首先说声抱歉,在 中提出以下观点,经过研究请教,发现观点都是错误的,在这里给予更正. 3.得知表空间中有数据不能resize数据文件的大小:要想resize数据文件,那么表空间中必须没有数据. 更正后 ...

  6. mysql 表空间修改_mysql8 参考手册--调整系统表空间

    系统表空间是更改缓冲区的存储区.如果在系统表空间中创建表,而不是在每个表文件或常规表空间中创建表,则它也可能包含表和索引数据.在以前的MySQL版本中,系统表空间包含InnoDB数据字典.在MySQL ...

  7. mysql数据库优化课程---16、mysql慢查询和优化表空间

    mysql数据库优化课程---16.mysql慢查询和优化表空间 一.总结 一句话总结: a.慢查询的话找到存储慢查询的那个日志文件 b.优化表空间的话可以用optimize table sales; ...

  8. mysql的Innodb的系统表空间和独立表空间

    mysql的Innodb的系统表空间和独立表空间 ============================================================= 主要区别 1:系统表空间无 ...

  9. Mysql ——区、段、表空间 、碎片区

    目录 1.页的上层结构 2.区.段 与碎片区 2.1.为什么要有区? 2.2 为什么要有段? 2.3 为什么要有碎片区? 2.4 区的分类 3.表空间 3.1 独立表空间 3.2 系统表空间 附录:数 ...

最新文章

  1. 订阅号助手App发布 手机也能管理公众号了
  2. 你的网站添加X-UA-Compatible meta标签了吗?
  3. invoke 数组_对于反射中的invoke()方法的理解
  4. c语言和其他高级语言一样也要经过编译,C语言和其他高级语言的最大的区别是什么?...
  5. python pip命令无法运行_Pip-启动程序中的致命错误:无法使用“”创建进程
  6. 【jQuery】总结:筛选器、控制隐藏、操作元素style属性
  7. jacoco + junit + mock 单测没有统计覆盖率问题
  8. powerdesigner-建立数据库模型及全局脚本
  9. JPA ---- 表之间的映射关系
  10. 先河系统为你讲解私有云服务器的优点
  11. Boruta特征筛选
  12. matlab参数方程求导 求不定积分
  13. 【性能测试】性能测试中问题反思和心得
  14. QMH、AMC和STM之间的关系
  15. MySQL使用JDBC高级操作和事务
  16. win10如何激活电脑系统
  17. 解决active样式在ios手机上没有生效的问题
  18. LeetCode 28 Implement strStr()(实现strStr()函数)
  19. windows 查看IP地址或端口是否可以连接-常用命令
  20. 一个大神的twitter

热门文章

  1. 变更数据推送java_idea 团队成员修改工程后push推送
  2. 检测空指针 静态检测_动态扭矩和静态扭矩的区分及其应用
  3. 华为p20支持手机云闪付吗_余承东:明年华为智能手机全面支持鸿蒙系统
  4. php位运算符与逻辑运算_位运算符及PHP中位运算的应用笔记
  5. 1×pbs缓冲液配方_【应用】蒸渗仪与氧化还原电位的测量1
  6. 【转】SQLServer数据库还原数据库后因孤立用户问题导致无法登陆的处理
  7. 学习笔记:杨辉三角形上莫队(组合数莫队)(LULU胡策)
  8. mysql环境变量的配置
  9. Magento站点优化方案
  10. jQuery 的属性操作方法