当前位置:首页 > 天道酬勤 > 正文内容

mysql表空间已存在(mysql怎么建立表)

张世龙2021年12月20日 15:42天道酬勤290

今天我想分享给你的话题是“大家常说的表空间到底是什么? 到底什么又是数据表? ”

这其实是一个概念性的知识点,是要拓展知识的。 相关的概念大家都知道就好了。 相关的参数,留下印象就可以了。

虽然是

一、什么是表?

,但使用过MySQL的人,直观上知道MySQL的数据存在于数据表中。

例如更新SQL :

更新用户设置用户名='白日梦' where id=999; 将名为user的数据表id为1的记录的username列修改为“白日梦”

这个用户其实是数据表。 当然这不重要。 重要的是,数据表其实是一个逻辑概念。 下述表空间是物理概念。

不知道你有没有看过

二、什么是表空间?

“在innodb存储引擎中,数据按表空间进行整理和存储”这句话。 实际上,表空间是表空间文件实际存在的物理文件,这是一个潜在的衬线。

不需要在意为什么叫表空间,为什么表空间对应于磁盘上的物理文件。 因为MySQL是这样设计和设定的。 如果直接接受这个概念就好了。

MySQL有各种各样的表空间。 请参照以下内容。

三、sys表空间

MySQL的系统表空间可以显示如下

值部分的配置为名称:大小:属性

缺省情况下,MySQL初始化名为ibdata1的12MB文件,并随着数据的增加而自动扩展。

这个ibdata1文件是系统表空间,是默认表空间,是默认表空间物理文件,也是传说中的共享表空间。

对于此共享表空间,从直观上讲,如果此表空间可以存储multiple tables .的数据,则可以将其称为共享表空间,因此系统表空间可以被视为共享表空间。

四、配置sys表空间

系统表空间的数量和大小由启动参数: innodb_data_file_path

# my.cnf

[mysqld]

innodb _数据文件路径=/dir1/ibdata 133602000 m;/dir2/ibdata2:2000M :自动扩展ibdata2表空间的固定大小为2000M,但ibdata 2的2000 m在使用后会自动增加。

假设你的服务器有两个存储器a、b。 另外,在a、b上分别安装有dir1目录和dir2目录。 让我们来看看上面的结构。 实际上,我们使用两个不同磁盘上的文件共同构建表空间。 由于这两个文件位于不同的磁盘上,因此可以均衡分配磁盘负载,还可以提高数据库的整体性能。

如果要为每个

五、file per table 表空间

数据库表创建单独的表空间文件,请使用innodb_file_per_table参数进行设置。

此参数仅适用于MySQL5.6或更高版本。

根据配置文件

[mysqld]

innodb_file_per_table=ON也可以通过命令进行

mysqlsetglobalinnodb _文件对等表=on;

如果将其设置为ON,则InnoDB存储引擎随后生成的表将成为其自己的表空间文件。

独立表空间文件命名约定:表名. ibd

注:独立表空间文件只包含与该表对应的数据、索引和插入缓冲器位图。 其余的信息,例如还原信息、insert buffer索引页、双写缓冲器等信息仍然位于默认的表空间,即共享表空间中。 这个还原、插入缓冲器、双重写入缓冲器如果他们不知道什么就没关系。 根据大纲的排列,在第41、42篇与大家分享。 在此,必须了解innodb_file_per_table=ON共享表空间的卷持续增加,并且使用还原继续回滚不会减小共享表空间的大小

减就好了。

查看我的表空间文件:

最后再简述一下这种file per table的优缺点:

优点:

提升容错率,表A的表空间损坏后,其他表空间不会收到影响。s使用MySQL Enterprise Backup快速备份或还原在每表文件表空间中创建的表,不会中断其他InnoDB 表的使用

缺点:

对fsync系统调用来说不友好,如果使用一个表空间文件的话单次系统调用可以完成数据的落盘,但是如果你将表空间文件拆分成多个。原来的一次fsync可能会就变成针对涉及到的所有表空间文件分别执行一次fsync,增加fsync的次数。

六、临时表空间

临时表空间用于存放用户创建的临时表和磁盘内部临时表。

参数innodb_temp_data_file_path定义了临时表空间的一些名称、大小、规格属性如下图:

查看临时表空间文件存放的目录

七、undo表空间

相信你肯定听过说undolog,常见的hldbl的程序想要将事物rollback时,底层MySQL其实就是通过这些undo信息帮你回滚的。

在MySQL的设定中,有一个表空间可以专门用来存放undolog的日志文件。

然而,在MySQL的设定中,默认的会将undolog放置到系统表空间中。

如果你的MySQL是新安装的,那你可以通过下面的命令看看你的MySQL undo表空间的使用情况:

大家可以看到,我的MySQL的undo log 表空间有两个。

也就是我的undo从默认的系统表空间中转移到了undo log专属表空间中了。

那undo log到底是该使用默认的配置放在系统表空间呢?还是该放在undo表空间呢?

这其实取决服务器使用的存储卷的类型。

如果是SSD存储,那推荐将undo info存放在 undo表空间中。

作者:赐我白日梦

原文链接:https://www.cnblogs.com/ZhuChangwu/p/14023079.html

扫描二维码推送至手机访问。

版权声明:本文由花开半夏のブログ发布,如需转载请注明出处。

本文链接:https://www.zhangshilong.cn/work/25718.html

分享给朋友:

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。