mysql表分区

[复制链接]
发表于 2025-10-21 02:32:31 | 显示全部楼层 |阅读模式
本文简述了mysql表分区的作用和特点,又演示了mysql表分区的创建过程,详细演示了指定差异分区目次时的处置处罚办法。由于表分区对crud操纵是透明的,对于寻常开辟同砚实在不消过多关注,但是本着学习的态度,在分库分表等高大上的技能眼前,mysql分区技能依然是一个不可或缺的提拔数据库读写本领的关键技能。
1、mysql分区的简朴先容

mysql分区就是将表的数据按照特定规则存放在差异的地域,也就是将表的数据文件分割成多个小块,在查询数据的时间,只要知道数据数据存储在哪些地域,然后直接在对应的地域举行查询,不须要对表数据举行全部的查询,进步查询的性能。同时,假如表数据特别大,一个磁盘磁盘放不下时,我们也可以将数据分配到差异的磁盘去,办理存储瓶颈的题目,使用多个磁盘,也可以大概进步磁盘的IO服从,进步数据库性能
1.1、mysql表分区的特点


  • 物理存储与逻辑分割:逻辑上数据的crud用户感觉不出表分区的存在,物理上数据按照分区键被分配到差异的分区里。
  • 查询性能提拔:查询时,mysql可以大概确定读取那些分区的数据,不消全表扫描。
  • 数据管理与维护:分区可以独立备份、规复,无需对整表操纵。
  • 扩展性与并行处置处罚:当表的巨细凌驾单个存储装备的容量时,很轻易扩展到多个存储装备。
1.2、分区的范例


  • RANGE:基于列的值范围将数据分配到差异的分区。比如可以根据日期范围将数据分配到差异的月份、年份的分区中。
  • LIST:基于列的离散值聚集来分配数据的。对应的列的数据是一个雷同摆列型的数据。
  • HASH:根据用户指定的列的hash值分配数据。
  • KEY:雷同于HASH,但支持多列。
各人对先表分区有个认识后,下面咱们就开始实操一下。
2、练习

2.1、创建表分区
  1. create table t_member(
  2.         member_id int not null,
  3.         member_name varchar(60),
  4.         member_phone varchar(20),
  5.         create_time datetime,
  6.         update_time datetime
  7. ) PARTITION BY RANGE (YEAR(create_time)) (
  8.         PARTITION P1 VALUES LESS THAN (2024),
  9.         PARTITION P2 VALUES LESS THAN (2025),
  10.         PARTITION P3 VALUES LESS THAN MAXVALUE
  11. );
复制代码
不多表明了,sql语句还是比力轻易明确。上面我创建了3个分区,咱们到服务器上看看数据文件,如下图:

如今是在一个目次中,假如你的体系有多个硬盘,把数据文件分别放在差异的硬盘上,那肯定会进步读写性能。下面咱们模拟一下过程。由于有些坑各人要制止。
2.2、创建表分区,使用差异的数据目次

我们从一个简朴的创建sql开始。
  1. create table t_member32(
  2.         member_id int not null,
  3.         member_name varchar(60),
  4.         member_phone varchar(20),
  5.         create_time datetime,
  6.         update_time datetime
  7. ) PARTITION BY RANGE (YEAR(create_time)) (
  8.         PARTITION P1 VALUES LESS THAN (2024) DATA DIRECTORY = '/home/jackie',
  9.         PARTITION P2 VALUES LESS THAN (2025) DATA DIRECTORY = '/mydata',
  10.         PARTITION P3 VALUES LESS THAN MAXVALUE
  11. );
复制代码
实在就是在刚才的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。你的呆板上要是还没有这两个目次就先新建一下。
  1. chown mysql:mysql /home/jackie
  2. chown mysql:mysql /mydata
复制代码
此时还不可,实行刚才的sql语句时,会报存储引擎错误。
2.2.3、设置apparmor

apparmor是linux的一个安全组件,有爱好各人去查查。咱们修改apparmor的设置:
  1. sudo vim /etc/apparmor.d/usr.bin.mysqld
复制代码
添加如下设置:

生存退出后,重新加载apparmor设置并重启,下令如下:
  1. sudo systemctl reload apparmor.service
  2. sudo systemctl restart apparmor.service
复制代码
再次实行上面的创建语句,就能实行乐成了。数据文件也按我们的规划放到了指定的地域。

这是/home/jackie目次的数据文件。其他的寻常sql操纵就不演示了,沉寂凡表的操纵千篇同等。假如要在分区后继续新增分区、删除分区、归并分区各人可以看看mysql的文档,这里就不啰嗦了。
好了,各人试试,盼望能在工作中对你有资助。
//~~

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

×
登录参与点评抽奖,加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表