加载中

MySQL

文章分类

浏览该分类下的所有文章

12 篇文章 1

一次OOM排查实录

项目在 2 GB 服务器上运行时日志突然中断,排查发现是 Linux OOM Killer 杀掉了 Java 进程。根因在于 JVM 未限制堆内存、MySQL 8.0 默认配置占用大量内存且未启用 Swap。通过为三个 Spring Boot 项目设置 -Xms/-Xmx(512 M、256 M、256 M),调小 MySQL 缓冲池、连接数、关闭 performance_schema 并限制缓存,另外创建 2 GB Swap,内存使用恢复健康,服务不再被 OOM Killer 终止。文末提醒:小内存机器必须显式限制 JVM、优化 MySQL 配置并配置 Swap,若业务继续增长应迁移 MySQL 或升级机器。

CentOS 7 安装 JDK 8、MySQL 8、Redis 6、Nginx保姆级教程

本文提供在 CentOS 7 上快速部署 JDK 8、MySQL 8、Redis 6 与 Nginx 的完整步骤。包括卸载旧 Java、使用 yum 安装 OpenJDK 8 并配置 JAVA_HOME;添加阿里云 YUM 源、安装 MySQL 社区版、启动并设为开机自启、放通 3306 端口;安装 gcc、下载源码编译 Redis、编辑配置、创建 systemd 服务并设为自启;安装 EPEL 仓库后通过 yum 安装 Nginx、设为开机自启、启动并放通 http/https 端口。每部分均给出关键命令,适合新手一键完成环境搭建。

MySQL 新增字段但 Java 实体未更新:全面解析与解决方案

MySQL 表新增字段而 Java 实体未同步会导致 MyBatis 映射错误、JPA 启动失败、数据丢失等问题,表现为异常或功能异常。根本原因是手动同步疏忽及对 ddl‑auto=update 的误解。解决思路包括:①紧急修复:根据日志定位实体类,补全属性并更新 MyBatis resultMap 或 JPA @Column;②治本措施:使用 Liquibase/Flyway 进行数据库版本管理,强制在同一次提交中同时更新 SQL 脚本和实体代码;③团队规范:规定数据库变更必须配套代码改动,禁用生产环境的自动更新;④辅助手段:IDE 插件、MyBatis Generator、严格 Code Review。通过流程化、自动化和审查,可彻底避免 DB 与代码不同步导致的故障。

代码优化的部分实例

小邹分享了几种常见的代码优化技巧:用String.format提升URL拼接可读性;采用BufferedInput/OutputStream并配合缓冲数组减少文件读写次数;通过把列表转为Map降低嵌套循环的复杂度;使用try‑finally或try‑with‑resources确保ResultSet、PreparedStatement、Connection等资源及时关闭;以及使用数据库连接池(如Druid)避免频繁创建/销毁连接提升并发性能。

Explain详解与索引最佳实践

本文系统阐述了 MySQL 的 EXPLAIN 用法及其变体(EXPLAIN EXTENDED、EXPLAIN PARTITIONS),详细解释了执行计划各列含义(id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra)及其对查询性能的指示。通过示例展示了不同访问类型(const、eq_ref、ref、range、index、ALL)的含义和优化方向,并说明了如何利用覆盖索引、临时表、filesort 等信息定位瓶颈。随后给出索引设计最佳实践,包括全值匹配、最左前缀原则、避免在索引列上做函数或类型转换、合理使用范围查询等,以帮助在实际业务中构建高效的查询结构。

深入理解Mysql索引底层数据结构与算法

MySQL索引通过有序的数据结构提升查询效率。文章先阐述有索引与无索引的对比,说明索引可将全表扫描降为极少的磁盘IO。随后讲解常用索引实现:二叉树、红黑树、哈希和B‑Tree,其中B+Tree因叶节点只存数据、内部节点仅存键且指针多、支持顺序遍历而被InnoDB采用。对比InnoDB聚集索引(数据即主键B+Tree)与MyISAM非聚集索引的文件组织,强调必须建整型自增主键以保持结构稳定。再说明二级索引、联合索引的工作原理及“左前缀”规则,指出冗余索引的产生。最后概述B树与B+树的区别,解释MySQL为何选用B+树以降低树高、减少IO。

深入理解Mysql锁与事务隔离级别

本文系统阐述了 MySQL 并发事务导致的脏读、不可重复读、幻读等一致性问题,介绍了事务的 ACID 特性及四种隔离级别(READ‑UNCOMMITTED、READ‑COMMITTED、REPEATABLE‑READ、SERIALIZABLE)及其实现原理。随后深入分析了 MyISAM 表锁与 InnoDB 行锁的区别,说明了共享锁、排它锁、意向锁、间隙锁和临键锁的作用与适用场景,并通过实例演示了不同隔离级别下的读写行为、幻读防护以及死锁产生与检测。最后给出锁监控指标和优化建议,强调索引设计、锁粒度控制和避免无索引行锁升级为表锁,以提升并发性能。

MySQL常见面试题总结

MySQL面试题涵盖索引、事务、锁、表结构、存储引擎等。索引方面说明Hash与B+树优劣、聚簇与非聚簇、复合索引顺序及EXPLAIN判断;事务阐述ACID及四种隔离级别、行/表锁机制;表设计强调主键使用自增ID、NOT NULL、char存储定长字段;存储引擎推荐InnoDB并对比MyISAM;补充binlog三种模式、超大分页优化、慢查询分析与分表实践、存储过程利弊以及三范式要求。

面试现场【MySQL篇】

MySQL 主从复制通过 binlog、relay‑log 与 SQL 线程实现数据同步,主库负责读写、从库负责读,可提升可用性、实现读写分离并提供灾备。文中阐明了主主、主从、主备的区别,指出 binlog 格式(statement、row、mixed)对一致性的影响,并给出使用 row 或 mixed 规避不一致的方案。进一步分析了主从延迟产生的因素——机器性能、查询压力、大事务、网络、从库数量及单线程复制限制,并提供对应的调优建议。最后列举了常见的高可用架构:双机主备、一主一从、一主多从、MariaDB 多主集群以及基于 Mycat 等中间件的分片‑主多从方案,分别说明其优缺点,为构建可靠的 MySQL 高可用系统提供了完整指引。

Java面试必会知识点

抱歉,我无法直接访问该链接的内容。请您把文章的正文粘贴到聊天框中,我再为您生成符合要求的摘要。

面试现场【综合篇】

文章围绕面试常见技术点展开,先示例如何从项目经验、设计优化和代码亮点切入;随后系统阐述零拷贝的概念、实现方式及其对上下文切换和拷贝次数的削减;归纳五种IO模型,比较NIO与多路复用(select、poll、epoll)的区别与优势;解析FutureTask阻塞获取结果的内部状态机与等待机制;对比ReentrantLock与synchronized的实现原理及适用场景;并简要涉及乐观/悲观锁、AQS、Paxos、B+树、TCP拥塞、JVM调优、分库分表、分布式事务、RocketMQ可靠性等面试热点。整体提供了技术要点的概念解释与实现细节,帮助读者在面试中快速组织答案。

脏写、脏读、不可重复读和幻读

文章说明了并发事务在同一数据上可能产生的四类异常:脏写(未提交事务被后续事务覆盖,回滚后前者的修改被撤销),脏读(事务读取了另一个未提交事务的修改,后者回滚导致读取到的值失效),不可重复读(同一事务多次查询同一行,期间其他已提交事务修改导致读取结果不一致),幻读(同一查询条件在事务期间因其他事务插入新行而返回不同的记录数)。这些问题源于事务并发冲突,数据库通过事务隔离级别(READ‑UNCOMMITTED、READ‑COMMITTED、REPEATABLE‑READ、SERIALIZABLE)以及锁、MVCC 等机制予以控制,其中 MySQL 默认使用 REPEATABLE‑READ。