记录工作中使用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"
相关推荐
│ 7_MySQL字表分区和NULL值特殊处理.mp4 │ 8_MySQL表分区管理.mp4 │ 作业.docx │ 作业及答案.docx │ ├─新版MySQL DBA综合实战班 第09天 │ 1_课堂作业讲解.mp4 │ 2_MySQL复制原理.mp4 │ 3_MySQL传统复制...
│ 1301-MySQL日常问题处理总结_rec.mp4 │ 1302-如何成为一个好的MySQL DBA_rec.mp4 │ 1303-MySQL问题解答_rec.mp4 │ 1304-MySQL面试题专家解答1_rec.mp4 │ 1305-MySQL面试题专家解答2_rec.mp4 │ └─L014-...
第2课、MySQL启动方式分析及启动故障分析-1206.wmv 第3课、MySQL日志-目录结构-重要命令-用户基本了解-1208.wmv 第4课、理解MySQL用户及Schema-1212.avi 第5课、数据类型-1214.avi 第6课、MySQL字符集-1219.avi 第7...
为什么需要掌握高性能的MySQL实战? 由于互联网产品用户量大、高并发请求场景多,因此对MySQL的性能、可用性、扩展性都提出了很高的要求。使用MySQL解决大量数据以及高并发请求已经是程序员的必备技能,也是衡量一...
通过该示例,您将了解到如何使用Spark Streaming和Kafka处理实时数据流,以及如何将处理后的数据保存到MySQL数据库中。示例涵盖了从环境搭建到代码实现的全过程,帮助您快速上手实时数据处理的开发。提供了一个完整...
5. **实战案例分析**:通过具体的案例分析,展示如何应用MySQL DBA的知识和技能解决实际问题。 6. **自动化与工具使用**:介绍自动化管理工具和技术,如监控系统、自动化部署、脚本编写等。 7. **高可用性与灾难...
MySQL数据库实战教程通常会涵盖从基础到高级的多个方面,帮助用户全面掌握MySQL的使用和优化。以下是一个超级详细的MySQL数据库实战教程的大纲: ### 1. MySQL简介 - 了解MySQL的历史、特点和应用场景。 ### 2. ...
本文从实战角度出发,深入探讨了MySQL主从架构及读写分离的搭建与应用。...总之,本文为开发者提供了一套完整的MySQL主从架构与读写分离的实战指南,旨在帮助他们有效地解决实际生产环境中的数据处理问题。
网络与通信:数据传输、信号处理、网络协议、网络与通信硬件、网络安全网络与通信是一个非常广泛的领域,它涉及到计算机科学、电子工程、数学等多个学科的知识。 云计算与大数据:包括云计算平台、大数据分析、人工...
理论部分包括PHP技术概述和基本语法、字符串和正则表达式、数组和函数、文件和目录操作、PHP的异常处理机制、XML文件操作、Session和Cookie会话管理、Smarty模板引擎、Ajax技术和MySQL数据库。实战部分包括在线投票...
吃透MySQL系列 一招教你防止删库跑路!! 基于MVCC,我用C++自己手撸了个MySQL!! 糟了,生产环境MySQL主从数据库不一致怎么办?! 实际案例:MySQL主键性能压测!! MySQL8索引篇:性能提升了100%!! 卧槽,安装...
第1章课程介绍 第2章环境搭建 第3章一个SQL语句如何执行 第4章如何建表更符合业务 第5章怎么查询速度更快 第6章如何处理数据更新 第7章ORM框架原理 第8章怎么给数据上保险 第9章搭建"三高"架构的基础
本书由资深MySQL专家撰写,以最新的MySQL版本为基础,以...不论你目前有没有遇到过此类问题,相信对你以后处理相关问题都会有所借鉴。本书适合所有希望构建和管理高性能、高可用性的MySQL数据库系统的开发者和DBA阅读。
DBMS(数据库管理系统),由瑞典MySQLAB 公司开发,目前属于 Oracle 公司,MySQL是最流行的关系型数据库管理系统(关系数据库,是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的...
shell操作数据库实战之shell脚本与MySQL数据库交互(增删改查) student.sql,可以导入到数据库中做假数据,方便处理练习数据库操作
分别介绍了PHP 7的基本概念、PHP服务器环境配置、PHP的基本语法、PHP的语言结构、字符串和正则表达式、数组、时间和日期、面向对象、错误处理和异常处理、PHP与Web页面交互、文件与目录操作、图形图像处理、Cookie与...
主要给大家介绍了关于MySQL自动停机的问题处理,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 ...
优化实战范例 3 认识影响结果集 4 影响结果集的获取 4 影响结果集的解读 4 常见案例及优化思路 5 理解执行状态 7 常见关注重点 7 执行状态分析 8 分析流程 9 常见案例解析 11 总结 12 Mysql 运维优化 14 存储引擎...