1.启动新的mysql客户机会话,确认全局变量innodb_file_per_table 已启用
2.在world数据库内创建名为city_part的新表,其具有与city相同的列定义
3.使用show table status 语句确认该新表是否已分区,在终端窗口中输入一下内容,得到的结果如下所示。
4.通过alter table 语句修改该新表来添加四个range 类型分区 (使用ID 列)在终端窗口输入以下内容,得到的结果如下所示。
5.再次显示表分区的状态。
6.通过插入原始表中的所有行,完成city表到city_part的复制,在终端窗口输入以下内容,得到的显示结果如下。
7.在单独的终端窗口中检查新表文件的(.par 和 .ibd)的mysql数据目录。
8.通过使用explain partitions 显示用于查询所有表数据的分区来确认city_part表分区,在mysql窗口中输入以下的内容。
9.确定将用于查询city_part表数据的分区,其中ID值小于2000。
10.重新定义city_part表来将key分区用于三个单独的分区,在终端窗口中输入以下内容,得到的结果如下所示。
11.通过使用explain partitions 显示用于查询所有表数据的分区来确认表分区的修改。
12.检查已修改的标文件的mysql数据目录。
13.查询information_schema数据库中的partitions表,以了解city_part表中的分区名称。
1.
mysql> show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | ON |
+-----------------------+-------+
1 row in set (0.00 sec)
2.
mysql> use world;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> create table city_part like city;
Query OK, 0 rows affected (0.11 sec)
3.
mysql> show table status like 'city_part'G;
*************************** 1. row ***************************
Name: city_part
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 0
Avg_row_length: 0
Data_length: 16384
Max_data_length: 0
Index_length: 16384
Data_free: 0
Auto_increment: 1
Create_time: 2016-11-04 03:32:45
Update_time: NULL
Check_time: NULL
Collation: latin1_swedish_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)
4.
mysql> alter table city_part partition by range (id) (
-> partition p0 values less than (1000),
-> partition p1 values less than (2000),
-> partition p2 values less than (3000),
-> partition p3 values less than maxvalue
-> );
Query OK, 0 rows affected (0.49 sec)
Records: 0 Duplicates: 0 Warnings: 0
5.
mysql> show table status like 'city_part'G
*************************** 1. row ***************************
Name: city_part
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 4
Avg_row_length: 16384
Data_length: 65536
Max_data_length: 0
Index_length: 65536
Data_free: 0
Auto_increment: 1
Create_time: 2016-11-04 03:43:37
Update_time: NULL
Check_time: NULL
Collation: latin1_swedish_ci
Checksum: NULL
Create_options: partitioned
Comment:
1 row in set (0.01 sec)
6.
mysql> insert into city_part select * from city;
Query OK, 4080 rows affected (0.29 sec)
Records: 4080 Duplicates: 0 Warnings: 0
7.
[root@enmo ~]# cd /var/lib/mysql/world/
[root@enmo world]# ls -l
total 1848
-rw-rw----. 1 mysql mysql 8710 Nov 2 19:10 city.frm
-rw-rw----. 1 mysql mysql 589824 Nov 3 04:58 city.ibd
-rw-rw----. 1 mysql mysql 8710 Nov 4 03:43 city_part.frm
-rw-rw----. 1 mysql mysql 32 Nov 4 03:43 city_part.par
-rw-rw----. 1 mysql mysql 212992 Nov 4 03:48 city_part#P#p0.ibd
-rw-rw----. 1 mysql mysql 212992 Nov 4 03:48 city_part#P#p1.ibd
-rw-rw----. 1 mysql mysql 212992 Nov 4 03:48 city_part#P#p2.ibd
-rw-rw----. 1 mysql mysql 212992 Nov 4 03:48 city_part#P#p3.ibd
-rw-rw----. 1 mysql mysql 9172 Nov 2 19:10 country.frm
-rw-rw----. 1 mysql mysql 163840 Nov 2 19:10 country.ibd
-rw-rw----. 1 mysql mysql 8702 Nov 2 19:10 countrylanguage.frm
-rw-rw----. 1 mysql mysql 229376 Nov 2 19:10 countrylanguage.ibd
-rw-rw----. 1 mysql mysql 65 Nov 2 19:10 db.opt
8.
mysql> explain partitions select * from city_partG
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: city_part
partitions: p0,p1,p2,p3
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 4080
Extra: NULL
1 row in set (0.00 sec)
9.
mysql> explain partitions select * from city_part where id <2000G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: city_part
partitions: p0,p1
type: range
possible_keys: PRIMARY
key: PRIMARY
key_len: 4
ref: NULL
rows: 1997
Extra: Using where
1 row in set (0.00 sec)
10.
mysql> alter table city_part partition by key (id) partitions 3;
Query OK, 4080 rows affected (0.67 sec)
Records: 4080 Duplicates: 0 Warnings: 0
11.
mysql> explain partitions select * from city_partG;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: city_part
partitions: p0,p1,p2
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 1350
Extra: NULL
1 row in set (0.00 sec)
12.
[root@enmo world]# ls -l
total 1768
-rw-rw----. 1 mysql mysql 8710 Nov 2 19:10 city.frm
-rw-rw----. 1 mysql mysql 589824 Nov 3 04:58 city.ibd
-rw-rw----. 1 mysql mysql 8710 Nov 4 03:58 city_part.frm
-rw-rw----. 1 mysql mysql 32 Nov 4 03:58 city_part.par
-rw-rw----. 1 mysql mysql 245760 Nov 4 03:58 city_part#P#p0.ibd
-rw-rw----. 1 mysql mysql 278528 Nov 4 03:58 city_part#P#p1.ibd
-rw-rw----. 1 mysql mysql 245760 Nov 4 03:58 city_part#P#p2.ibd
-rw-rw----. 1 mysql mysql 9172 Nov 2 19:10 country.frm
-rw-rw----. 1 mysql mysql 163840 Nov 2 19:10 country.ibd
-rw-rw----. 1 mysql mysql 8702 Nov 2 19:10 countrylanguage.frm
-rw-rw----. 1 mysql mysql 229376 Nov 2 19:10 countrylanguage.ibd
-rw-rw----. 1 mysql mysql 65 Nov 2 19:10 db.opt
13.
mysql> select table_name,
-> group_concat(partition_name)
-> from information_schema.partitions
-> where table_schema='world'
-> and table_name='city_part';
+------------+------------------------------+
| table_name | group_concat(partition_name) |
+------------+------------------------------+
| city_part | p0,p1,p2 |
+------------+------------------------------+
1 row in set (0.01 sec)