gpt4 book ai didi

mysql - 如何更改 InnoDB 表挂载分区上的数据目录?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:47:55 30 4
gpt4 key购买 nike

我正在使用 MariaDB 5.5.44。我想创建 InnoDB 表来跨挂载分区存储数据。

考虑我挂载了分区 /var/log/storage 如下:

/dev/sda2       6.5G  3.6G  2.6G  59% /
/dev/sda1 395M 32M 338M 9% /boot
/dev/sda6 5.3G 22M 5.0G 1% /var/log/storage

要创建表,我使用以下查询:

create table InnoDB_Test(a INT) DATA DIRECTORY='/var/log/storage/MySQL' INDEX DIRECTORY='/var/log/storage/MySQL' engine=InnoDB;

但是它将数据存储在/var/lib/mysql而不是/var/log/storage/MySQL

相同如果我使用以下查询尝试使用 MyISAM 并且按预期工作:

create table MyISAM_Test(a INT) DATA DIRECTORY='/var/log/storage/MySQL' INDEX DIRECTORY='/var/log/storage/MySQL' engine=MyISAM;

如何在 InnoDB 中将数据目录更改为挂载分区?为什么数据分区适用于 MyISAM 而不适用于 InnoDB?

提前谢谢你。

最佳答案

我想这样做(用于分区),但 mysql 文档说“不”。

这是此页面的相关部分:https://dev.mysql.com/doc/refman/5.5/en/partitioning-overview.html

19.1 Overview of Partitioning in MySQL

The DATA DIRECTORY and INDEX DIRECTORY options have no effect when defining partitions for tables using the InnoDB storage engine.

因此,如果您的存储引擎使用 MyISAM,它就可以工作。

您的选择是:

  1. 在 mysql 命令行选项中全局指定数据目录 或 my.cnf 文件指向/var/log/storage。例如 --datadir=/var/log/storage
  2. 将整个mysql 数据目录移动到/dev/sda6 并将其挂载到/var/lib/mysql。这与第一个选项几乎相同,除了您要保留路径/var/lib/mysql
  3. 为您的 innodb 数据创建一个表空间目录并将/dev/sda6 挂载到它。

对于第三个选项,要将 innodb 数据放在一个单独的目录中,您可以配置 innodb 为每个表创建一个文件

# my.cnf
[mysqld]
innodb_file_per_table=1

重建数据库/表后,您会发现将为您的表空间创建一个目录(例如/var/lib/mysql/mydb),每个表都有单独的文件。

然后你可以将表空间目录和文件复制到 sda6 并将/dev/sda6 挂载到/var/lib/mysql/mydb

显然 mysql server 5.6 不受此限制。

关于mysql - 如何更改 InnoDB 表挂载分区上的数据目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34904801/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com