MySQL 分区表结构和数据导出方法
- 导出分区表结构
使用 SHOW CREATE TABLE 语句可以查看分区表的 DDL 语句,其中包含分区定义。
例如,假设有一个名为 orders 的分区表,可以使用以下命令导出其表结构:
SHOW CREATE TABLE orders \G;
输出结果类似于:
*************************** 1. row ***************************
Table: orders
Create Table: CREATE TABLE `orders` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`order_date` date NOT NULL,
`customer_id` int(11) NOT NULL,
`total_amount` decimal(10,2) NOT NULL,
PRIMARY KEY (`id`,`order_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
/*!50100 PARTITION BY RANGE (YEAR(order_date))
(PARTITION p2019 VALUES LESS THAN (2020) ENGINE = InnoDB,
PARTITION p2020 VALUES LESS THAN (2021) ENGINE = InnoDB,
PARTITION p2021 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */
注意到 PARTITION BY RANGE 和分区定义。可以将这个 DDL 语句保存到一个文件中,例如:
SHOW CREATE TABLE orders \G > /tmp/orders.sql
- 导出分区表数据
使用 mysqldump 命令可以导出分区表的数据。需要使用 --single-transaction 选项确保导出的数据是一致的。
例如,假设有一个名为 orders 的分区表,可以使用以下命令导出其数据:
mysqldump --single-transaction --skip-lock-tables -u root -p orders > /tmp/orders.sql
这将把 orders 表的数据导出到 /tmp/orders.sql 文件中。如果需要导出特定分区的数据,可以使用 WHERE 子句来限制导出的数据,例如:
mysqldump --single-transaction --skip-lock-tables -u root -p orders --where='order_date >= '2020-01-01'' > /tmp/orders2020.sql
这将导出 order_date 大于等于 2020 年 1 月 1 日的数据到 /tmp/orders2020.sql 文件中。
原文地址: https://www.cveoy.top/t/topic/oATQ 著作权归作者所有。请勿转载和采集!