
MYSQL轻松学
MySQL实战知识分享,紧密业务需求,帮助初学者更快熟悉MySQL,更快成长为高级MySQL DBA。
MYSQL轻松学
微信公众号:easymysql
展开
-
insert事务产生duplicate key error引发的死锁分析
先看程序报错: 2017-06-12 21:18:40.856 [ForkJoinPool.commonPool-worker-12] ERROR com.jd.gms.maindata.accurate.service.impl.FixServiceImpl[51] - FixServiceImpl.fixSkuAttribute error java.lang.RuntimeException: org.springframework.dao.DeadlockLoserDat...原创 2020-11-11 15:51:05 · 1585 阅读 · 0 评论 -
MYSQL通过存储过程实现批量建表
适用于分表比较多的情况,如何批量创建,可通过存储过程实现。存储过程批量执行只是临时使用,不建议业务使用存储过程,有些存储过程封装SQL较多,导致性能下降,不容易排查。创建一个存储过程:红色为表结构,蓝色为表名及表数量,从0开始到255MySQL root@[test]>delimiter //MySQL root@[test]>create procedure sp_create_tab()beginset @str = " ( `id` int(11) NO...原创 2020-11-11 15:50:38 · 700 阅读 · 1 评论 -
Mysql Group Replication简介
MGR(Mysql Group Replication)是5.7版本新加的特性,是一个MySQL插件。MGR 是一个新的高可用与高扩展的方案,集群中的任何节点数据都是一样的,可以实现任何节点都可以写入,实现了真正意义上的多主。主要包含以下几部分API层:负责完成和MySQL Server的交互,得到Server状态,完成事务的管理。组件层:主要包括3个特定组件,Capture负责收集事务执行的相关信息,Applier负责应用集群事务到本地,Recovery负责节点的数据恢复。复制层原创 2020-11-11 15:49:58 · 3599 阅读 · 2 评论 -
MySQL高可用工具—Orchestrator初识
Orchestrator是一款开源的MySQL复制拓扑管理工具,采用go语言编写,支持MySQL主从复制拓扑关系的调整、支持MySQL主库故障自动切换、手动主从切换等功能。Orchestrator后台依赖于MySQL或者SQLite存储元数据,能够提供Web界面展示MySQL集群的拓扑关系及实例状态,通过Web界面可更改MySQL实例的部分配置信息,同时也提供命令行和api接口,以便更加灵活的自动化运维管理。相比于MHA,Orchestrator更加偏重于复制拓扑关系的管理,能够实现MySQL任一复制原创 2020-11-10 15:34:10 · 643 阅读 · 0 评论 -
【MYSQL】必考面试题10道(答案解释)
1、MySQL偶尔会出现OOM(内存溢出)现象,导致MySQl服务重启,以下哪种方式能有效缓解OOM的情况发生()A.适当调低innodb_buffer_pool_size大小,5.7之前需要重启MySQL服务。B.降低并发,避免查询分组排序和更多table cache。C.开启swap。D.将一个实例下库表拆成多个库表(分库分表)。答案:ABC解释:D.分库分表会open更多的表,占用更多系统内存。可以分库分表但不要放在一个主机和实例下。2、INSERT BUFFER即合并插入缓存..原创 2020-11-10 15:33:38 · 1328 阅读 · 1 评论 -
MYSQL面试必问—INSERT BUFFER
INSERT BUFFER即合并插入缓存,从MySQL 5.1.X版本(innodb 1.0.x)开始引入Changebuffer,是INSERT BUFFER升级版,不仅包括INSERT BUFFER,还包括UPDATE BUFFER、DELETE BUFFER、PURGE BUFFER。我们可以通过show engine innodb status看到INSERT BUFFER信息。一条命令解读InnoDB存储引擎—show engine innodb statusInsert..原创 2020-11-10 15:33:19 · 316 阅读 · 0 评论 -
MySQL SQL开发规范
工作内容 内容详细说明 1.主键自增 建表语句中主键自增或者研发在应用程序设置主 键为自增 2.auto_increment=1 建表语句中保证auto_increment=1或者没有此参 数(默认是从1开始自增) 3.禁止使用大字段(text,mediumext,longtext;) mysql数据库字段类型禁止使用大字段,(如:...原创 2020-11-10 15:32:59 · 221 阅读 · 0 评论 -
提高应用性能,你应该知道的SQL小技巧
应用程序慢如牛,原因多多,可能是网络的原因、可能是系统架构的原因,还有可能是数据库的原因。那么如何提高数据库SQL语句执行速度呢?有人会说性能调优是数据库管理员(DBA)的事,然而性能调优跟程序员们也有莫大的关系。程序中嵌入的一行行的SQL语句,如果使用了一些优化小技巧,定能达到事半功倍的效果。技巧1 比较运算符能用 “=”就不用“<>”“=”增加了索引的使用几率。技巧2 明知只有一条查询结果,那请使用 “LIMIT 1”“LIMIT 1”可以避免全表扫描,找到..原创 2020-11-10 15:29:26 · 123 阅读 · 0 评论 -
MySQL OOM的排查思路及优化方法
OOM全称"Out Of Memory",即内存溢出。内存溢出已经是软件开发历史上存在了近40年的“老大难”问题。在操作系统上运行各种软件时,软件所需申请的内存远远超出了物理内存所承受的大小,就叫内存溢出。内存溢出产生原因多种多样,当内存严重不足时,内核有两种选择: 直接panic 杀掉部分进程,释放一些内核。 大部分情况下,会杀掉导致OOM的进程,然后系统恢复。通常我们会添加对内存的监控报警,例如:当memory或swap使用超过90%时,触发报警通知,需要及时介入排查。原创 2020-11-09 10:55:04 · 862 阅读 · 0 评论 -
MYSQL源码解析:XA与二阶段提交
问题 业务上新增一条订单记录,用户接收到BinLake拉取的 MySQL 从库数据消息后,马上根据消息内的订单号去查询同一个MySQL从库,发现有些时候无法查到该条数据,等待大约500ms~1000ms后再去查询数据库,可以查询到该条数据。 注: BinLake为京东商城 数据库 技术部自研的一套订阅和消费MySQL数据库binlog的组件,本例所描述的问题是业务方希望根据订阅的binlog来获取实时订单等业务消息。 Binlog与内部XA 2.1 XA的概念 ...原创 2020-11-09 10:52:23 · 733 阅读 · 0 评论 -
MySQL大小写敏感总结
在MySQL中,数据库、表、triggers实际上都对应了datadir目录(或子目录)下的文件,因此,这些对象的名字是否大小写敏感主要是依赖于操作系统和文件系统的,因此这些内容在Windows中是大小写是不敏感的,而在大多数类Unix系统中是敏感的(Mac OS X除外),当然对于建立在这些类Unix系统上的MySQL,敏感性可以在一定程度上通过参数的修改来设定。1、column(包括别名)、 index、routine和 event names在所有平台上大小写都是不敏感的;2、l..原创 2020-11-09 10:51:43 · 570 阅读 · 0 评论 -
MYSQL高性能优化总结
1.1 前言在进行MySQL的优化之前必须要了解的就是MySQL的查询过程,很多的查询优化工作实际上就是遵循一些原则让MySQL的优化器能够按照预想的合理方式运行而已。图 - MySQL查询过程1.2 优化的哲学优化有风险,涉足需谨慎1.2.1 优化可能带来的问题优化不总是对一个单纯的环境进行,还很可能是一个复杂的已投产的系统。优化手段本来就有很大的风险,只不过你没能力意识到和预见到!任何的技术可以解决一个问题,但必然存在带来一个问题的风险!对于优...原创 2020-11-09 10:51:26 · 484 阅读 · 1 评论 -
MySQL并发复制演进
MySQL5.5及以前的复制一般主从复制有三个线程且都是单线程:Binlog Dump(主) --> IO Thread(从) --> SQL Thread(从)。1、master节点的Binlog dump Thread,当slave节点与master正常连接的时候,master把更新的binlog内容推送到slave节点。2、slave节点的I/O Thread ,该线程通过读取master节点binlog日志名称以及偏移量信息将其拷贝到本地relay l...原创 2020-11-09 10:51:09 · 251 阅读 · 0 评论 -
MYSQL INNODB表压缩
压缩前提表压缩能提升性能,减少存储空间,主要是用在字符类型比较大的表上(VARCHAR,VARBINARY和BLOB和TEXT类型),且读多写少的情况下,如果你的应用是io密集型的,不是cpu密集型的,那么压缩会带来很多性能的提升,例如:数据仓库。innodb_file_format = Barracuda --模式支持压缩innodb_file_per_table = on --必须是独立表空间压缩原理InnoDB支持两种文件格式 Antelope(羚羊)和Barracuda(梭.原创 2020-11-09 10:49:21 · 716 阅读 · 0 评论 -
MYSQL GTID使用介绍
GTID定义:定义: GTID即全局事务ID(global transaction identifier),一个事物对应一个GTID 引入: MySQL-5.6.5开始支持,MySQL-5.6.10后开始完善 组成: GTID = server_uuid :transaction_id server_uuid 首次启动时 MySQL 会自动生成一个 server_uuid,并且保存到 auto.cnf 文件,一个实例对应一个server_uuid tra...原创 2020-11-09 10:48:14 · 480 阅读 · 0 评论 -
MYSQL架构调整的常用方式
一、不同级别挂载为同一级别低级从库往上级挂载比较简单,只要上一级停止复制线程,确保没有数据写入,记录此时被挂载的主库位点,按此位点change即可。如下:把192.168.1.4提升为1级从库,挂载到192.168.1.1下操作步骤:步骤 主库 一级从库 二级从库 IP 192.168.1.1 192.168.1.3 192.168.1.4 1 停止1级从库的复制线程 stop slave; ..原创 2020-11-09 10:40:47 · 150 阅读 · 1 评论