记录工作中使用mysql的疑难杂症及解决。
1 pipe broken or connection broken
使用pol的mysql client端的连接莫名断开,一般都是由server端主动断开连接引发,需要查一下连接池中的maxIdle与mysql的wait_timeout,前者一定要小,否则connection会被server主动断开。
2 域名下的slave机的负载均衡
目前免费的连接池如c3p0、dbcp的线程池使用方式都是lifo,如果你恰好用域名来管理多个ip下的mysql slave实例,你可能会发现各个slave的连接、负载很不均衡。
解决:1)小心调整idleTime、min/max poolsize;2)增加一层proxy,来代理对这些线程池的connection管理。不过这样需要知道每个connection的ip,driver没有,有一个办法通过sql来获取:select @@hostname 查到server的host,这样配合lookup server,ip也拿到手了;另外也可以直接根据host来管理,不用ip,就是不太直观;3)自己写一个driver,不过需要时间和验证的过程~~~
3 对于唯一键删除+insert的复合操作(unbind + bind)
常见于:业务绑定时,如果已经bind了另外一个唯一键,需要先unbind,然后再bind。这是replace into的一展身手的地方。
有几点要注意:1)如果有多个唯一键(包括primary key),如果新插入的row中与多个唯一键相同,mysql会先删除多条,然后插入这一条;2)replace into不能获取之前那行的原始值,比如replace into xxx on duplicate key update set a=a+1 相当于: set a=default(a)+1;3)table中必须要有unique key,否则相当于insert;
mysql的处理算法:1)try insert;2)if false,del with uniqu/primary key;3)try insert again
4 计数器更新减到负数
问题:mysql存计数器时,字段一般为unsigned,这样如果减到负数,mysql会抛异常,而且容易导致slave卡。
解决:使用insert into xx values (?,?,greatest(count+?, 0))on duplicate key update count=greatest(count+?, 0),这样就规避了上述问题。注意values中也要用greatest,否则mysql会有warnings,导致异常抛出:"Out of range value for column 'count' at row 1 ".
5 字符集为utf8的table,部分字段无法插入
问题:部分特殊字符无法插入。
解决:对于mysql 5.5之前的版本,varchar改为varbinary;对于mysql5.5之后的版本,继续用varchar,但client的连接字符集改为utf8mb4。这样不仅可以解决特殊字符无法入库的问题,也不会额外使用更多存储空间,同时与之前的utf8兼容,升级不用担心,不过对于java的mysql驱动,需要5.1.13之后的版本才支持utf8mb4。
6 关于update的返回值问题
问题:对于sql "update timeline set vflag=10 where id=1",如果id为1的row的vflag已经是10了,那执行sql. update()后返回值(影响的行数)是1,而非预期的0.
原因:确实找到id=1的row,并进行了修改,如果需要返回值是0,需要修改sql:"update timeline set vflag=10 where id=1 and vflag<>10"
相关推荐
《MYSQL实战45讲》是数据库专家丁奇的一部MySQL技术深度解析著作,它涵盖了MySQL的各个方面,旨在帮助读者深入理解MySQL的核心原理,并提供实践性的指导。本资源包含45讲完整内容,以及作者关于MySQL的心得体会,是...
【MySQL实战优化高手之路】 MySQL,作为世界上最受欢迎的关系型数据库管理系统之一,对于任何涉及数据库管理、开发或运维的IT专业人士来说,都是一个必备的技能。本资源集合旨在帮助你从零开始,逐步深入理解MySQL...
《从0开始带你成为MySQL实战优化高手》这一教程旨在帮助读者从零基础开始学习并掌握MySQL数据库优化的核心技能。MySQL作为世界上最受欢迎的关系型数据库管理系统之一,在互联网应用、企业级服务等多个领域发挥着至关...
根据提供的文件信息,我们可以从以下几个方面来探讨与“MySQL实战和优化视频教程”相关的知识点: ### MySQL实战 #### 1. 数据库设计基础 - **规范化理论**:介绍数据库设计中的第一范式到第三范式的基本概念,...
这份资料《从零开始带你成为MySQL实战优化高手》的第128至130讲,将深入探讨几个关键的优化策略和技术,帮助读者从初学者逐步成长为精通MySQL的专家。 在第128讲中,我们首先会学习到SQL查询优化的基础知识。SQL...
通过《MySQL实战45讲》的学习,读者应该能够掌握MySQL的基础知识,并具备解决实际问题的能力。不过,实际应用中,理论知识与实践经验的结合至关重要,因此,在阅读书籍的同时,实践操作和不断探索将是提升技能的关键...
│ 7_MySQL字表分区和NULL值特殊处理.mp4 │ 8_MySQL表分区管理.mp4 │ 作业.docx │ 作业及答案.docx │ ├─新版MySQL DBA综合实战班 第09天 │ 1_课堂作业讲解.mp4 │ 2_MySQL复制原理.mp4 │ 3_MySQL传统复制...
以下是一些关于MySQL项目实战的关键知识点: 1. **数据库设计**:在开始任何项目之前,理解数据库设计的基本原则至关重要。这包括实体关系模型(ER模型)、范式理论(1NF,2NF,3NF等)以及如何创建数据表。你需要...
### 软件开发实战:PHP+MySQL开发实战 #### 一、PHP简介与应用领域 PHP(Hypertext Preprocessor)是一种通用开源脚本语言,语法吸收了C语言、Java以及Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。...
在MySQL的世界里,成为一个实战优化高手意味着你需要深入理解数据库的核心机制、掌握性能调优的技巧...通过系统学习,你将能够掌握数据库优化的各个方面,从而在实际工作中提升MySQL的性能,解决复杂的数据处理问题。
MySQL分库分表是数据库架构设计...通过本实战教程的学习,读者将能够掌握MySQL分库分表的理论知识和实践操作技能,进一步提升自己在数据库架构设计和运维方面的能力,为处理大规模应用的高并发场景提供有力的技术支持。
本资源“从零开始带你成为MySQL实战优化高手PDF第64-116讲”显然是一份涵盖中级到高级进阶内容的教程,旨在帮助初学者逐步提升至专家水平。下面,我们将探讨这些章节可能涉及的一些关键知识点。 首先,优化通常分为...
每个主题都可能包含详细的实例、最佳实践和常见问题解答,帮助读者全面掌握MySQL的使用和管理。通过这个《MySQL45讲》的学习,无论是初学者还是有经验的开发者,都能提升自己在数据库领域的技能。
《Practical PHP and MySQL》是一本深入探讨PHP与MySQL结合应用的实战教程,它涵盖了从基础到高级的各种技术,旨在帮助读者掌握这两种强大工具的综合运用。PHP是一种广泛使用的服务器端脚本语言,尤其适用于Web开发...
本文将详细介绍MySQL中几种常用的索引类型,并探讨索引的原理及其在查询调优中的实战应用。 首先,索引是数据库中用来提高数据检索速度的物理结构。索引的实现方式很多,但在MySQL中,常用的索引类型包括B+ Tree ...
在实际开发过程中,`6.20笔记.txt`可能包含了开发者在实现该项目时的笔记和学习心得,记录了遇到的问题及解决方案。而`6.20-shopping`可能是一个目录,包含了项目的源代码、配置文件和其他资源。 综上所述,SSH网上...
### 阿里云-深入MySQL实战:快速了解MySQL核心技术 #### 一、MySQL与阿里巴巴的技术结合 MySQL作为全球常年排名前两位的数据库系统之一,因其高性能、稳定性及丰富的功能特性,一直以来都是开发者们学习数据库领域...
这份"MySQL数据库应用实战教程(慕课版)-PPT详细版.rar"压缩包文件,显然是一份针对学习和实践MySQL数据库管理的教育资料,旨在帮助用户深入理解和掌握MySQL的应用技巧。 首先,从标题我们可以推测,这份教程可能...
10. **故障排查**:学习识别和解决常见的MySQL问题,如日志分析、错误处理和性能瓶颈定位。 通过这两个视频的学习,你可以系统地提升MySQL数据库管理能力,为获得OCP认证打下坚实基础。对于从事数据库管理或开发...