Jika anda memadamkan jadual besar secara langsung dalam MySQL, ia mungkin menyebabkan MySQL tergantung, yang mungkin memberi kesan negatif pada perniagaan anda. Prasyarat untuk memadamkan jadual yang sangat besar ialah jadual adalah ruang jadual bebas, supaya pemadaman berkesan.
# du -sh pay_bills.ibd 175G pay_bills.ibd # 创建硬链接 # ln pay_bills.ibd pay_bills.ibd_hdlk
Dalam Linux, setiap fail yang disimpan akan mempunyai Indeks Inode yang menghala ke fail Berbilang nama fail boleh dihantar Indeks Inode yang sama menunjuk ke fail storan yang sama.
Jika Indeks Inode yang dirujuk oleh nama fail juga dirujuk oleh nama fail lain, hanya rujukan antara nama fail dan Indeks Inode akan dipadamkan
Jika Indeks Inode dirujuk oleh nama fail ialah Jika ia tidak dirujuk oleh nama fail lain, padamkan rujukan antara nama fail dan Indeks Inode dan padamkan fail storan yang ditunjukkan oleh Indeks Inode.
Malah, ia hanya memadamkan rujukan fail kepada pay_bills.ibd Rujukan pay_bills.ibd_hdlk kami kepada fail fizikal masih wujud, jadi tiada operasi pemadaman peringkat OS akan dilakukan mengurangkan kesan pada fail MySQL.
mysql> drop table pay_bills; Query OK, 0 rows affected (3.24 sec)
Pasang alat truncate
# yum install coreutils -y
Laksanakan skrip pemadaman
#!/bin/bash TRUNCATE=/usr/bin/truncate # 从175G开始每次删除2G,最后如果脚本truncate后还剩下部分文件,使用rm删除 for i in `seq 175 -2 1`; do $TRUNCATE -s ${i}G pay_bills.ibd_hdlk sleep 1 done rm -f pay_bills.ibd_hdlk
MySQL memadam atau mengosongkan data jadual
Lima cara untuk mengosongkan data jadual1 Buat asal pemulihan2. pemadaman baris demi baris yang sangat perlahan dan tidak sesuai untuk memadamkan sejumlah besar data3 struktur jadual dipadam bersama 4. Eksport struktur jadual dan laksanakannya semula; 5. Eksport semua struktur jadual pangkalan data dan laksanakan semula untuk mengosongkan semua jadual (selaras dengan 4) Kosongkan sintaks data jadualpadam daripada nama jadual;
padam daripada nama jadual di mana nama lajur="value ";DROP `t_product_events` IF EXIST; CREATE TABLE `t_product_events` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '事件ID', `level` int(11) NULL DEFAULT NULL, `product_id` bigint(20) NOT NULL COMMENT '产品类型ID', `identifier` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '事件名称', `description` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '事件描述', `type` int(11) NOT NULL COMMENT '事件类型,0:info(信息)、1:alert(告警)、2:error(故障)', `ref_id` int(11) UNSIGNED NULL DEFAULT 0 COMMENT '引入模板时有意义', `original_required` tinyint(2) NOT NULL, `update_required` tinyint(2) NOT NULL DEFAULT 0 COMMENT '是否是标准功能的必选事件,0:可选,1:必选', `custom` tinyint(2) NOT NULL COMMENT '0:模板导入,1:自定义', `method` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '事件对应的方法名称(根据identifier生成)', `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0), `ref` bigint(20) NULL DEFAULT NULL, `related` int(11) NULL DEFAULT 0 COMMENT '被预发布或者已发布关联个数', `copyright` tinyint(2) NULL DEFAULT 0 COMMENT '是否发布过, 1 发布过 0未发布', `prerelease` tinyint(2) NULL DEFAULT 0 COMMENT '是否预发布过, 1 预发布过 0未预发布', PRIMARY KEY (`id`) USING BTREE, INDEX `idx_product_id`(`product_id`) USING BTREE COMMENT '查询优化' ) ENGINE = InnoDB AUTO_INCREMENT = 497560 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '产品类型事件表' ROW_FORMAT = Compact;
Atas ialah kandungan terperinci Bagaimana dengan cepat memadam jadual yang sangat besar dalam MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!