热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MyISAM引擎压缩工具myisampack

MyISAM引擎压缩工具myisampack我们知道MyISAM存储引擎表提供有三种,分别为静态表、动态表、压缩表。(本文主要讲压缩表)
MyISAM引擎压缩工具myisampack

我们知道MyISAM存储引擎表提供有三种,分别为静态表、动态表、压缩表。(本文主要讲压缩表)

1.1 数据准备


  • 准备一张测试表(存储引擎是MyISAM):

CREATE TABLE `userinfo` (`id` int(10) NOT NULL COMMENT '用户id',`username` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名',`age` int(3) NULL DEFAULT NULL COMMENT '年龄',`phone` varchar(15) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '手机号',`gender` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '性别: ‘0’-男 ‘1’-女',`desc` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '自我介绍',`register_time` datetime(0) NULL DEFAULT NULL COMMENT '注册时间',`login_time` datetime(0) NULL DEFAULT NULL COMMENT '上一次登录时间',`pic` varchar(250) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '头像地址',`look` int(10) NULL DEFAULT NULL COMMENT '查看数',PRIMARY KEY (`id`)
) ENGINE = MyISAM CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

  • 编写一个存储过程,用于后续批量插入数据:

CREATE PROCEDURE `test_test`(count int)
begindeclare i int default 1;while i<&#61;count do INSERT INTO userinfo values(i,uuid(),CEILING(RAND()*90&#43;10),FLOOR(RAND()*100000000000),round(FORMAT(rand(),1)),uuid(),now(),now(),uuid(),CEILING(RAND()*90&#43;10));set i&#61;i&#43;1;end while;
end

  • 调用存储过程&#xff0c;插入100W数据&#xff1a;

call test_insert(1000000);

在这里插入图片描述

1.2 使用myisampack工具


  • 查看数据库物理存储路径
    在这里插入图片描述
    进入具体目录&#xff1a;
    在这里插入图片描述

压缩之前的数据文件大小&#xff08;MYD&#xff09;&#xff1a;149M&#xff0c;索引文件大小&#xff08;MYI&#xff09;&#xff1a;9.8M


  • 使用压缩工具myisampack压缩表&#xff1a;

myisampack table_name
myisampack userinfo

在这里插入图片描述

压缩之后的数据文件大小&#xff08;MYD&#xff09;&#xff1a;65M&#xff0c;索引文件大小&#xff08;MYI&#xff09;&#xff1a;1.0K。


1.3 压缩带来的问题

在这里插入图片描述

出现&#xff1a;Table ‘userinfo’ is marked as crashed and should be repaired

大概意思是userinfo表崩溃了&#xff0c;需要修复。

使用压缩工具&#xff0c;压缩后的表&#xff0c;有非常大的概率崩溃。&#xff08;大家可以自行测试一下&#xff09;

还好&#xff0c;我们可以修复&#xff1a;

repair table userinfo;

在这里插入图片描述
再次使用其他客户端查看表数据&#xff1a;
在这里插入图片描述

有得时候压缩过后的数据并不能通过repair table语句修复&#xff0c;建议在压缩之前&#xff0c;先做好数据备份。


1.4 解压缩工具myisamchk

MySQL官方建议我们&#xff0c;使用myisampack工具压缩过后的数据&#xff0c;为只读模式&#xff08;当然你可以强行修改数据&#xff09;&#xff0c;但最好不要做数据的修改&#xff08;增删改&#xff09;&#xff0c;如果要做数据的修改&#xff0c;请用myisamchk来解压缩。

1.4.1 强制修改

我们现在把表重新删除&#xff0c;重新插入100W数据&#xff0c;然后使用myisampack工具进行压缩。

之后我们尝试修改数据中的记录&#xff1a;

mysql> call test_insert(1000000);
Query OK, 1 row affected (26.53 sec)mysql> select count(1) from userinfo;
&#43;----------&#43;
| count(1) |
&#43;----------&#43;
| 1000000 |
&#43;----------&#43;
1 row in set (0.00 sec)mysql> update userinfo set username&#61;&#39;1&#39; where id&#61;1;
ERROR 126 (HY000): Incorrect key file for table &#39;./test/userinfo.MYI&#39;; try to repair it
mysql>

发现出现&#xff1a;ERROR 126 (HY000): Incorrect key file for table ‘./test/userinfo.MYI’; try to repair it

大概意思是索引文件损坏。

我们再次尝试修复表&#xff1a;
在这里插入图片描述
发现可以修改&#xff0c;但是MySQL官方不建议这样做&#xff0c;建议压缩的表只作为只读&#xff0c;如果想要修改&#xff0c;那么请使用myisamchk工具解压缩。

1.4.2 解压缩修改

为了防止其他因素干扰&#xff0c;我们把表重新删除&#xff08;drop table&#xff09;&#xff0c;重新建立一张表&#xff0c;插入100W数据测试。

  • 窗口一
    在这里插入图片描述
  • 窗口二&#xff1a;
    在这里插入图片描述

其实解压缩过后&#xff0c;原来的数据大小还是被压缩了&#xff0c;只是索引文件变回了原来的大小。


好了&#xff0c;本篇就说到这里了&#xff0c;看完觉得有帮助的童鞋记得点赞&#xff01;


推荐阅读
  • MySQL 数据操作:增、删、查、改全面解析
    MySQL 数据操作:增、删、查、改全面解析 ... [详细]
  • 在使用 Cacti 进行监控时,发现已运行的转码机未产生流量,导致 Cacti 监控界面显示该转码机处于宕机状态。进一步检查 Cacti 日志,发现数据库中存在 SQL 查询失败的问题,错误代码为 145。此问题可能是由于数据库表损坏或索引失效所致,建议对相关表进行修复操作以恢复监控功能。 ... [详细]
  • Java 零基础入门:SQL Server 学习笔记(第21篇)
    Java 零基础入门:SQL Server 学习笔记(第21篇) ... [详细]
  • 在HTML布局中,即使将 `top: 0%` 和 `left: 0%` 设置为元素的定位属性,浏览器中仍然会出现空白填充。这个问题通常与默认的浏览器样式、盒模型或父元素的定位方式有关。为了消除这些空白,可以考虑重置浏览器的默认样式,确保父元素的定位方式正确,并检查是否有其他CSS规则影响了元素的位置。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 本文详细介绍了在CentOS 6.5 64位系统上使用阿里云ECS服务器搭建LAMP环境的具体步骤。首先,通过PuTTY工具实现远程连接至服务器。接着,检查当前系统的磁盘空间使用情况,确保有足够的空间进行后续操作,可使用 `df` 命令进行查看。此外,文章还涵盖了安装和配置Apache、MySQL和PHP的相关步骤,以及常见问题的解决方法,帮助用户顺利完成LAMP环境的搭建。 ... [详细]
  • 本文详细介绍了在 Oracle 数据库中使用 MyBatis 实现增删改查操作的方法。针对查询操作,文章解释了如何通过创建字段映射来处理数据库字段风格与 Java 对象之间的差异,确保查询结果能够正确映射到持久层对象。此外,还探讨了插入、更新和删除操作的具体实现及其最佳实践,帮助开发者高效地管理和操作 Oracle 数据库中的数据。 ... [详细]
  • 本文详细介绍了在Linux系统上编译安装MySQL 5.5源码的步骤。首先,通过Yum安装必要的依赖软件包,如GCC、GCC-C++等,确保编译环境的完备。接着,下载并解压MySQL 5.5的源码包,配置编译选项,进行编译和安装。最后,完成安装后,进行基本的配置和启动测试,确保MySQL服务正常运行。 ... [详细]
  • 本文作为探讨PHP依赖注入容器系列文章的开篇,将首先通过具体示例详细阐述依赖注入的基本概念及其重要性,为后续深入解析容器的实现奠定基础。 ... [详细]
  • 深入解析 Django 中用户模型的自定义方法与技巧 ... [详细]
  • MySQL 错误:检测到死锁,在尝试获取锁时;建议重启事务(Node.js 环境)
    在 Node.js 环境中,MySQL 数据库操作时遇到了“检测到死锁,在尝试获取锁时;建议重启事务”的错误。本文将探讨该错误的原因,并提供有效的解决策略,包括事务管理优化和锁机制的理解。 ... [详细]
  • 本文详细解析了 MySQL 5.7.20 版本中二进制日志(binlog)崩溃恢复机制的工作流程。假设使用 InnoDB 存储引擎,并且启用了 `sync_binlog=1` 配置,文章深入探讨了在系统崩溃后如何通过 binlog 进行数据恢复,确保数据的一致性和完整性。 ... [详细]
  • 探讨 jBPM 数据库表结构设计的精要与实践
    探讨 jBPM 数据库表结构设计的精要与实践 ... [详细]
  • 提升MySQL数据库架构性能的策略与方法
    为了提升MySQL数据库架构的性能,本文探讨了多种策略与方法。首先,分析了影响数据库性能的关键因素,并详细阐述了数据库结构优化的重要性。接着,介绍了数据库设计的基本步骤,包括第一、第二和第三范式的应用,以及反范式化设计的场景。此外,还讨论了数据库物理设计的关键要素,如表定义、索引设计和存储引擎选择,以确保高效的查询响应和数据管理。 ... [详细]
author-avatar
BeBe-DANIC_796
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有