我正在尝试用DATA DIRECTORY在另一个驱动器上创建一个分区表
mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY) DATA DIRECTORY = '/stats_tables/test/db/mysql/';
Query OK, 0 rows affected (0.03 sec)
mysql> \! ls /stats_tables/test/db/mysql/db_test/
t1.ibd
mysql> drop table t1;
Query OK, 0 rows affected (0.01 sec)因此,我们看到在驱动器上成功地创建了一个未分区的表。现在,让我们对分区表进行相同的尝试:
mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY) DATA DIRECTORY = '/stats_tables/test/db/mysql/' PARTITION BY HASH ( c1 ) PARTITIONS 10;
Query OK, 0 rows affected (0.34 sec)
mysql> \! ls /stats_tables/test/db/mysql/db_test/
mysql> \! ls /defa_storage/test/db/mysql/db_test/t1* | xargs -n1 basename
t1.frm
t1.par
t1#P#p0.ibd
t1#P#p1.ibd
t1#P#p2.ibd
t1#P#p3.ibd
t1#P#p4.ibd
t1#P#p5.ibd
t1#P#p6.ibd
t1#P#p7.ibd
t1#P#p8.ibd
t1#P#p9.ibd我们看到,在本例中,它是在常规数据目录下创建的。这在MySQL 5.5文档中有很好的解释
当使用InnoDB存储引擎为表定义分区时,数据目录和索引目录选项没有任何效果。
尽管我使用的是版本5.6,而且在其文件中也没有提到这样的限制。
无论如何,是否有一种方法可以为我的所有DATA DIRECTORY分区设置一个通用的BY HASH?
发布于 2018-02-06 14:23:29
最后,我发现实际上可以以这种方式控制创建的分区:
CREATE TABLE ...
PARTITION BY HASH( ... )
(
PARTITION p0 DATA DIRECTORY = '/another/directory',
PARTITION p1 DATA DIRECTORY = '/another/directory',
PARTITION p2 DATA DIRECTORY = '/another/directory',
PARTITION p3 DATA DIRECTORY = '/another/directory',
...
);最后一部分可以很容易地由任何脚本语言生成,比如Python:
max_partitions = 100
for i in range(0, max_partitions):
print("PARTITION p" + str(i) + " DATA DIRECTORY = '/another/directory',")https://stackoverflow.com/questions/48642067
复制相似问题