Mysql数据库表分区存储到指定磁盘路径

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 0. 前提:mysql5.6.6以上的版本以上的版本才支持单表指定目录,且目录权限是mysql:mysql。在mysql中数据文件存放于在my.cnf中datadir指定的路径,使用的表引擎不同产生的文件格式、表文件个数也会有所差异。mysql的表引擎有多种,表的扩展名也不一样,如innodb用“ .ibd”,archive用“.arc ”,csv用“.csv”等。

image.png

1.步骤详解

步骤一:设定my.cnf配置文件。

innodb_file_per_table=1


验证开关已经打开。


mysql> SHOW VARIABLES LIKE 'innodb_file_per_table';

+-----------------------+-------+

| Variable_name | Value |

+-----------------------+-------+

| innodb_file_per_table | ON |

+-----------------------+-------+

1 row in set (0.00 sec)

1

2

3

4

5

6

7

步骤二:创建指定路径存储的分区表。

CREATE TABLE orders_list2 (

 id INT AUTO_INCREMENT,

 customer_surname VARCHAR(30),

 store_id INT,

 salesperson_id INT,

 order_date DATE,

 note VARCHAR(500),

 INDEX idx (id)

) ENGINE = INNODB

 PARTITION BY LIST(store_id) (

 PARTITION p1

 VALUES IN (1, 3, 4, 17)

 INDEX DIRECTORY = '/var/orders/district1'

 DATA DIRECTORY = '/var/orders/district1',

 PARTITION p2

 VALUES IN (2, 12, 14)

 INDEX DIRECTORY = '/var/orders/district2'

 DATA DIRECTORY = '/var/orders/district2',

 PARTITION p3

 VALUES IN (6, 8, 20)

 INDEX DIRECTORY = '/var/orders/district3'

 DATA DIRECTORY = '/var/orders/district3',

 PARTITION p4

 VALUES IN (5, 7, 9, 11, 16)

 INDEX DIRECTORY = '/var/orders/district4'

 DATA DIRECTORY = '/var/orders/district4',

 PARTITION p5

 VALUES IN (10, 13, 15, 18)

 INDEX DIRECTORY = '/var/orders/district5'

 DATA DIRECTORY = '/var/orders/district5'

);

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

插入记录:


insert into orders_list2(id, customer_surname, store_id, salesperson_id, order_date, note)

values(1, "yang", 1, 1, CURDATE(), "testing");

insert into orders_list2(id, customer_surname, store_id, salesperson_id, order_date, note)

values(2, "yang", 2, 2, CURDATE(), "testing");

insert into orders_list2(id, customer_surname, store_id, salesperson_id, order_date, note)

values(6, "yang", 6, 6, CURDATE(), "testing");

insert into orders_list2(id, customer_surname, store_id, salesperson_id, order_date, note)

values(8, "yang", 8, 8, CURDATE(), "testing");

insert into orders_list2(id, customer_surname, store_id, salesperson_id, order_date, note)

values(5, "yang", 5, 5, CURDATE(), "testing");

insert into orders_list2(id, customer_surname, store_id, salesperson_id, order_date, note)

values(10, "yang", 10, 10, CURDATE(), "testing");

1

2

3

4

5

6

7

8

9

10

11

12

步骤三:到指定新路径下验证。

[root@f033b3fe25e2 orders]# tree

.

├── district1

│   └── test

│   └── orders_list2#P#p1.ibd

├── district2

│   └── test

│   └── orders_list2#P#p2.ibd


├── district3

│   └── test

│   └── orders_list2#P#p3.ibd


├── district4

│   └── test

│   └── orders_list2#P#p4.ibd


└── district5

 └── test

 └── orders_list2#P#p5.ibd

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

10 directories, 5 files

[root@f033b3fe25e2 orders]# pwd

/var/orders

1

2

3

查询验证:


mysql> explain partitions select * from orders_list2;

+----+-------------+--------------+----------------+------+---------------+------+---------+------+------+-------+

| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | Extra |

+----+-------------+--------------+----------------+------+---------------+------+---------+------+------+-------+

| 1 | SIMPLE | orders_list2 | p1,p2,p3,p4,p5 | ALL | NULL | NULL | NULL | NULL | 11 | NULL |

+----+-------------+--------------+----------------+------+---------------+------+---------+------+------+-------+

1 row in set (0.00 sec)

1

2

3

4

5

6

7

步骤四:新增分区处理。

场景假设:比如最新的数据,我们想存储到SSD硬盘上。可以通过增加指定路径的分区文件达到目的。


ALTER TABLE orders_list2  ADD PARTITION (PARTITION p6 VALUES IN  (21,22,23)

DATA DIRECTORY = '/var/ssd_testing'  INDEX DIRECTORY = '/var/ssd_testing');


[root@f033b3fe25e2 var]# tree ssd_testing/

ssd_testing/

└── test

 └── orders_list2#P#p6.ibd

1

2

3

4

5

6

7

六个分区结果:


mysql> explain partitions select * from orders_list2;

+----+-------------+--------------+-------------------+------+---------------+------+---------+------+------+-------+

| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | Extra |

+----+-------------+--------------+-------------------+------+---------------+------+---------+------+------+-------+

| 1 | SIMPLE | orders_list2 | p1,p2,p3,p4,p5,p6 | ALL | NULL | NULL | NULL | NULL | 12 | NULL |

+----+-------------+--------------+-------------------+------+---------------+------+---------+------+------+-------+

1 row in set (0.00 sec)

1

2

3

4

5

6

7

参考:https://dev.mysql.com/doc/refman/5.6/en/tablespace-placing.html

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
存储 SQL NoSQL
mysql存储过程和存储函数
mysql存储过程和存储函数
|
1月前
|
存储 JSON 关系型数据库
轻松入门MySQL:MySQL字段类型精解,优化存储结构,助力系统高效运行(2)
轻松入门MySQL:MySQL字段类型精解,优化存储结构,助力系统高效运行(2)
|
1月前
|
SQL 存储 关系型数据库
轻松入门MySQL:简明教程解析数据存储与管理(1)
轻松入门MySQL:简明教程解析数据存储与管理(1)
|
4天前
|
存储 负载均衡 监控
关系型数据库搭建高可用存储集群
关系型数据库搭建高可用存储集群
22 4
|
4天前
|
存储 关系型数据库 MySQL
MySQL是怎样存储数据的?
MySQL是怎样存储数据的?
|
13天前
|
存储 SQL 关系型数据库
存储系统、数据库和对象存储 | 青训营
存储系统、数据库和对象存储 | 青训营
|
17天前
|
存储 SQL 关系型数据库
关系型数据库存储优化
关系型数据库存储优化
23 1
|
24天前
|
存储 SQL 数据库
C# 将 Word 转文本存储到数据库并进行管理
C# 将 Word 转文本存储到数据库并进行管理
|
25天前
|
存储 关系型数据库 MySQL
如何处理爬取到的数据,例如存储到数据库或文件中?
处理爬取的数据,可存储为txt、csv(适合表格数据)或json(适合结构化数据)文件。若需存储大量数据并执行复杂查询,可选择关系型(如MySQL)或非关系型(如MongoDB)数据库。以MySQL为例,需安装数据库和Python的pymysql库,创建数据库和表,然后编写Python代码进行数据操作。选择存储方式应考虑数据类型、数量及后续处理需求。
25 1
|
27天前
|
存储 SQL 关系型数据库
Pandas与数据库交互:实现高效数据交换与存储
【4月更文挑战第16天】本文介绍了Pandas与数据库交互的方法,包括使用`read_sql`和`to_sql`函数连接SQLite、MySQL等数据库。为了提升数据交换效率,建议采用批量操作、优化SQL查询和使用事务。在数据存储优化方面,选择合适的数据类型、压缩数据以及使用分区或分片都是有效策略。通过这些方法,可实现Pandas与数据库间高效、可靠的数据处理和分析。

推荐镜像

更多