Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 什么是表空间?为什么使用它?_Mysql_Database_Database Design_Tablespace - Fatal编程技术网

Mysql 什么是表空间?为什么使用它?

Mysql 什么是表空间?为什么使用它?,mysql,database,database-design,tablespace,Mysql,Database,Database Design,Tablespace,在调查问题时,我遇到了以下错误: 30503[错误]InnoDB:试图打开以前打开的表空间。以前的表空间mysql/innodb_index_stats在filepath:./mysql/innodb_index_stats.ibd处使用空间ID:2。无法打开表空间Mydb/be_command_log,它在filepath:./Mydb/be_command_log.ibd处使用了空间ID:2 在读了一些关于这个问题的文章后,我才知道这是一个问题 但我的问题是,我对表空间的实际工作原理知之甚少

在调查问题时,我遇到了以下错误:

30503[错误]InnoDB:试图打开以前打开的表空间。以前的表空间mysql/innodb_index_stats在filepath:./mysql/innodb_index_stats.ibd处使用空间ID:2。无法打开表空间Mydb/be_command_log,它在filepath:./Mydb/be_command_log.ibd处使用了空间ID:2

在读了一些关于这个问题的文章后,我才知道这是一个问题

但我的问题是,我对表空间的实际工作原理知之甚少。它们有什么用处?我读了,但它没有提供所有的信息


有人能分享一些关于什么是表空间以及它们如何工作的详细信息吗?

默认情况下,InnoDB只包含一个称为系统表空间的表空间,其标识符为0。可以使用innodb_file_per_table配置参数间接创建更多表空间。表空间由一系列文件组成。文件的大小不必被数据库块大小整除,因为我们可能只保留最后一个未完成的块不使用。将新文件追加到表空间时,还将指定文件的最大大小。目前,我们认为最好在创建文件时将文件扩展到其最大大小,因为这样可以避免在表空间需要更多空间时动态扩展文件。数据文件是动态扩展的,但重做日志文件是预先分配的。另外,如前所述,只有系统表空间可以有多个数据文件。还清楚地提到,尽管表空间可以有多个文件,但它们被认为是连接在一起的单个大文件。因此表空间中文件的顺序很重要

From

是数据驻留在磁盘中的一个位置,称为数据目录(默认情况下为“系统表空间”)。例如:

“/var/lib/mysql”

从MySQL 5.6.6版开始,用户可以创建并指定要存储数据的表空间,从而实现数据操作和恢复过程的吞吐量。InnoDB的每表文件功能为每个表提供了单独的.ibd数据和索引文件,这些文件表示一个单独的通用表空间。这样数据库中的每个表都可以指向

例:

/home/{user}/test/data/{dbName}/{tableName}.ibd

/home/{user}/work/data/{dbName}/{tableName}.ibd


有关每个表的文件表空间的更多信息,请参阅此。

sql客户端应仅使用sql对象,而不关心数据库服务器物理存储该信息的位置

这就是为什么需要表空间的概念。像表数据这样的sql对象从sql客户机的角度进入表空间


数据库服务器管理员现在可以自由地将表空间物理地放在他们想要的地方,sql客户端程序仍然可以工作。

一个数据文件,可以保存一个或多个InnoDB表和相关索引的数据

有许多类型的表空间基于配置w.r.t每个表的信息俱乐部。这些是,

a。系统表空间 B每个表空间的文件数 C通用表空间

系统表空间包含

  • InnoDB数据字典
  • 双写缓冲区
  • 更改缓冲区
  • 撤消日志
  • 除此之外,它还包括,

  • 表格及
  • 索引数据
  • 关联的文件是
    .idbdata1

    innodb_file_per_table选项在MySQL 5.6及更高版本中默认启用,允许在每个表的文件表空间中创建表,每个表都有一个单独的数据文件。启用innodb_file_per_table选项可以提供其他MySQL功能,如表压缩和可传输表空间

    关联的文件是
    .idbd


    InnoDB在MySQL 5.7.6中引入了通用表空间。通用表空间是使用CREATE表空间语法创建的共享表空间。它们可以在MySQL数据目录之外创建,能够容纳多个表,并支持所有行格式的表。

    这篇文章还提供了一些关于表空间的背景信息:我认为@ABr链接回答了这个问题,但既然您标记了MySQL,您可能也对表空间感兴趣。同意这一点,但取决于您的MySql版本,您希望看到5.7版本的参考:@ABr,我使用的是5.6.15。几乎任何运行MySql的人都不需要知道任何关于“表空间”的术语。请提供
    SHOW CREATE TABLE
    以及与正在发生的事情相关的任何其他信息。Rukshan,你能解释更多关于它们的信息吗?它们是什么?我们为什么需要它们?谢谢你的评论。