首页 > 其他分享 >.ibd迁移数据

.ibd迁移数据

时间:2023-08-03 17:36:17浏览次数:31  
标签:test2 root ibd Jul ----- EMP mysql 迁移 数据

概述

从MySQL 5.6版本开始,引入了传输表空间这个功能,可以把一张表从一个数据库移到另一个数据库或者另一台机器上。在做数据迁移时,非常方便,尤其是针对一张数据量很大的表来说。相比mysqldump的方式,表空间传输要快很多,而且更加灵活。
当然如果想使用表空间传输的功能,也必须满足以下几个条件:

(1) MySQL版本必须是5.6及以上的版本。

(2)使用独立表空间方式,本次实验使用的5.7.20,默认开启innodb_file_per_table。

(3)源库与目标库之间的page size必须一致。

(4)当表做导出操作时,该表只能进行只读操作。

测试目标

目标:把test库下面的EMP这张表的数据传输到test2库下EMP表中,test库下EMP表中的数据如下:

root@db 23:02:  [test]> select * from EMP;
+-------+-------+-------+------+---------------------+------+------+--------+
| EMPNO | ENAME | JOB   | MGR  | HIREDATE            | SAL  | COMM | DEPTNO |
+-------+-------+-------+------+---------------------+------+------+--------+
|  7876 | ADAMS | CLERK | 7788 | 1987-05-23 00:00:00 | 1100 | NULL |     20 |
|  7900 | JAMES | CLERK | 7698 | 1981-12-03 00:00:00 |  950 | NULL |     30 |
+-------+-------+-------+------+---------------------+------+------+--------+
2 rows in set (0.00 sec)

测试过程

首先,创建test2库,并在test2库下创建一张与test库下EMP表结构一样的EMP表:

root@db 23:08:  [(none)]> create database test2;
Query OK, 1 row affected (0.01 sec)

root@db 23:09:  [(none)]> use test2;
Database changed

root@db 23:09:  [test2]> CREATE TABLE `EMP` (
    ->   `EMPNO` int(10) NOT NULL,
    ->   `ENAME` varchar(10) DEFAULT NULL,
    ->   `JOB` varchar(9) DEFAULT NULL,
    ->   `MGR` int(10) DEFAULT NULL,
    ->   `HIREDATE` datetime DEFAULT NULL,
    ->   `SAL` int(10) DEFAULT NULL,
    ->   `COMM` int(10) DEFAULT NULL,
    ->   `DEPTNO` int(10) DEFAULT NULL,
    ->   PRIMARY KEY (`EMPNO`),
    ->   KEY `FK_DEPTNO` (`DEPTNO`)
    -> ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Query OK, 0 rows affected (0.07 sec)

root@db 23:09:  [test2]> desc EMP;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| EMPNO    | int(10)     | NO   | PRI | NULL    |       |
| ENAME    | varchar(10) | YES  |     | NULL    |       |
| JOB      | varchar(9)  | YES  |     | NULL    |       |
| MGR      | int(10)     | YES  |     | NULL    |       |
| HIREDATE | datetime    | YES  |     | NULL    |       |
| SAL      | int(10)     | YES  |     | NULL    |       |
| COMM     | int(10)     | YES  |     | NULL    |       |
| DEPTNO   | int(10)     | YES  | MUL | NULL    |       |
+----------+-------------+------+-----+---------+-------+
8 rows in set (0.00 sec)


在test2数据目录下,能看到生成了 EMP表的文件信息:

[root@source test2]# pwd
/data/mysql/test2
[root@source test2]# 
[root@source test2]# ll
total 128
-rw-r----- 1 mysql mysql     65 Jul  5 23:09 db.opt
-rw-r----- 1 mysql mysql   8780 Jul  5 23:09 EMP.frm
-rw-r----- 1 mysql mysql 114688 Jul  5 23:09 EMP.ibd

 

接下来,需要卸载test2库下EMP表的表空间:

alter table EMP discard tablespace;

root@db 23:13:  [test2]> alter table EMP discard tablespace;
Query OK, 0 rows affected (0.01 sec)

[root@source test2]# ll
total 16
-rw-r----- 1 mysql mysql   65 Jul  5 23:09 db.opt
-rw-r----- 1 mysql mysql 8780 Jul  5 23:09 EMP.frm

结果发现数据目录test2库下EMP.ibd文件被删除了。

注意:
卸载表空间时要注意,一定要在目标库test2下操作,而且是在数据库命令行下,执行alter table table_name discard tablespace命令完成的。绝对不是在系统层面进行rm操作,这里一定要切记。

然后在test库下执行表空间导出的操作:

flush table EMP for export;

锁表

root@db 23:16:  [test]> flush table EMP for export;
Query OK, 0 rows affected (0.00 sec)

将test库下的EMP.ibd文件复制到test2库下,并修改mysql权限:

[root@source test]# pwd
/data/mysql/test
[root@source test]# 
[root@source test]# ll
total 32304
-rw-r----- 1 mysql mysql     8648 Jul  5 21:06 BONUS.frm
-rw-r----- 1 mysql mysql    98304 Jul  5 21:06 BONUS.ibd
-rw-r----- 1 mysql mysql       65 Jul  5 21:06 db.opt
-rw-r----- 1 mysql mysql     8624 Jul  5 21:06 DEPT.frm
-rw-r----- 1 mysql mysql    98304 Jul  5 21:06 DEPT.ibd
-rw-r----- 1 mysql mysql     8780 Jul  5 23:34 EMP.frm
-rw-r----- 1 mysql mysql    98304 Jul  5 23:34 EMP.ibd
-rw-r----- 1 mysql mysql     8626 Jul  5 21:06 SALGRADE.frm
-rw-r----- 1 mysql mysql    98304 Jul  5 21:06 SALGRADE.ibd
-rw-r----- 1 mysql mysql     8632 Jul  5 21:41 sbtest.frm
-rw-r----- 1 mysql mysql 32505856 Jul  5 21:41 sbtest.ibd
[root@source test]# 
[root@source test]# cp EMP.ibd /data/mysql/test2
[root@source test]# 
[root@source test]# cd /data/mysql/test2
[root@source test2]# 
[root@source test2]# ll
total 220
-rw-r----- 1 mysql mysql    65 Jul  5 23:09 db.opt
-rw-r----- 1 mysql mysql  8780 Jul  5 23:09 EMP.frm
-rw-r----- 1 root  root  98304 Jul  6 08:42 EMP.ibd
[root@source test2]# 
[root@source test2]# chown mysql:mysql EMP.ibd
[root@source test2]# 
[root@source test2]# ll
total 220
-rw-r----- 1 mysql mysql    65 Jul  5 23:09 db.opt
-rw-r----- 1 mysql mysql  8780 Jul  5 23:09 EMP.frm
-rw-r----- 1 mysql mysql 98304 Jul  6 08:42 EMP.ibd

 

权限授完之后,因为test库目前处于只读操作,为了不影响test库的使用,所以需要执行解锁操作:UNLOCK TABLES;
执行flush table EMP for export会锁表,要UNLOCK TABLES或者退出会话,就可以解锁。

在test2库下,执行表空间导入操作:

alter table EMP import tablespace;

root@db 08:59:  [test2]> alter table EMP import tablespace;
Query OK, 0 rows affected, 2 warnings (0.06 sec)

最终,发现己经成功把test库下EMP的数据传输到test2库下的EMP表中。

root@db 08:59:  [test2]> select * from EMP;
+-------+-------+-------+------+---------------------+------+------+--------+
| EMPNO | ENAME | JOB   | MGR  | HIREDATE            | SAL  | COMM | DEPTNO |
+-------+-------+-------+------+---------------------+------+------+--------+
|  7876 | ADAMS | CLERK | 7788 | 1987-05-23 00:00:00 | 1100 | NULL |     20 |
|  7900 | JAMES | CLERK | 7698 | 1981-12-03 00:00:00 |  950 | NULL |     30 |
+-------+-------+-------+------+---------------------+------+------+--------+
2 rows in set (0.00 sec)

标签:test2,root,ibd,Jul,-----,EMP,mysql,迁移,数据
From: https://blog.51cto.com/u_13482808/6951138

相关文章

  • Activity之间数据交流一(startActivityForResult , onActivityResult , setResult 的用
    主Activity)上能连接往许多不同子功能模块(子Activity上去),当子模块的事情做完之后就回到主界面,或许还同时返回一些子模块完成的数据交给主Activity处理。这样的数据交流就要用到主Activity回调函数onActivityResult()。一些方法: 主Activity中:<1>主Activity......
  • 接口相似数据结构复用率高?Apipost这招搞定!
    在API设计和开发过程中,存在许多瓶颈,其中一个主要问题是在遇到相似数据结构的API时会产生重复性较多的工作:在每个API中都编写相同的数据,这不仅浪费时间和精力,还容易出错并降低API的可维护性。为了解决这个问题,Apipost推出了数据模型板块。用户可以预先创建多个数据模型,并在API设计......
  • R&S 图片或者文件数据解析
    当我们使用SCPI命令获取图片或者文件内容时,需要对返回的数据进行解析一般来说返回的数据以#6123456XXXXXXXXXXXXXXX。。。。开始现在对数据解析:#表示数据的开始#后的第一个数字为以多少位数字来表示文件的大小(字节长度)从以上的例子看6代表后面的6位数字代表文件数据的大小,所......
  • 一篇文章告诉你客户体验管理中数据的重要性
    客户服务有多重要相信一件事情相信也不用looklook多说啦!那为了给客户提供到更加完善的客户体验,我们就要去对客户体验进行管理。其中最直观的方法就是去整理客户体验的数据,数据可以给我们带来很多信息。客户体验数据是什么收集全渠道、全触点的客户体验数据是进行客户体验管理的第一......
  • 【专题】2022年中国母婴新消费市场专题分析报告PDF合集分享(附原数据表)
    报告链接:http://tecdat.cn/?p=31424人口出生红利消失,以及后疫情时代的冲击,但消费升级将负面因素拉平,母婴消费市场总量持续稳步上升。"精致妈妈"的营销价值日益凸显。阅读原文,获取专题报告合集全文,解锁文末56份母婴行业相关报告。当母婴人群成为众多母婴及家庭消费品的重要入口群......
  • QuickBI提供数据可视化分析功能的工具,企业免费使用
    数字化转型的快速推进促使国内企业积极寻求数字化升级。在这个过程中,企业的创新和发展模式不断变化,尤其是对于数据驱动的智能决策系统的重要性越来越凸显。商业智能(BI)工具市场正在不断发展壮大,作为一种创新的数据分析和决策支持工具,它能够帮助企业从大量信息中提取和利用,为企业提供......
  • 一组数据差值之和最大
    #include<bits/stdc++.h>usingnamespacestd;classSolution{std::vector<std::string>split(std::string&str,charch){std::vector<std::string>ans;str+=ch;inti=0;for(intj=0;j<s......
  • 全国各乡镇的边界数据,json格式适配echarts;
    湖南省的数据现有,联系我获取(免费、帮我看一下小程序);其他省份可通过联系我用脚本获取(要手动输入验证码),或者网站获取(tips:每个区县需要一个个手动下载,且每个下载需要输入验证码):https://www.poi86.com/ ......
  • oracle修改数据类型报错
    1. nvarchar和blob类型转换时,直接modify会报错ORA-01735:invalidALTERTABLEoption2. 数字类型降低精度时 当数据库已有数据时,会报错ORA-01440:columntobemodifiedmustbeemptytodecreaseprecisionorscale 以上两种字段类型修改错误可以通过一下方式来避免......
  • 国标GB28181平台LntonGBS(源码版)国标视频平台在连接MySQL数据库时提示“can’t connect
    LntonGBS国标视频云服务平台不仅支持无缝、完整接入内网或者公网的国标设备,还能够实现全平台、全终端输出。该平台支持将GB/T28181的设备/平台推送的PS流转成ES流,并提供RTSP、RTMP、FLV、HLS、WebRTC等多种格式视频流的分发服务,实现Web浏览器、手机浏览器、微信端、PC客户端等各终......