mysql - 如何获取MySql分区的DATA DIRECTORY?

标签 mysql partition

我使用 MySQL Server 5.7,并创建了下表:

CREATE TABLE MYDATA (
  hashpart SMALLINT UNSIGNED NOT NULL)
  PARTITION BY RANGE COLUMNS(hashpart) (
    PARTITION p_123 VALUES LESS THAN(123) DATA DIRECTORY = 'C:\\MyDataBase',
    PARTITION p_MAXVALUE VALUES LESS THAN(MAXVALUE) DATA DIRECTORY = 'C:\\Log\\MyDataBase'
);

有没有一种方法可以仅使用 MySQL 查询来了解每个分区的 DATA DIRECTORY 的值? 以下查询没有多大帮助:

SELECT * FROM information_schema.partitions WHERE TABLE_NAME = 'MYDATA';

预先感谢您的回答!

最佳答案

如果您的分区使用 InnoDB(该查询不适用于其他类型的引擎),您可以运行如下查询(根据需要修改查询):

mysql> DROP TABLE IF EXISTS `MYDATA`;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> CREATE TABLE IF NOT EXISTS `MYDATA` (
    ->   `hashpart` SMALLINT UNSIGNED NOT NULL)
    ->   PARTITION BY RANGE COLUMNS(`hashpart`) (
    ->     PARTITION `p_123` VALUES LESS THAN(123) DATA DIRECTORY = '/path/to/partition/MyDataBase0',
    ->     PARTITION `p_MAXVALUE` VALUES LESS THAN(MAXVALUE) DATA DIRECTORY = '/path/to/partition/MyDataBase1'
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT
    ->   `p`.`PARTITION_NAME`,
    ->   LEFT(`isdf`.`PATH`, INSTR(`isdf`.`PATH`, `ist`.`NAME`) - 2) `PATH`
    -> FROM
    ->   `information_schema`.`PARTITIONS` `p`
    ->   INNER JOIN `information_schema`.`INNODB_SYS_TABLESPACES` `ist` ON
    ->     `ist`.`NAME` LIKE CONCAT(`p`.`TABLE_SCHEMA`, '/', `p`.`TABLE_NAME`, '%', `p`.`PARTITION_NAME`)
    ->   INNER JOIN `information_schema`.`INNODB_SYS_DATAFILES` `isdf` ON
    ->     `ist`.`SPACE` = `isdf`.`SPACE`
    -> WHERE
    ->   `TABLE_SCHEMA` = 'test' AND
    ->   `TABLE_NAME` = 'MYDATA';
+----------------+--------------------------------+
| PARTITION_NAME | PATH                           |
+----------------+--------------------------------+
| p_123          | /path/to/partition/MyDataBase0 |
| p_MAXVALUE     | /path/to/partition/MyDataBase1 |
+----------------+--------------------------------+
2 rows in set (0.01 sec)

参见db-fiddle .

关于mysql - 如何获取MySql分区的DATA DIRECTORY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46529390/

相关文章:

sql - 在 SQL Server 数据库中查找分区架构定义

MySQL LEFT JOIN 对于缺失行不返回 NULL

mysql - SQL ROW_NUMBER 给出错误

python - MYSQL Datetime,删除秒

filesystems - 设备 vs 分区 vs 文件系统 vs 卷 : how do these concepts relate to each other, 准确

distributed - 如果我们对一个 C+A 分布式系统进行分区会怎样?

java - 如何在 Java 中使用 repartitionAndSortWithinPartitions

sql - 如何从oracle服务器的分区表中获取分区列名

mysql - FullCalendar jquery json 事件 MySQL 问题

php - 查询适用于 mysql,但不适用于 php sql 调用