`
fishermen
  • 浏览: 379924 次
社区版块
存档分类
最新评论

mysql 实战问题处理

 
阅读更多

记录工作中使用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讲(全).zip

    《MYSQL实战45讲》是数据库专家丁奇的一部MySQL技术深度解析著作,它涵盖了MySQL的各个方面,旨在帮助读者深入理解MySQL的核心原理,并提供实践性的指导。本资源包含45讲完整内容,以及作者关于MySQL的心得体会,是...

    从 0 开始带你成为MySQL实战优化高手

    【MySQL实战优化高手之路】 MySQL,作为世界上最受欢迎的关系型数据库管理系统之一,对于任何涉及数据库管理、开发或运维的IT专业人士来说,都是一个必备的技能。本资源集合旨在帮助你从零开始,逐步深入理解MySQL...

    从 0 开始带你成为MySQL实战优化高手.txt

    《从0开始带你成为MySQL实战优化高手》这一教程旨在帮助读者从零基础开始学习并掌握MySQL数据库优化的核心技能。MySQL作为世界上最受欢迎的关系型数据库管理系统之一,在互联网应用、企业级服务等多个领域发挥着至关...

    mysql实战和优化视频教程

    根据提供的文件信息,我们可以从以下几个方面来探讨与“MySQL实战和优化视频教程”相关的知识点: ### MySQL实战 #### 1. 数据库设计基础 - **规范化理论**:介绍数据库设计中的第一范式到第三范式的基本概念,...

    从零开始带你成为MySQL实战优化高手PDF128-130.zip

    这份资料《从零开始带你成为MySQL实战优化高手》的第128至130讲,将深入探讨几个关键的优化策略和技术,帮助读者从初学者逐步成长为精通MySQL的专家。 在第128讲中,我们首先会学习到SQL查询优化的基础知识。SQL...

    Mysql45讲pdf版

    通过《MySQL实战45讲》的学习,读者应该能够掌握MySQL的基础知识,并具备解决实际问题的能力。不过,实际应用中,理论知识与实践经验的结合至关重要,因此,在阅读书籍的同时,实践操作和不断探索将是提升技能的关键...

    新版 MySQL DBA 高级视频 基于MySQL 5.7 MySQL 8.0版本.rar

    │ 7_MySQL字表分区和NULL值特殊处理.mp4 │ 8_MySQL表分区管理.mp4 │ 作业.docx │ 作业及答案.docx │ ├─新版MySQL DBA综合实战班 第09天 │ 1_课堂作业讲解.mp4 │ 2_MySQL复制原理.mp4 │ 3_MySQL传统复制...

    mysql练手项目, mysql 项目实战

    以下是一些关于MySQL项目实战的关键知识点: 1. **数据库设计**:在开始任何项目之前,理解数据库设计的基本原则至关重要。这包括实体关系模型(ER模型)、范式理论(1NF,2NF,3NF等)以及如何创建数据表。你需要...

    软件开发实战:PHP+MySQL开发实战

    ### 软件开发实战:PHP+MySQL开发实战 #### 一、PHP简介与应用领域 PHP(Hypertext Preprocessor)是一种通用开源脚本语言,语法吸收了C语言、Java以及Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。...

    从零开始带你成为MySQL实战优化高手PDF117-127.zip

    在MySQL的世界里,成为一个实战优化高手意味着你需要深入理解数据库的核心机制、掌握性能调优的技巧...通过系统学习,你将能够掌握数据库优化的各个方面,从而在实际工作中提升MySQL的性能,解决复杂的数据处理问题。

    Python+MySQL分表分库实战

    MySQL分库分表是数据库架构设计...通过本实战教程的学习,读者将能够掌握MySQL分库分表的理论知识和实践操作技能,进一步提升自己在数据库架构设计和运维方面的能力,为处理大规模应用的高并发场景提供有力的技术支持。

    从零开始带你成为MySQL实战优化高手PDF64-116.zip

    本资源“从零开始带你成为MySQL实战优化高手PDF第64-116讲”显然是一份涵盖中级到高级进阶内容的教程,旨在帮助初学者逐步提升至专家水平。下面,我们将探讨这些章节可能涉及的一些关键知识点。 首先,优化通常分为...

    mysql45讲.zip

    每个主题都可能包含详细的实例、最佳实践和常见问题解答,帮助读者全面掌握MySQL的使用和管理。通过这个《MySQL45讲》的学习,无论是初学者还是有经验的开发者,都能提升自己在数据库领域的技能。

    Practical PHP and MySQL(php Mysql实战案例)

    《Practical PHP and MySQL》是一本深入探讨PHP与MySQL结合应用的实战教程,它涵盖了从基础到高级的各种技术,旨在帮助读者掌握这两种强大工具的综合运用。PHP是一种广泛使用的服务器端脚本语言,尤其适用于Web开发...

    MYSQL查询调优实战

    本文将详细介绍MySQL中几种常用的索引类型,并探讨索引的原理及其在查询调优中的实战应用。 首先,索引是数据库中用来提高数据检索速度的物理结构。索引的实现方式很多,但在MySQL中,常用的索引类型包括B+ Tree ...

    SSH网上商城项目+MySQL实战完整源码

    在实际开发过程中,`6.20笔记.txt`可能包含了开发者在实现该项目时的笔记和学习心得,记录了遇到的问题及解决方案。而`6.20-shopping`可能是一个目录,包含了项目的源代码、配置文件和其他资源。 综上所述,SSH网上...

    阿里云-深入MySQL实战:快速了解MySQL核心技术

    ### 阿里云-深入MySQL实战:快速了解MySQL核心技术 #### 一、MySQL与阿里巴巴的技术结合 MySQL作为全球常年排名前两位的数据库系统之一,因其高性能、稳定性及丰富的功能特性,一直以来都是开发者们学习数据库领域...

    MySQL数据库应用实战教程(慕课版)-PPT详细版.rar

    这份"MySQL数据库应用实战教程(慕课版)-PPT详细版.rar"压缩包文件,显然是一份针对学习和实践MySQL数据库管理的教育资料,旨在帮助用户深入理解和掌握MySQL的应用技巧。 首先,从标题我们可以推测,这份教程可能...

    MySQL OCP 实战视频 12-13

    10. **故障排查**:学习识别和解决常见的MySQL问题,如日志分析、错误处理和性能瓶颈定位。 通过这两个视频的学习,你可以系统地提升MySQL数据库管理能力,为获得OCP认证打下坚实基础。对于从事数据库管理或开发...

Global site tag (gtag.js) - Google Analytics