- 存储方式
ibdata1~ibdataN, 5.5版本默认的表空间类型。
## ibdata1共享表空间在各个版本的变化
5.5版本:
系统相关:(全局)数据字典信息(表基本结构信息、状态、系统参数、属性..)、UNDO回滚信息(记
录撤销操作)、Double Write buffer信息、临时表信息、change buffer
用户数据: 表数据行、表的索引数据
5.6版本:共享表空间只存储于系统数据,把用户数据独立了。
系统相关:(全局)数据字典信息、UNDO回滚信息、Double Write信息、临时表信息、change
buffer
5.7版本:在5.6基础上,把临时表独立出来,UNDO也可以设定为独立
系统相关:(全局)数据字典信息、UNDO回滚信息、Double Write信息、change buffer
8.0.19版本:在5.7的基础上将UNDO回滚信息默认独立,数据字典不再集中存储了。
系统相关:Double Write信息、change buffer
8.0.20版本:在之前版本基础上,独立 Double Write信息 - 2.表空间进行迁移
存储方式
ibdata1~ibdataN, 5.5版本默认的表空间类型。
## ibdata1共享表空间在各个版本的变化
5.5版本:
系统相关:(全局)数据字典信息(表基本结构信息、状态、系统参数、属性..)、UNDO回滚信息(记
录撤销操作)、Double Write buffer信息、临时表信息、change buffer
用户数据: 表数据行、表的索引数据
5.6版本:共享表空间只存储于系统数据,把用户数据独立了。
系统相关:(全局)数据字典信息、UNDO回滚信息、Double Write信息、临时表信息、change
buffer
5.7版本:在5.6基础上,把临时表独立出来,UNDO也可以设定为独立
系统相关:(全局)数据字典信息、UNDO回滚信息、Double Write信息、change buffer
8.0.19版本:在5.7的基础上将UNDO回滚信息默认独立,数据字典不再集中存储了。
系统相关:Double Write信息、change buffer
8.0.20版本:在之前版本基础上,独立 Double Write信息
共享空间的查看以及设置
1## 共享表空间管理
在mysql 数据存储目录下 有一个 ibdat1的文件,这个文件就是共享表空间
mysql> select @@innodb_data_file_path; ## 如果是1默认是打开的,开启独立表空间
mysql> select @@innodb_autoextend_increment; ## 参数用途:ibdata1文件,默认初始大小12M,不够用会自动扩展,默认每次扩展64M
2### 扩容共享表空间
设置方式:
错误的方法:
innodb_data_file_path=ibdata1:12M;ibdata2:100M;ibdata3:100M:autoextend
第一个文件12M 第二个100M 第三个100M autoextend 第三个不够了 扩容第三个文件每次扩容64M
正确的方法:
先查看实际大小:
[root@db01 data]# ls -lh ibdata1
-rw-r——- 1 mysql mysql 76M May 6 17:11 ibdata1
配置文件设定为和实际大小一致: 第一个ibdata1要跟实际大小一致
innodb_data_file_path=ibdata1:76M;ibdata2:100M;ibdata3:100M:autoextend
2.表空间进行迁移
前言:两个同版本的数据,进行表空间迁移,注意一定要是同版本的数据库。
a库的t1表,表空间,迁移至b库/t1表:
首先,在B库下面创建一个跟A库一模一样的数据结构,
alter table B.t1 discard tablespace; ##删除B表的表空间 ,因为要将A表的表空间迁移至B表所以要先删除掉B表的,表空间
在将A表的表空间使用 cp /data/3306/data/test/t1.ibd /data/3307/data/test/ 拷贝到B表的数据目录下,在更改数据的属组,属主chown -R mysql.mysql /data/
alter table test.t100w import tablespace; ## 在登录到B数据库 将A表的表空间进行加载,就完成了表空间的迁移一下是具体操作步骤
# 利用独立表空间进行快速数据迁移
源端:3306/test/t100w ——-> 目标端:3307/test/t100w
1. 锁定源端t100w表 #目的是防止在迁移的过程中有数据的写入
mysql> flush tables test.t100w with read lock;
mysql> show create table test.t100w;
CREATE TABLE t100w ( id int(11) DEFAULT NULL, num int(11) DEFAULT NULL, k1 char(2) DEFAULT NULL, k2 char(4) DEFAULT NULL, dt timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2. 目标端创建test库和t100w空表
mysql> create database test charset=utf8mb4;
CREATE TABLE t100w ( id int(11) DEFAULT NULL, num int(11) DEFAULT NULL, k1 char(2) DEFAULT NULL, k2 char(4) DEFAULT NULL, dt timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
3. 单独删除空的表空间文件
mysql> alter table test.t100w discard tablespace;Undo tablespace
4. 拷贝源端ibd文件到目标端目录,并设置权限
[root@db01 test]# cp /data/3306/data/test/t100w.ibd /data/3307/data/test/
[root@db01 test]# chown -R mysql.mysql /data/
5. 导入表空间
mysql> alter table test.t100w import tablespace;
mysql> select count() from test.t100w;
+—————+
| count() |
+—————+
| 1000000 |
6. 解锁源端数据表 #迁移完成之后恢复数据表的使用
mysql> unlock tables;
