Mysql学习之路
记录自己学习的知识,今天要比昨天更好!
to_be_better_one
在技术的浪潮中掀起一点点涟漪
展开
-
初学MySQL—读写分离
读写分离概述强制走主库方案Sleep方案判断主备无延迟方案配合semi-sync等GTID方案总结概述读写分离的主要目标是分摊主库的压力,上图的结构是客户端主动做负载均衡,由客户端来选择后端数据进行查询;另一种架构是MySQL和客户端之间有一个中间代理层proxy,客户端只连接proxy,由proxy根据请求类型和上下文决定请求的分发路由。两种方案:客户端直连方案:查询性能好一点,...原创 2019-08-22 10:53:26 · 341 阅读 · 0 评论 -
初学MySQL—主备一致
主备一致MySQL主备的基本原理binlog的三种格式对比为什么会有mixed的binlog格式循环复制问题总结binlog可以用来归档,也可以用来做主备同步,为什么备库执行了binlog就可以和主库保持一致?MySQL主备的基本原理状态1中,客户端的读写都直接访问节点A,节点B是节点A的备库,只是将A的更新同步到本地执行,保证节点A和B的数据是相同的;状态2中,客户端读写访问的都是节点...原创 2019-08-20 10:28:01 · 244 阅读 · 0 评论 -
初学MySQL—MySQL是如何保证数据不丢失的?
MySQL是如何保证数据不丢失的?binlog的写入机制redo log的写入机制只要redo log和binlog能够持久化到磁盘中,就能确保MySQL在异常重启后,数据可以恢复。下面一起来了解下MySQL中binlog和redo log的写入流程。binlog的写入机制事务执行过程中,先把日志写到binlog cache,事务提交的时候,再把binlog cache写到binlog文件中...原创 2019-08-19 08:30:08 · 990 阅读 · 0 评论 -
初学MySQL—加锁规则
加锁规则加锁规则案例一:等值查询间隙锁案例二:非唯一索引等值锁案例三:主键索引范围锁案例四:非唯一索引范围锁案例五:唯一索引范围锁bug案例六:非唯一索引上存在“等值”的例子案例七:limit加锁案例八:一个死锁的例子总结间隙锁在可重复读隔离级别下才有效,本篇博文默认是可重复隔离级别加锁规则总结为两个“原则”、两个“优化”和一个“bug”原则1:加锁的基本单位是next-key lock...原创 2019-08-16 11:30:57 · 370 阅读 · 0 评论 -
初学MySQL—幻读
幻读幻读幻读的问题解决幻读总结幻读看一下下面的场景:假设只在id=5这一行加行锁,来看一下Q1、Q2、Q3的返回结果。Q1只返回了id=5这一行;T2时刻,session B 把 id=0 这一行的 d 值改成了 5,因此 T3 时刻 Q2 查出来的是id=0 和 id=5 这两行;在 T4 时刻,session C 又插入一行(1,1,5),因此 T5 时刻 Q3 查出来的是 i...原创 2019-08-15 09:59:49 · 936 阅读 · 0 评论 -
初学MySQL——order by的执行过程
order by是怎样执行的?全字段排序rowid排序全字段排序VSrowid排序总结以市民表为例,假设查询城市是上海所有人的名字,按照姓名排序返回前1000个人的姓名和年龄。select city,name,age from t where city = '上海' order by name limit 1000;全字段排序explain select city,name,age fr...原创 2019-08-14 10:05:59 · 1787 阅读 · 0 评论 -
初学MySQL—数据库表的空间回收
数据库表的空间回收参数innodb_file_per_table数据删除流程重建表Online和inplace总结思考一下:为什么又的时候,将表中的数据删掉了一半,但是表文件的大小还是没变?一个InnoDB表包含两个部分,即:表结构定义和数据,表结构定义占用的空间很小,今天主要讨论的是表数据。参数innodb_file_per_tableinnodb_file_per_table参数控制表...原创 2019-08-13 09:36:01 · 417 阅读 · 0 评论 -
初学MySQL-索引的选择
索引该如何选择如何选择索引查询更新change bufferchange buffer使用场景索引的选择和实践change buffer和redo log如何选择索引再不同的业务场景下,如何选择唯一索引还是普通索引?如果需要按照身份证号查姓名,就需要执行以下sql语句:select name from CUser where id_card = 'xxxxxxxxyyyyyyyzzzz';...原创 2019-08-11 12:03:27 · 132 阅读 · 0 评论 -
初学MySQL—如何给字符串加索引?
如何给字符串加索引?索引的选择前缀索引对覆盖索引的影响其它方式总结索引的选择例如对于一个支持邮箱登录的系统,如何在这个字段上建立合理的索引?在email字段上创建索引的语句如下:alter table SUser add index index1(email);alter table SUser add index index2(email(6));创建的index1索引中,包含了每...原创 2019-08-12 10:00:54 · 974 阅读 · 0 评论 -
初学MySQL-事务是隔离还是不隔离的?
事务是隔离的还是不隔离的?快照在MVCC中的工作原理更新逻辑事务的可重复读的能力是怎么实现的?总结进一步了解InnoDB的事务和锁MySQL中有两个视图的概念:view,用查询语句定义的虚拟表,在调用的时候执行查询语句并生成结果,创建视图的语法是create view…consistent read view用于支持RC(Read Committed,读提交)和RR(Repeatable...原创 2019-08-10 13:11:39 · 173 阅读 · 0 评论 -
初学MySQL—全局锁、表锁、行锁
初学MySQL-全局锁和表锁全局锁使用场景为何不使用readonly表级锁表锁元数据锁(metadata lock)数据库中表设计的初衷就是处理并发问题,当出现并发访问的时候,锁就是数据集库用来合理控制访问资源的访问规则。根据加锁的范围,MySQL中的锁大致分为全局锁、表级锁和行锁。全局锁全局锁就是对整个数据库实例加锁,MySQL中提供的加锁的命令是:Flush tables with ...原创 2019-08-09 15:00:04 · 569 阅读 · 1 评论 -
初学MySQL—索引
初学MySQL-索引索引的常见模型InnoDB的索引模型索引维护自增主键索引优化覆盖索引最左前缀原则索引下推总结索引的出现其实就是为了提高数据查询的效率,就像书的目录一样。索引的常见模型常用的是哈希表、有序数组和搜索树来提高读写效率。哈希表是一种以键-值(key-value)存储数据的结构,采用链表法来解决哈希冲突,缺点是数据不是有序的,采用哈希索引来进行区间查询的速度很慢,哈希表适用于...原创 2019-08-08 10:20:55 · 165 阅读 · 0 评论 -
初学MySQL—事务隔离
初学MySQL-事务隔离隔离性和隔离级别事务隔离的实现事务的启动方式事务就是保证一组数据库的操作,要么全部成功,要么全部失败。MySQL中对于事务的支持是在引擎层中实现的,通过InnoDB来剖析一下MySQL在事务支持方面的特定实现。隔离性和隔离级别事务的ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性)当数...原创 2019-08-07 09:47:46 · 187 阅读 · 0 评论 -
初学MySQL—基础架构和日志系统
通过一条查询和更新语句,了解MySQL的基础架构和日志系统原创 2019-08-06 11:00:53 · 555 阅读 · 0 评论