ALTER [UNDO] TABLESPACE tablespace_name
NDB only:
{ADD | DROP} DATAFILE 'file_name'
[INITIAL_SIZE [=] size]
[WAIT]
InnoDB and NDB:
[RENAME TO tablespace_name]
InnoDB only:
[AUTOEXTEND_SIZE [=] 'value']
[SET {ACTIVE | INACTIVE}]
[ENCRYPTION [=] {'Y' | 'N'}]
InnoDB and NDB:
[ENGINE [=] engine_name]
Reserved for future use:
[ENGINE_ATTRIBUTE [=] 'string']
This statement is used with NDB and
InnoDB tablespaces. It can be used to add a new
data file to, or to drop a data file from an
NDB tablespace. It can also be used to rename
an NDB Cluster Disk Data tablespace, rename an
InnoDB general tablespace, encrypt an
InnoDB general tablespace, or mark an
InnoDB undo tablespace as active or inactive.
The UNDO keyword, introduced in MySQL 8.0.14,
is used with the SET {ACTIVE | INACTIVE} clause
to mark an InnoDB undo tablespace as active or
inactive. For more information, see
Section 17.6.3.4, “Undo Tablespaces”.
The ADD DATAFILE variant enables you to specify
an initial size for an NDB Disk Data tablespace
using an INITIAL_SIZE clause, where
size is measured in bytes; the default
value is 134217728 (128 MB). You may optionally follow
size with a one-letter abbreviation for
an order of magnitude, similar to those used in
my.cnf. Generally, this is one of the letters
M (megabytes) or G
(gigabytes).
On 32-bit systems, the maximum supported value for
INITIAL_SIZE is 4294967296 (4 GB). (Bug #29186)
INITIAL_SIZE is rounded, explicitly, as for
CREATE TABLESPACE.
Once a data file has been created, its size cannot be changed;
however, you can add more data files to an NDB tablespace using
additional ALTER TABLESPACE ... ADD DATAFILE
statements.
When ALTER TABLESPACE ... ADD DATAFILE is used
with ENGINE = NDB, a data file is created on
each Cluster data node, but only one row is generated in the
Information Schema FILES table. See
the description of this table, as well as
Section 25.6.11.1, “NDB Cluster Disk Data Objects”, for more
information. ADD DATAFILE is not supported with
InnoDB tablespaces.
Using DROP DATAFILE with
ALTER TABLESPACE drops the data
file 'file_name' from an NDB
tablespace. You cannot drop a data file from a tablespace which is
in use by any table; in other words, the data file must be empty
(no extents used). See
Section 25.6.11.1, “NDB Cluster Disk Data Objects”. In addition,
any data file to be dropped must previously have been added to the
tablespace with CREATE TABLESPACE
or ALTER TABLESPACE. DROP
DATAFILE is not supported with InnoDB
tablespaces.
WAIT is parsed but otherwise ignored. It is
intended for future expansion.
The ENGINE clause, which specifies the storage
engine used by the tablespace, is deprecated; expect it to be
removed in a future release. The tablespace storage engine is
known by the data dictionary, making the ENGINE
clause obsolete. If the storage engine is specified, it must match
the tablespace storage engine defined in the data dictionary. The
only values for engine_name compatible
with NDB tablespaces are
NDB and NDBCLUSTER.
RENAME TO operations are implicitly performed
in autocommit mode, regardless of
the autocommit setting.
A RENAME TO operation cannot be performed while
LOCK TABLES or
FLUSH TABLES WITH READ
LOCK is in effect for tables that reside in the
tablespace.
Exclusive metadata locks are taken on tables that reside in a general tablespace while the tablespace is renamed, which prevents concurrent DDL. Concurrent DML is supported.
The CREATE TABLESPACE privilege is
required to rename an InnoDB general
tablespace.
The AUTOEXTEND_SIZE option defines the amount
by which InnoDB extends the size of a
tablespace when it becomes full. Introduced in MySQL 8.0.23. The
setting must be a multiple of 4MB. The default setting is 0, which
causes the tablespace to be extended according to the implicit
default behavior. For more information, see
Section 17.6.3.9, “Tablespace AUTOEXTEND_SIZE Configuration”.
The ENCRYPTION clause enables or disables
page-level data encryption for an InnoDB
general tablespace or the mysql system
tablespace. Encryption support for general tablespaces was
introduced in MySQL 8.0.13. Encryption support for the
mysql system tablespace was introduced in MySQL
8.0.16.
A keyring plugin must be installed and configured before encryption can be enabled.
As of MySQL 8.0.16, if the
table_encryption_privilege_check
variable is enabled, the
TABLE_ENCRYPTION_ADMIN privilege is
required to alter a general tablespace with an
ENCRYPTION clause setting that differs from the
default_table_encryption setting.
Enabling encryption for a general tablespace fails if any table in
the tablespace belongs to a schema defined with
DEFAULT
ENCRYPTION='N'. Similarly, disabling encryption fails if
any table in the general tablespace belongs to a schema defined
with DEFAULT
ENCRYPTION='Y'. The
DEFAULT
ENCRYPTION schema option was introduced in MySQL 8.0.16.
If an ALTER TABLESPACE statement
executed on a general tablespace does not include an
ENCRYPTION clause, the tablespace retains its
current encryption status, regardless of the
default_table_encryption setting.
When a general tablespace or the mysql system
tablespace is encrypted, all tables residing in the tablespace are
encrypted. Likewise, a table created in an encrypted tablespace is
encrypted.
The INPLACE algorithm is used when altering the
ENCRYPTION attribute of a general tablespace or
the mysql system tablespace. The
INPLACE algorithm permits concurrent DML on
tables that reside in the tablespace. Concurrent DDL is blocked.
For more information, see Section 17.13, “InnoDB Data-at-Rest Encryption”.
The ENGINE_ATTRIBUTE option (available as of
MySQL 8.0.21) is used to specify tablespace attributes for primary
storage engines. The option is reserved for future use.
Permitted values are a string literal containing a valid
JSON document or an empty string (''). Invalid
JSON is rejected.
ALTER TABLESPACE ts1 ENGINE_ATTRIBUTE='{"key":"value"}';
ENGINE_ATTRIBUTE values can be repeated without
error. In this case, the last specified value is used.
ENGINE_ATTRIBUTE values are not checked by the
server, nor are they cleared when the table's storage engine is
changed.
It is not permitted to alter an individual element of a JSON attribute value. You can only add or replace an attribute.