10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 下载本手册
PDF(美国高级主任)- 42.0 mb
PDF (A4)- 42.0 mb
手册页(TGZ)- 266.3 kb
手册页(Zip)- 376.1 kb
信息(Gzip)- 4.0 mb
信息(邮政编码)- 4.0 mb
本手册节选

15.6.1.2对外创建表

创造有不同的原因InnoDB外部表;也就是说,在数据目录之外创建表。例如,这些原因可能包括空间管理、I/O优化或将表放置在具有特定性能或容量特征的存储设备上。

InnoDB支持以下方法在外部创建表:

使用DATA DIRECTORY子句

您可以创建InnoDB表中数据目录条款创建表声明。

创建表t1 (c1 INT主键)/外部/目录”;

数据目录子句支持在“逐表文件”表空间中创建的表。表隐式地创建在每表文件的表空间中innodb_file_per_table变量是启用的,默认为启用。

SELECT @@innodb_file_per_table;+-------------------------+ | @@ innodb_file_per_table  | +-------------------------+ | 1  | +-------------------------+

有关逐表文件表空间的详细信息,请参见第15.6.3.2节,“每个表空间文件”

当您指定数据目录a条款创建表语句,则表的数据文件(table_name.ibd)将在指定目录下的架构目录中创建。

从MySQL 8.0.21开始,表和表分区在数据目录之外使用数据目录子句仅限于已知的目录InnoDB.此要求允许数据库管理员控制表空间数据文件的创建位置,并确保在恢复过程中可以找到数据文件(请参见崩溃恢复期间的表空间发现).类定义的目录为已知目录datadirinnodb_data_home_dir,innodb_directories变量。你可以使用下面的语句来检查这些设置:

mysql> SELECT @@datadir,@@innodb_data_home_dir,@@ innodb_directory;

如果要使用的目录未知,请将其添加到innodb_directories在创建表之前进行设置。的innodb_directories变量为只读。配置它需要重新启动服务器。有关设置系统变量的一般信息,请参见第5.1.9节“使用系统变量”

属性在外部目录中创建表数据目录条款。这是假定的innodb_file_per_table变量,且该目录已知InnoDB

mysql>使用测试;mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY)/外部/目录”;# MySQL在外部目录$> cd /external/directory/test $> ls t1.ibd下的模式目录下创建表的数据文件
使用注意:
  • MySQL最初保持表空间数据文件打开,防止您卸载设备,但如果服务器很忙,最终可能会关闭该文件。注意不要在MySQL运行时意外卸载外部设备,或者在设备断开连接时启动MySQL。当关联的数据文件丢失时,试图访问表会导致严重错误,需要重新启动服务器。

    如果在预期的路径上没有找到数据文件,服务器重新启动可能会失败。在这种情况下,您可以从备份中恢复表空间数据文件,或者删除表以从数据字典

  • 在将表放置到nfs挂载的卷上之前,请检查中概述的潜在问题使用NFS和MySQL

  • 如果使用LVM快照、文件副本或其他基于文件的机制来备份表的数据文件,请始终使用抽水马桶…用于出口语句,以确保在内存中缓冲的所有更改都是正确的刷新在备份发生之前,将数据删除到磁盘。

  • 使用数据目录子句在外部目录中创建表是使用符号链接,这InnoDB不支持。

  • 数据目录子句在源和副本位于同一主机上的复制环境中不支持。的数据目录子句需要一个完整的目录路径。在这种情况下复制路径会导致源和副本在相同的位置创建表。

  • 从MySQL 8.0.21开始,在“逐表文件”表空间中创建的表不能再在undo表空间目录(innodb_undo_directory),除非有人直接知道InnoDB.类定义的目录为已知目录datadirinnodb_data_home_dir,innodb_directories变量。

使用CREATE TABLE…表空间的语法

创建表…表空间语法可与数据目录子句在外部目录中创建表。为此,请指定innodb_file_per_table作为表空间名称。

mysql> CREATE TABLE t2 (c1 INT PRIMARY KEY) TABLESPACE = innodb_file_per_table DATA DIRECTORY = '/external/ DIRECTORY ';

方法只支持在“逐表文件”表空间中创建的表,但不需要innodb_file_per_table变量要启用。在所有其他方面,这种方法都等价于创建表…数据目录方法如上所述。同样的用法说明也适用。

在外部通用表空间中创建表

您可以在位于外部目录的一般表空间中创建表。