本文简述了mysql表分区的作用和特点,又演示了mysql表分区的创建过程,详细演示了指定差异分区目次时的处置处罚办法。由于表分区对crud操纵是透明的,对于寻常开辟同砚实在不消过多关注,但是本着学习的态度,在分库分表等高大上的技能眼前,mysql分区技能依然是一个不可或缺的提拔数据库读写本领的关键技能。
1、mysql分区的简朴先容
mysql分区就是将表的数据按照特定规则存放在差异的地域,也就是将表的数据文件分割成多个小块,在查询数据的时间,只要知道数据数据存储在哪些地域,然后直接在对应的地域举行查询,不须要对表数据举行全部的查询,进步查询的性能。同时,假如表数据特别大,一个磁盘磁盘放不下时,我们也可以将数据分配到差异的磁盘去,办理存储瓶颈的题目,使用多个磁盘,也可以大概进步磁盘的IO服从,进步数据库的性能。
1.1、mysql表分区的特点
- 物理存储与逻辑分割:逻辑上数据的crud用户感觉不出表分区的存在,物理上数据按照分区键被分配到差异的分区里。
- 查询性能提拔:查询时,mysql可以大概确定读取那些分区的数据,不消全表扫描。
- 数据管理与维护:分区可以独立备份、规复,无需对整表操纵。
- 扩展性与并行处置处罚:当表的巨细凌驾单个存储装备的容量时,很轻易扩展到多个存储装备。
1.2、分区的范例
- RANGE:基于列的值范围将数据分配到差异的分区。比如可以根据日期范围将数据分配到差异的月份、年份的分区中。
- LIST:基于列的离散值聚集来分配数据的。对应的列的数据是一个雷同摆列型的数据。
- HASH:根据用户指定的列的hash值分配数据。
- KEY:雷同于HASH,但支持多列。
各人对先表分区有个认识后,下面咱们就开始实操一下。
2、练习
2.1、创建表分区
- create table t_member(
- member_id int not null,
- member_name varchar(60),
- member_phone varchar(20),
- create_time datetime,
- update_time datetime
- ) PARTITION BY RANGE (YEAR(create_time)) (
- PARTITION P1 VALUES LESS THAN (2024),
- PARTITION P2 VALUES LESS THAN (2025),
- PARTITION P3 VALUES LESS THAN MAXVALUE
- );
复制代码 不多表明了,sql语句还是比力轻易明确。上面我创建了3个分区,咱们到服务器上看看数据文件,如下图:
如今是在一个目次中,假如你的体系有多个硬盘,把数据文件分别放在差异的硬盘上,那肯定会进步读写性能。下面咱们模拟一下过程。由于有些坑各人要制止。
2.2、创建表分区,使用差异的数据目次
我们从一个简朴的创建sql开始。- create table t_member32(
- member_id int not null,
- member_name varchar(60),
- member_phone varchar(20),
- create_time datetime,
- update_time datetime
- ) PARTITION BY RANGE (YEAR(create_time)) (
- PARTITION P1 VALUES LESS THAN (2024) DATA DIRECTORY = '/home/jackie',
- PARTITION P2 VALUES LESS THAN (2025) DATA DIRECTORY = '/mydata',
- PARTITION P3 VALUES LESS THAN MAXVALUE
- );
复制代码 实在就是在刚才的sql的根本上(表名改了),为三个分区分配了三个差异的目次。p1、p2指定,p3明确指定存放目次,那就是生存在默认的目次里。
直接实行肯定会报错,由于p1、p2目次mysql不知道,要先让mysql知道这两个目次,也就是说不能恣意指定一个操纵体系的目次。下来咱们处置处罚这个题目。
2.2.1 设置my.cnf
在my.cnf,找到“mysqld”段,到场下面设置(我就按上面sql写了):
注意:多个目次“;”号分割。生存后重启mysql,依然报错。还没完,咱们继续。
2.2.2 将目次的owner设置成mysql
管理员登录,设置/home/jackie和/mydata的owner。你的呆板上要是还没有这两个目次就先新建一下。- chown mysql:mysql /home/jackie
- chown mysql:mysql /mydata
复制代码 此时还不可,实行刚才的sql语句时,会报存储引擎错误。
2.2.3、设置apparmor
apparmor是linux的一个安全组件,有爱好各人去查查。咱们修改apparmor的设置:- sudo vim /etc/apparmor.d/usr.bin.mysqld
复制代码 添加如下设置:
生存退出后,重新加载apparmor设置并重启,下令如下:- sudo systemctl reload apparmor.service
- sudo systemctl restart apparmor.service
复制代码 再次实行上面的创建语句,就能实行乐成了。数据文件也按我们的规划放到了指定的地域。
这是/home/jackie目次的数据文件。其他的寻常sql操纵就不演示了,沉寂凡表的操纵千篇同等。假如要在分区后继续新增分区、删除分区、归并分区各人可以看看mysql的文档,这里就不啰嗦了。
好了,各人试试,盼望能在工作中对你有资助。
//~~
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
|