• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!
MySQL InnoDB事务编写语法

MySQL InnoDB事务编写语法

一、事务控制语句 对于一个事务存储引擎来说如果没有明确启动一个事务,默认是能实现自动提交每一个操作都能直接提交。而MySQL默认采用自动提交模式。也就是说,在 InnoDB 中,所有的用户操作均是以事务方式处理的如果不是显式地开始一个事务,每个 SQL 语句将以一个单独的事务来处理。MySQL 通常是以自动提交方式建立一个服务连接的。查看变量autocomm……

MySQL InnoDB单机事务原理

MySQL InnoDB单机事务原理

一、事务简介 事务(transaction)是数据库区别于文件系统的一个重要特性,事务意为一系列操作的集合,具有 ACID 的特性,能将数据库从一个一致的状态转换到另一个状态。 简单说事务就是由一组 SQL 语句组成的一个执行单元,在这组执行单元中的所有语句要么全部执行成功,要么全部执行失败。 在 MySQL 中,InnoDB 存储引擎支持事务操作,这里也主……

MySQL InnoDB历史与架构

MySQL InnoDB历史与架构

一、InnoDB存储引擎 InnoDB是事务安全的MySQL存储引擎,设计上采用了类似于Oracle数据库的架构。通常来说,InnoDB存储引擎时OLTP应用中核心表的首选存储引擎。同样,也正是因为InnoDB的存在,才使MySQL数据库变得更有魅力。目前InnoDB属于MySQL默认存储引擎,并且在MySQL 8.0开始,包括元数据表也都是使用InnoDB……

MySQL InnoDB死锁及死锁检测(四)

MySQL InnoDB死锁及死锁检测(四)

一、MySQL InnoDB死锁阐述 在MySQL中,当两个或以上的事务相互持有和请求锁,并形成一个循环的依赖关系,就会产生死锁。多个事务同时锁定同一个资源时,也会产生死锁。在一个事务系统中,死锁是确切存在并且是不能完全避免的。 InnoDB会自动检测事务死锁,立即回滚其中某个事务,并且返回一个错误。它根据某种机制来选择那个最简单(代价最小)的事务来进行回滚……

MySQL InnoDB行锁类型测试(二)

MySQL InnoDB行锁类型测试(二)

一、InnoDB锁算法 InnoDB支持到行级别粒度的并发控制,下面我们分析下几种常见的行级锁类型,以及在哪些情况下会使用到这些类型的锁。 1)Record Lock(源码定义名称:LOCK_REC_NOT_GAP) 锁带上这个Flag时,表示这个锁对象只是单纯的锁在记录上,不会锁记录之前的GAP。在RC隔离级别下一般加的都是该类型的记录锁(但唯一二级索引上……

MySQL InnoDB锁系统阐述(一)

MySQL InnoDB锁系统阐述(一)

一、什么是锁? 开发多用户、数据库驱动的应用时,最大的难点是:一方面要最大程度地利用数据库的并发访问,另外一方面还要确保每个用户能以一致的方式读取和修改数据。为此就有了锁的机制。同时这也是数据库系统区别于文件系统的一个关键特性,InnoDB存储引擎之MySQL数据库的其他存储引擎在这方面技高一筹,就是因为它支持高并发,而高并发的实现很大程度上得益于细粒度的锁……

关于memcached的经典问题总结

关于memcached的经典问题总结

这里收集了经常被问到的关于memcached的问题 * memcached是怎么工作的? * memcached最大的优势是什么? * memcached和MySQL的query cache相比,有什么优缺点? * memcached和服务器的local cache(比如PHP的APC、mmap文件等)相比,有什么优缺点? * memcached的cache……

理解memcached为什么会丢数据?

理解memcached为什么会丢数据?

分享一个memcached丢失数据后的解决办法 在看这篇文章之前,最起码要知道memcached系列前三篇的知识,最重要的就是memcached的命令以及memcached内存管理策略,这是理解memcached为什么会丢数据的基础。 01-Memcached缓存数据库介绍 02-Memcached安装使用详解 03-Memcached内存分配策略 04-M……

MySQL中sleep连接过多的问题解决

MySQL中sleep连接过多的问题解决

在MySQL中运行SHOW PROCESSLIST;,现数据库中有很多这样的进程: 上图可以看出,bim用户发起了274个连接,都是sleep状态。MySQL中Sleep连接过多,那么造成sleep的原因,有三个,下面是mysql手册给出的解释: 1)客户端程序在退出之前没有调用mysql_close()。[写程序的疏忽,或者数据库的db类库没有自动关闭每……

MySQL交换分区使用

MySQL交换分区使用

MySQL 5.6开始支持ALTER TABLE … EXCHANGE PARTITION语句。该语句允许分区或子分区中的数据与另一个非分区的表中的数据进行交换。如果非分区表中的数据为空,那么相当于将分区中的数据移动到非分区表中。若分区表中的数据为空,则相当于将外部表中的数据导入到分区中。 要使用ALTER TABLE … EXCHA……

使用pt-online-schema-change在线修改MySQL表结构

使用pt-online-schema-change在线修改MySQL表结构

一、背景 MySQL大字段的DDL操作:加减字段、索引、修改字段属性等,在MySQL 5.1之前都是非常耗时耗力的,特别是会对MySQL服务产生影响。在MySQL 5.1之后随着Plugin Innodb的出现在线加索引的提高了很多,但是还会影响(时间缩短了),主要是在更改期间,会生成一个互斥锁,阻塞对整个表的所有操作。不过MySQL 5.6版本开始已经支持……

使用pt-table-checksum&pt-table-sync检查和修复主从数据一致性

使用pt-table-checksum&pt-table-sync检查和修复主从数据一致性

一、背景 公司数据中心从托管机房迁移到阿里云,需要对MySQL迁移(Replication)后的数据一致性进行校验,但又不能对生产环境使用造成影响,pt-table-checksum成为了绝佳也是唯一的检查工具。所以就利用pt-table-checksum工作来检查主从的一致性,以及通过pt-table-sync如何修复这些不一致的数据。 pt-table-……