0

线上MySQL读写分离,出现写完读不到问题如何解决?

今天我们来详细了解一下主从同步延迟时读写分离发生写后读不到的问题,依次讲解问题出现的原因,解决策略以及 Sharding-jdbc、MyCat 和 MaxScale 等开源数据库中间件具体的实现方案。一、写后读不到问题MySQL 经典的一主两从三节点架构是大多数创业公司初期使用的主流数据存储方案之一,主节点处理写操作,两个从节点处理读操作,分摊了主库的压力。但是,有时候可能会遇到执行完写操作后,立刻去读发现读不到或者读到旧状态的尴尬场景。这是由于主从同步可能存在延迟,在主节点执行完写操作,再去从节点执行读操作,读取了之前旧的状态。上图展示了此类问题出现的操作顺序示意图:客户端首先通过代理向主节...

阅读全文>>

0

「MySQL笔记」left join-on-and 与 left join-on-where 的区别

1. 摘要关于这两种写法的重要知识点摘要如下:left-join 时,即使有相同的查询条件,二者的查询结果集也不同,原因是优先级导致的,on 的优先级比 where 高on-and 是进行韦恩运算连接生成临时表时使用的条件where 是全部连接完生成临时表后,再根据条件过滤on 优先级比 where 高,因此,理论上 on-and 写法执行效率比 on-where 高,速度更快inner-join 时,不管是对左表还是右表进行筛选,on-and 和 on-where 都会对生成的临时表进行过滤2. 这两种写法有什么区别两者放置相同条件,之所以可能会导致结果集不同,就是因为优先级。on的优先级是...

阅读全文>>

0

Oracle与Mysql区别

1. Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高。 2. Oracle支持大并发,大访问量,是OLTP最好的工具。 3. 安装所用的空间差别也是很大的,Mysql安装完后才152M而Oracle有3G左右,且使用的时候Oracle占用特别大的内存空间和其他机器性能。 4. Oracle也Mysql操作上的一些区别 ①主键 Mysql一般使用自动增长类型,在创建表时只要指定表的主键为auto increment,插入记录时,不需要再指定该记录的主键值,Mysql将自动增长;Orac...

阅读全文>>

0

为什么delete表数据,磁盘空间却还是被占用

最近有个上位机获取下位机上报数据的项目,由于上报频率比较频繁且数据量大,导致数据增长过快,磁盘占用多。为了节约成本,定期进行数据备份,并通过delete删除表记录。明明已经执行了delete,可表文件的大小却没减小,令人费解项目中使用Mysql作为数据库,对于表来说,一般为表结构和表数据。表结构占用空间都是比较小的,一般都是表数据占用的空间。当我们使用 delete删除数据时,确实删除了表中的数据记录,但查看表文件大小却没什么变化。Mysql数据结构凡是使用过mysql,对B+树肯定是有所耳闻的,MySQL InnoDB 中采用了 B+ 树作为存储数据的结构,也就是常说的索引组织表,并且数据时...

阅读全文>>

0

MySQL:按照ID分组日期时间求和,过滤重叠时间

原始数据SELECT d.waybill_no, @group_row:=CASE WHEN @parent_code=picked_by THEN @group_row+1 ELSE 1 END AS id, @parent_code1:=picked_by AS picked_by1, MIN(spd.picked_date) start_time, MAX(spd.picked_date) end_time, TIMESTAMPDIFF(HOUR,MIN(spd.picked_date),MAX(spd.picked_date)) times, spd.picked_by FROM `...

阅读全文>>

0

海量数据写入——万级并发的订单系统如何分库?

一定要分表分库吗?当然不一定。虽然很多互联网公司的体量很大、用户非常多,但你千万不要被这些现象迷惑了。实际上,90% 以上的系统能够发展到上百万、上千万数据量已经很不错了。对于千万的数据量,开源的 MySQL 都可以很好地应对,更别说一些商业数据库了。另外,当数据增长到一定量级后,可以在业务层面做一些处理。比如根据业务特点,对无效数据、软删除数据,以及业务上不会再查询的数据进行统一归档,这也是一个成本低、效果明显的方式了。一定要分库吗?说到分库,他当然能够解决存储的问题,假设原先单库只能最多存储2千万的数据量。采用分库之后,存储架构变成下图所示的分库架构,每个分库都可以存储2千万数据量,容量的...

阅读全文>>

0

mysql-DCL语句与帮助的使用

DCL语句DCL语句主要是DBA用来管理系统中的对象权限时使用,一般的开发人员很少使用。下面通过一个例子简单说明一下。创建一个数据库用户z1,具有对sakila数据库中所有表的SELECT/INSERT 权限,并且密码为123。grant select,insert on sakila.* to ‘z1’@’localhost‘indentified by ‘123’;收回z1的insert权限。revoke insert on sakila.* from ‘z1’@’localhost’;帮助的使用输入‘? contents’ 就可以查看mysql中一些提供帮助的内容。输入’? data t...

阅读全文>>

0

MySQL 8.0.19亿级数据如何秒速增加字段?

概述今天主要介绍一下MySQL 8.0.19 instant add column的新特性,基于亿级数据秒速增加字段,下面一起来看看吧~一、MySQL DDL 的方法MySQL 在大型表上的 DDL 会带来耗时较久、负载较高、额外空间占用、MDL、主从同步延时等情况。需要特别引起重视,而MySQL 的 DDL 有很多种方法。MySQL 本身自带三种方法,分别是:copy、inplace、instant。copy 算法为最古老的算法,在 MySQL 5.5 及以下为默认算法。从 MySQL 5.6 开始,引入了 inplace 算法并且默认使用。inplace 算法还包含两种类型:rebuild...

阅读全文>>

0

MySQL innodb意向锁介绍

大家知道,InnoDB 实现了标准的行级锁,包括:共享锁(S锁)、排它锁(X锁)。那么为什么需要引入意向锁呢?它能解决什么问题呢?假设,事务A获取了某一行的排它锁,尚未提交,此时事务B想要获取表锁时,必须要确认表的每一行都不存在排他锁,很明显效率会很低,引入意向锁之后,效率就会大为改善:如果事务A获取了某一行的排它锁,实际此表存在两种锁,表中某一行的排他锁和表上的意向排他锁。如果事务B试图在该表级别上加锁时,则受到上一个意向锁的阻塞,它在锁定该表前不必检查各个页或行锁,而只需检查表上的意向锁。打个比方,就像有个游乐场,很多小朋友进去玩,看门大爷如果要下班锁门,他必须确保每个角落都要去检查一遍,...

阅读全文>>

0

mysql一张表到底能存多少数据?

前言程序员平时和mysql打交道一定不少,可以说每天都有接触到,但是mysql一张表到底能存多少数据呢?计算根据是什么呢?接下来咱们逐一探讨知识准备数据页在操作系统中,我们知道为了跟磁盘交互,内存也是分页的,一页大小4KB。同样的在MySQL中为了提高吞吐率,数据也是分页的,不过MySQL的数据页大小是16KB。(确切的说是InnoDB数据页大小16KB)。详细学习可以参考官网 我们可以用如下命令查询到。mysql> SHOW GLOBAL STATUS LIKE 'innodb_page_size'; +----------------...

阅读全文>>