在 MySQL 或 MariaDB DBMS 中将数据从共享表空间移动到每个表一个文件的表空间

扩展所有 | 折叠所有

对于 MySQL 和 MariaDB DBMS,您可以通过以下方式存储数据:

使用共享表空间会增加表空间碎片的风险。由于无法执行SHRINK操作,共享表空间中的文件可能会占用大约 90% 的磁盘空间。这会对磁盘子系统的性能产生负面影响。因此,选择每个表一个文件的表空间很有用。

本文介绍如何将数据从共享表空间移动到每个表一个文件的表空间。如果其他应用程序也使用 MySQL 或 MariaDB DBMS,则必须将这些应用程序的数据库移动到每个表独享文件的表空间。

我们建议您仅在使用管理服务器的 MySQL 或 MariaDB DBMS 时才执行该过程。
将数据从共享表空间移动到每个表一个文件的表空间可能会增加磁盘子系统的负载。

先决条件

在开始之前,请确保:

所需磁盘空间是当前数据库总大小( ibdata1文件的当前大小)的 150%。

过程

要将数据从共享表空间移动到每个表一个文件的表空间:

  1. 停止 Kaspersky Security Center 管理服务器服务和其他使用您要为其执行此过程的 DBMS 实例的应用程序。
  2. 根据 DBMS 版本,以超级用户身份登录到您的 DBMS,然后在任何方便的应用程序中运行 fix_tablespace.sql 脚本。

    您可以单击这些链接查看 fix_tablespace.sql 脚本:

    查看适用于 MySQL 5.7 和 MariaDB 10.1+ 的脚本

    查看适用于 MySQL 8.0+ 的脚本

    您不得停止脚本执行。
    如果没有发生 DBMS 错误,但您终止了脚本执行,请再次运行脚本,或者停止执行此过程的步骤,重新启动 DBMS 服务,然后从备份中恢复管理服务器数据。

  3. 在 my.cnf 文件的[mysqld]部分中,将innodb_file_per_table参数设置为1
  4. 重新启动 MySQL 或 MariaDB 服务。
  5. 启动 Kaspersky Security Center 管理服务器服务。

数据被从共享表空间移动到每个表一个文件表空间。

页顶