Rumah > Artikel > pangkalan data > Bagaimana untuk memadam partition dalam mysql
Dalam mysql, anda boleh menggunakan penyataan alter dengan "DROP PARTITION" untuk memadamkan partition Fungsi "DROP PARTITION" adalah untuk memadam partition yang ditentukan Sintaksnya ialah "ALTER TABLE 'table name' DROP PARTITION 'partition" name' ".
Persekitaran pengendalian tutorial ini: sistem Windows 10, versi mysql8.0.22, komputer Dell G3.
Sintaks untuk memadam partition ialah: ALTER TABLE 'table name' DROP PARTITION 'partition name'
Kosongkan data partition untuk kosong, dan simpan partition tanpa memadamnya Hanya bersihkan data, arahannya adalah seperti berikut
alter table bm_scenes_data_reminder truncate partition p20210104;
Padam partition
alter table bm_scenes_data_reminder drop partition p20210104;
Selepas pemadaman, laksanakan pernyataan penciptaan jadual paparan. , anda dapat melihat bahawa partition p20210104 telah hilang
Tambah partition
##Jika anda ingin menambah semula partition p20210104 yang baru anda padamkan? apa yang perlu dilakukan. Mula-mula cuba laksanakan arahan tambah partition secara langsung
ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210104 VALUES LESS THAN (738159) ENGINE = InnoDB);
Keputusannya adalah seperti berikut, menunjukkan bahawa ia tidak boleh dilaksanakan.
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 langkah tidak boleh dilaksanakan, gesaan mestilah selepas partition terakhir sebelum ia boleh ditambah seperti ini.
Oleh itu, jika anda mesti menambah semula partition p20210104 (iaitu, anda perlu menambah partition di tengah), anda hanya boleh memadamkan semua partition selepas p20210104, kemudian tambah partition p20210104, dan kemudian tambah kembalikan partition selepas p20210104 . Operasi adalah seperti berikut:
## Mula-mula padam semua partition selepas partition 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;
## Tambah partition p20210104
ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210104 VALUES LESS THAN (738159) ENGINE = InnoDB);
## Alih keluar semua partition selepas partition p20210104 Tambah partition kembali semula
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);
Akhir sekali, semak ddl dan dapatkan partition telah ditambah kembali, tetapi kaedah operasi ini akan memadam semua data partition di belakang partition p20210104 berhati-hati dalam persekitaran dalam talian rasmi
Kes
Sistem mempunyai jadual sistem pengendalian sys_log Untuk mencapai pemadaman partition 90 hari yang lalu dan mencipta partition 4 hari kemudian setiap hari (iaitu, mencipta. jadual untuk partition 4 hari kemudian setiap hari), langkah-langkahnya adalah seperti berikut:
##Buat jadual biasa baharu dan laksanakannya sekali sahaja
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
##Ubah suai menjadi jadual partition dan laksanakannya sekali sahaja, meninggalkan partition untuk masa semasa dan partition masa hadapan pada masa hadapan
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 );
##Lakukan operasi partition berikut setiap hari untuk menambah partition hari, seperti
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);
## Konfigurasi tugas berjadual, lakukan pembersihan dan penciptaan partition sekali sehari
30 4 * * * /bin/python /home/testuser/SyslogPartitionClear.py >/dev/null 2>&1
Pembelajaran yang disyorkan: tutorial video mysql
Atas ialah kandungan terperinci Bagaimana untuk memadam partition dalam mysql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!