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

时间:2016-01-20 16:03:22

标签: mysql linux innodb myisam

我正在使用MariaDB 5.5.44。我想创建InnoDB表,它在已安装的分区上存储数据。

考虑 我安装了分区 / var / log / storage ,如下所示:

AnyIn

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

Exists

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

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

/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

如何在InnoDB中将数据目录更改为已挂载的分区? 为什么数据分区在MyISAM&不在InnoDB?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

我想这样做(用于分区)但是mysql文档说" No"。

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

  

19.1 MySQL中的分区概述

     

使用InnoDB存储引擎为表定义分区时,DATA DIRECTORY和INDEX DIRECTORY选项无效。

如果您的存储引擎使用的是MyISAM,它就可以正常工作。

您的选择是:

  1. 全局specficy mysql命令行选项中的数据目录     或my.cnf文件指向/ var / log / storage。例如     --datadir = /无功/日志/存储
  2. 将整个mysql数据目录移动到/ dev / sda6并将其挂载到/ var / lib / mysql。这与第一个选项几乎相同,只是保留路径/ var / lib / mysql
  3. 为你的innodb数据创建一个表空间目录并将/ dev / sda6挂载到它。
  4. 对于第三个选项,要将innodb数据放在一个单独的目录中,你可以配置innodb来为每个表创建一个文件

    # my.cnf
    [mysqld]
    innodb_file_per_table=1
    

    重建db / tables后,您会发现表空间的目录(例如/ var / lib / mysql / mydb)将使用每个表的单个文件创建。

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

    显然,mysql server 5.6不会受到这种限制。