mysql分区表备份_MySQL 分区表原理及数据备份转移实战

本文详细介绍了MySQL分区表的原理,并提供了一种常见的数据备份和转移方法:创建新的分区表,将原表数据导出并导入,最后建立普通索引。通过实例展示了RANGE、LIST和COLUMNS等不同类型的分区操作,以及如何解释分区查询。
摘要由CSDN通过智能技术生成

mysql>SELECT*FROM`t1`WHERE`uid`=89757AND`atime`EXPLAINPARTITIONSSELECT*FROM`t1`WHERE`uid`=89757AND`atime`

同时也要注意,进行表分区以后,mysql存放的数据文件夹中该表的存放文件也被拆分为多个-rw-r-----1mysqlmysql8.7K2月1414:49t1.frm

-rw-r-----1mysqlmysql36M2月1414:50t1#P#p0.ibd

-rw-r-----1mysqlmysql64M2月1414:50t1#P#p1.ibd

-rw-r-----1mysqlmysql92M2月1414:50t1#P#p2.ibd

-rw-r-----1mysqlmysql64M2月1414:50t1#P#p3.ibd

实际生产环境中,大多是采用另外一种方式:新建一个和原来表一样的分区表,然后把数据从原表导出,接着导入新表,最后建立普通索引。

mysql>CREATETABLE`t2`(

`id`int(10)unsignedNOTNULLAUTO_INCREMENTCOMMENT'表主键',

`pid`int(10)unsignedNOTNULLCOMMENT'产品ID',

`price`decimal(15,2)NOTNULLCOMMENT'单价',

`num`int(11)NOTNULLCOMMENT'购买数量',

`uid`int(10)unsignedNOTNULLCOMMENT'客户ID',

`atime`datetimeNOTNULLCOMMENT'下单时间',

`utime`int(10)unsignedNOTNULLDEFAULT0COMMENT'修改时间',

`isdel`tinyint(4)NOTNULLDEFAULT'0'COMMENT'软删除标识',

PRIMARYKEY(`id`,`atime`)

)

PARTITIONBYRANGECOLUMNS(atime)(

PARTITIONp0VALUESLESSTHAN('2016-01-01'),

PARTITIONp1VALUESLESSTHAN('2016-02-01'),

PARTITIONp2VALUESLESSTHAN('2016-03-01'),

PARTITIONp3VALUESLESSTHAN('2016-04-01'),

PARTITIONp4VALUESLESSTHAN('2016-05-01'),

PARTITIONp5VALUESLESSTHAN('2016-06-01'),

PARTITIONp6VALUESLESSTHAN('2016-07-01'),

PARTITIONp7VALUESLESSTHAN('2016-08-01'),

PARTITIONp8VALUESLESSTHAN('2016-09-01'),

PARTITIONp9VALUESLESSTHAN('2016-10-01'),

PARTITIONp10VALUESLESSTHAN('2016-11-01'),

PARTITIONp11VALUESLESSTHAN('2016-12-01'),

PARTITIONp12VALUESLESSTHAN('2017-01-01'),

PARTITIONp13VALUESLESSTHAN('2017-02-01'),

PARTITIONp14VALUESLESSTHAN('2017-03-01'),

PARTITIONp15VALUESLESSTHAN('2017-04-01'),

PARTITIONp16VALUESLESSTHAN('2017-05-01'),

PARTITIONp17VALUESLESSTHAN('2017-06-01'),

PARTITIONp18VALUESLESSTHAN('2017-07-01'),

PARTITIONp19VALUESLESSTHAN('2017-08-01'),

PARTITIONp20VALUESLESSTHAN('2017-09-01'),

PARTITIONp21VALUESLESSTHAN('2017-10-01'),

PARTITIONp22VALUESLESSTHAN('2017-11-01'),

PARTITIONp23VALUESLESSTHAN('2017-12-01'),

PARTITIONp24VALUESLESSTHAN('2018-01-01'),

PARTITIONp25VALUESLESSTHAN('2018-02-01'),

PARTITIONp26VALUESLESSTHAN('2018-03-01'),

PARTITIONp27VALUESLESSTHAN('2018-04-01'),

PARTITIONp28VALUESLESSTHAN('2018-05-01'),

PARTITIONp29VALUESLESSTHAN('2018-06-01'),

PARTITIONp30VALUESLESSTHAN('2018-07-01'),

PARTITIONp31VALUESLESSTHAN('2018-08-01'),

PARTITIONp32VALUESLESSTHAN('2018-09-01'),

PARTITIONp33VALUESLESSTHAN('2018-10-01'),

PARTITIONp34VALUESLESSTHAN('2018-11-01'),

PARTITIONp35VALUESLESSTHAN('2018-12-01'),

PARTITIONp36VALUESLESSTHANMAXVALUE

);

注:表主键只有id,而分区字段是atime, 这里主键要修改为 id,stsdate 联合主键,分区表要求分区字段要是主键或者是主键的一部分!!!

mysql>EXPLAINPARTITIONSSELECT*FROM`t2`G;

***************************1.row***************************

id:1

select_type:SIMPLE

table:t2

partitions:p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36

type:ALL

possible_keys:NULL

key:NULL

key_len:NULL

ref:NULL

rows:1

filtered:100.00

Extra:NULL

1rowinset,2warnings(0.00sec)

*******************************************插入数据*************************************************

INSERTINTO`t2`(`pid`,`price`,`num`,`uid`,`atime`)SELECT`pid`,`price`,`num`,`uid`,`atime`FROM`t1`;

QueryOK,4194304rowsaffected(1min18.54sec)

Records:4194304Duplicates:0Warnings:0

或采用导出数据再导入数据,可再添加索引

mysqldump-udbname-p--no-create-infodbnamet2>t2.sql

修改表名,导入数据,测试下ok,删除原来的表。

2)使用LIST分区模式(如果原表存在主键强烈创建新表时,把原主键和要分区字段作为联合主键一并创建)

mysql>CREATETABLE`tb01`(

`id`int(10)unsignedNOTNULLAUTO_INCREMENTCOMMENT'表主键',

`pid`int(10)unsignedNOTNULLCOMMENT'产品ID',

`price`decimal(15,2)NOTNULLCOMMENT'单价',

`num`int(11)NOTNULLCOMMENT'购买数量',

`uid`int(10)unsignedNOTNULLCOMMENT'客户ID',

`atime`datetimeNOTNULLCOMMENT'下单时间',

`utime`int(10)unsignedNOTNULLDEFAULT0COMMENT'修改时间',

`isdel`tinyint(4)NOTNULLDEFAULT'0'COMMENT'软删除标识',

PRIMARYKEY(`id`,`num`)

);

*****************************插入测试数据******************************************************

INSERTINTO`tb01`(`pid`,`price`,`num`,`uid`,`atime`)SELECT`pid`,`price`,`num`,`uid`,`atime`FROM`tb`;

QueryOK,3145728rowsaffected(46.26sec)

Records:3145728Duplicates:0Warnings:0

mysql>ALTERTABLEtb01PARTITIONBYLIST(num)

(

PARTITIONpl01VALUESIN(1,3),

PARTITIONpl02VALUESIN(2,4),

PARTITIONpl03VALUESIN(5,7),

PARTITIONpl04VALUESIN(6,8),

PARTITIONpl05VALUESIN(9,10)

);

QueryOK,3145728rowsaffected(48.86sec)

Records:3145728Duplicates:0Warnings:0

存放mysql数据文件中生成,以下文件

-rw-r-----1mysqlmysql8.7K2月1511:35tb01.frm

-rw-r-----1mysqlmysql56M2月1511:36tb01#P#pl01.ibd

-rw-r-----1mysqlmysql32M2月1511:36tb01#P#pl02.ibd

-rw-r-----1mysqlmysql36M2月1511:36tb01#P#pl03.ibd

-rw-r-----1mysqlmysql36M2月1511:36tb01#P#pl04.ibd

-rw-r-----1mysqlmysql52M2月1511:36tb01#P#pl05.ibd

mysql>EXPLAINPARTITIONSSELECT*FROM`tb01`;

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

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

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

|1|SIMPLE|tb01|pl01,pl02,pl03,pl04,pl05|ALL|NULL|NULL|NULL|NULL|3136392|100.00|NULL|

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

1rowinset,2warnings(0.00sec)

3)COLUMNS分区

创建多列分区表tb02,这里两列都不是联合主键

mysql>CREATETABLEtb02(

->aintnotnull,

->bintnotnull

->)

->PARTITIONBYRANGECOLUMNS(a,b)(

->partitionp0valueslessthan(0,10),

->partitionp1valueslessthan(10,20),

->partitionp2valueslessthan(10,30),

->partitionp3valueslessthan(maxvalue,maxvalue)

->);

mysql>EXPLAINPARTITIONSSELECT*FROM`tb02`;#查看

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

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

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

|1|SIMPLE|tb02|p0,p1,p2,p3|ALL|NULL|NULL|NULL|NULL|1|100.00|NULL|

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

1rowinset,2warnings(0.00sec)

mysql>insertintotb02values(11,13);#手工插入测试数据

QueryOK,1rowaffected(0.01sec)

mysql>selectPARTITION_NAME,PARTITION_EXPRESSION,TABLE_ROWSfrominformation_schema.partitionswheretable_schema=schema()andtable_name='tb02';

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

|PARTITION_NAME|PARTITION_EXPRESSION|TABLE_ROWS|

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

|p0|`a`,`b`|0|

|p1|`a`,`b`|0|

|p2|`a`,`b`|0|

|p3|`a`,`b`|1|

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

4rowsinset(0.03sec)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值