ホームページ  >  記事  >  データベース  >  mysqlでパーティションを削除する方法

mysqlでパーティションを削除する方法

WBOY
WBOYオリジナル
2022-03-09 15:59:4513971ブラウズ

mysql では、ALTER ステートメントに「DROP PARTITION」を指定してパーティションを削除できます。「DROP PARTITION」の機能は、指定したパーティションを削除することです。構文は「ALTER TABLE 'テーブル名' DROP」です。 PARTITION 'パーティション" 名前" 。

mysqlでパーティションを削除する方法

このチュートリアルの動作環境: Windows10 システム、mysql8.0.22 バージョン、Dell G3 コンピューター。

mysql でパーティションを削除する方法

パーティションを削除するための構文は次のとおりです: ALTER TABLE 'テーブル名' DROP PARTITION 'パーティション名'

パーティション データをクリアして、空にして、パーティションを削除せずに保持します。データをクリーンアップするだけです。コマンドは次のとおりです。

alter table bm_scenes_data_reminder truncate partition p20210104;

パーティションの削除

alter table bm_scenes_data_reminder drop partition p20210104;

削除後、ビュー テーブルの作成ステートメントを実行すると、次のことがわかります。 p20210104 パーティションがなくなっていることを確認します。

パーティションを追加

##新しく削除した p20210104 パーティションを再度追加したい場合はどうすればよいですか?何をするか。まず、パーティションの追加コマンドを直接実行してみます

ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210104 VALUES LESS THAN (738159) ENGINE = InnoDB);

結果は次のようになり、実行できないことがわかります。

mysql> ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210104 VALUES LESS THAN (738159) ENGINE = InnoDB);
ERROR 1481 (HY000): MAXVALUE can only be used in last partition definition
mysql>

1 は手順 1 では実行できません。このように追加するには、最後のパーティションの後にプロンプ​​トを表示する必要があります。

したがって、p20210104 パーティションを追加し直す必要がある場合 (つまり、途中にパーティションを追加する必要がある場合)、最初に p20210104 以降のすべてのパーティションを削除し、次に p20210104 パーティションを追加してからのみ行うことができます。 p20210104 の後にパーティションを追加し直します。操作は次のとおりです。

##最初に p20210104 パーティションの後のすべてのパーティションを削除します##
ALTER TABLE bm_scenes_data_reminder drop PARTITION p20210105;
ALTER TABLE bm_scenes_data_reminder drop PARTITION p20210106;
ALTER TABLE bm_scenes_data_reminder drop PARTITION p20210107;
ALTER TABLE bm_scenes_data_reminder drop PARTITION p20210108;
ALTER TABLE bm_scenes_data_reminder drop PARTITION p20210109;
ALTER TABLE bm_scenes_data_reminder drop PARTITION p20210110;
ALTER TABLE bm_scenes_data_reminder drop PARTITION future;

##p20210104 パーティションを追加します##

ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210104 VALUES LESS THAN (738159) ENGINE = InnoDB);

## p20210104 パーティション

ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210105 VALUES LESS THAN (738160) ENGINE = InnoDB);
ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210106 VALUES LESS THAN (738161) ENGINE = InnoDB);
ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210107 VALUES LESS THAN (738162) ENGINE = InnoDB);
ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210108 VALUES LESS THAN (738163) ENGINE = InnoDB);
ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210109 VALUES LESS THAN (738164) ENGINE = InnoDB);
ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210110 VALUES LESS THAN (738165) ENGINE = InnoDB);
ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION future VALUES LESS THAN MAXVALUE ENGINE = InnoDB);

最後に ddl を確認すると、パーティションが再度追加されていますが、この操作方法では p20210104 パーティション以降のパーティション データがすべて削除されてしまいますので、公式オンライン環境ではご注意ください

Case

システムにはオペレーティング システム テーブル sys_log があり、これを使用して 90 日前にパーティションを削除し、4 日後にパーティションを作成できます (つまり、4 日後にパーティションのテーブルを作成します)

# #新しい通常のテーブルを作成し、1 回だけ実行します

CREATE TABLE `sys_log` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `begin_time` datetime DEFAULT NULL COMMENT '开始时间',
  `end_time` datetime DEFAULT NULL COMMENT '结束时间',
  `spend_mills` int(11) DEFAULT NULL COMMENT '运行时长,单位ms',
  `username` varchar(100) DEFAULT NULL COMMENT '用户id',
  `log_status` int(11) NOT NULL DEFAULT '0' COMMENT '运行状态,[0]成功[1]失败',
  `code` int(11) NOT NULL DEFAULT '0' COMMENT '错误码',
  `remote_addr` varchar(50) DEFAULT '' COMMENT '远程地址',
  `request_uri` varchar(255) DEFAULT NULL COMMENT '请求路径',
  `user_agent` text COMMENT '用户代理',
  `req_data` text NOT NULL COMMENT '请求参数',
  `resp_data` longtext NOT NULL COMMENT '返回结果',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `idx_log_begintime` (`begin_time`) USING BTREE COMMENT '系统日志的beginTime字段索引'
) ENGINE=Innodb DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC

##それをパーティション テーブルに変更し、1 回だけ実行します。現在時刻のパーティションを残し、将来のパーティションを残します

ALTER TABLE `sys_log` DROP PRIMARY KEY, ADD PRIMARY KEY(`id`,`begin_time`);
alter table sys_log partition by RANGE (to_days(begin_time)) (
    PARTITION p20210816 VALUES LESS THAN (738383),
    PARTITION future VALUES LESS THAN MAXVALUE
);

##次の毎日のパーティション操作を実行し、

ALTER TABLE sys_log drop PARTITION future;
ALTER TABLE sys_log ADD PARTITION (PARTITION p20210817 VALUES LESS THAN (738384) ENGINE = InnoDB);
ALTER TABLE sys_log ADD PARTITION (PARTITION p20210818 VALUES LESS THAN (738385) ENGINE = InnoDB);
ALTER TABLE sys_log ADD PARTITION (PARTITION p20210819 VALUES LESS THAN (738386) ENGINE = InnoDB);
ALTER TABLE sys_log ADD PARTITION (PARTITION future VALUES LESS THAN MAXVALUE ENGINE = InnoDB);

## などの 1 日のパーティションを追加します スケジュールされたタスクの構成、パーティションのクリーニングと作成を 1 日に 1 回実行します

30 4 * * * /bin/python /home/testuser/SyslogPartitionClear.py >/dev/null 2>&1
推奨学習: mysql ビデオ チュートリアル

###

以上がmysqlでパーティションを削除する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。