MYSQL
文章平均质量分 82
MySQL技术学习交流
周杰伦的稻香
Life.Just smile
展开
-
EXPLAIN执行计划详解
是 MySQL 中的一个非常实用的命令,主要用于分析 SQL 查询语句的执行计划(Query Execution Plan,QEP)。通过这个命令,用户可以获取到数据库引擎如何执行特定的 SQL 语句的详细信息,这对于优化查询性能、理解查询的工作方式以及识别潜在的性能瓶颈非常有帮助。原创 2024-05-24 15:06:17 · 256 阅读 · 0 评论 -
ProxySQL路由策略实现读写分离
在mysql_query_rules表中配置, 将reader,writer用户的select(读)请求路由到20(读组),也就是后端的slave节点,将writer用户的DDL,DML请求路由到10(写组),也就是后端的master节点。目的:配置proxysql路由策略后将不同用户的不同请求路由到不同的节点。用writer登陆,执行一个DQL,发现请求被路由到了slave节点。还是用writer用户登陆创建一个表,发现请求被路由到了master。原创 2024-05-22 14:00:08 · 188 阅读 · 0 评论 -
基于ProxySQL中间件实现MySQL的读写分离
是一个高性能的MySQL协议代理,它支持多种数据库后端,包括Amazon Aurora、RDS、ClickHouse、Galera、Group Replication、MariaDB Server、NDB、Percona Server等。它的设计目标是为了提高数据库访问的灵活性、性能和安全性。:能够智能地将读请求路由到从库(Slave),而写请求则发送到主库(Master),以此来优化负载均衡和提高读取性能。原创 2024-05-14 14:16:45 · 644 阅读 · 1 评论 -
MySQL中JOIN连接的实现算法
我们都知道SQL的join关联表的使用方式,但是这次聊的是实现join的算法,join有三种算法,分别是Nested Loop Join,Hash join,Sort Merge Join。原创 2024-05-07 14:52:49 · 1245 阅读 · 1 评论 -
MySQL 中的HASH详解
MySQL中的哈希索引(Hash Index)是一种特殊的数据库索引类型,它利用哈希表(Hash Table)的数据结构来存储索引项。哈希表通过哈希函数(Hash Function)将索引列的值转化为一个固定长度的哈希码(Hash Code),然后用这个哈希码作为索引项在表中定位数据记录的位置。这种方式使得对于等值查询(例如)能够非常快速,理想情况下接近O(1)的时间复杂度。原创 2024-05-07 11:17:25 · 413 阅读 · 1 评论 -
ERROR:Temporary file write failure.
看起来主要是在var下面,然后一步一步定位到/var/lib/mysql下面fulltmp文件。这样一看在结合经验来看应该是临时目录满了,好家伙不看不知道,一看原来是磁盘都满了。看报错是临时文件写入失败,在结合当时执行的sql来看确实是需要创建临时表。看一下磁盘满的原因,是有用户使用dd命令创建了一个文件导致磁盘打满。这个文件应该是没什么用直接删除就好,删除之后磁盘下降。背景:在执行DDL原句的时候失败报错。然后我们去找一下这个文件在哪里。原创 2024-04-26 15:58:00 · 170 阅读 · 0 评论 -
ERROR 3546 (HY000) at line 26: @@GLOBAL.GTID_PURGED cannot .....overlap with @@GLOBAL.GTID_EXECUTED
参数进行备份,然后将备份数据导入到另一个同样启用GTID的数据库服务器,可能会引发GTID冲突。这是因为备份文件中包含了原服务器的GTID历史信息,导入时会尝试在目标服务器上应用这些GTID,如果目标服务器已经存在相同的GTID(例如,因为两台服务器原本就共享过一部分复制历史),则可能导致事务重复或跳过的问题。这样做有助于避免在将备份数据导入到另一个GTID环境中时可能出现的GTID冲突,特别适用于仅迁移部分数据或独立数据库的场景。如果在启用了GTID复制的环境中,不使用。参数在使用 mysqldump。原创 2024-04-24 17:27:36 · 426 阅读 · 0 评论 -
MySQL高可用搭建方案MHA
MHA是Master High Availability的缩写,它是目前MySQL高可用方面的一个相对成熟的解决方案,其核心是使用perl语言编写的一组脚本,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~ 30秒之内自动完数据库的故障切换操作,并且能在最大程度上保证数据的一致性,以达到真正意义上的高可用。基于MHA的架构不像MMM那样需要搭建主主复制,只需要搭建基本的主从复制架构即可。原创 2024-04-08 17:15:27 · 995 阅读 · 0 评论 -
MySQL8.0.36 GTID主从同步失败排查
看起来因该是主库的的一个school库被手动删除,而从库中没有这个school导致binlog不一致出现报错,那么只要在从库中将这个事务手动的跳过即可。根据报错信息查看具体内容。解析binlog日志查看。启动线程检查复制关系。原创 2024-04-03 17:22:42 · 219 阅读 · 0 评论 -
YUM安装MySQL报错合集
但是有意思的是上面这个报错解决了,但是又出现了一个新的error,意思就是找不到。即可解决这个问题,改名的话就不介绍了,毕竟这么简单不会有人还不会吧!这个文件了,对于这个error我这里是将之前下载的。去官网下载最新的GPG-KEY即可 ,原创 2024-04-02 11:11:17 · 469 阅读 · 0 评论 -
MySQL RPM包安装
安装数据库需要的四个rpm包安装mysql之前清理mariadb的依赖若是启动和密码登录的时候失败就清理/var/lib/mysql/下的数据重新尝试若是想用其他的2种方法安装MySQL数据库可以参考MySQL安装保姆级教程。原创 2023-09-16 00:13:33 · 309 阅读 · 1 评论 -
使用mycli实现MySQL命令自动补全功能(Python-3.9.0)
当我们在CentOS中通过yum,rpm,编译安装MySQL后,一般在命令行中登陆MySQL后会发现没有tab补全功能,这个时候对我们来说不太友好,毕竟命令非常多不可能都记住,这个时候你可以考虑安装一些第三方工具或插件,如mycli或pgcli,它们提供了更强大的命令补全功能和易用的交互界面,可以帮助你更高效地管理数据库,下面介绍到的是mycli工具的安装。原创 2024-03-22 13:28:12 · 293 阅读 · 0 评论 -
关于在CentOS中卸载MySQL
想要卸载MySQL当然要知道自己的MySQL是用那种方法来安装的了,一般来说MySQL的安装方法在市面上有三种 编译安装、YUM安装、RPM安装,下面会介绍到后两种安装的卸载方法首先查看是否安装MySQL,一般可以看到版本信息就证明安装了mysql -V。原创 2024-03-21 18:14:01 · 362 阅读 · 0 评论 -
物化视图(Materialized view)详解
物化视图(Materialized View)是一种预先计算和存储的查询结果,类似于数据库中的表。与普通视图不同,物化视图在创建时会将查询的结果物理存储在内存或磁盘上,而不是在查询时动态计算。原创 2024-01-29 13:53:03 · 581 阅读 · 0 评论 -
REPLACE INTO
在数据库中,REPLACE INTO 是一种用于插入或更新数据的(DML) SQL 语句。它与 INSERT INTO 语句类似,但具有一些特殊的行为。原创 2024-01-16 10:43:27 · 547 阅读 · 0 评论 -
公用表达式 Common Table Expressions - CTE
MySQL 从 8.0 开始支持 WITH 语法,即:Common Table Expressions - CTE,公用表表达式。公用表达式CTE(Common Table Expression,公共表表达式)是一个命名的临时结果集,它存在于单个语句的作用域中,以后可以在该语句中多次被引用。如下查询语句的即为公共表表达式,它是一个命名的(名字叫cte)结果集,而且在该条语句中它可以被当做临时表来引用(最后的select语句引用了它)。初次接触CTE是不是感觉跟派生表子查询很像?没错!原创 2023-12-19 16:48:23 · 1088 阅读 · 0 评论 -
学SQL JOINS看这一篇文章就够了
在数据库中,连接(Join)是用于将两个或多个表中的数据关联起来的操作。连接操作有多种类型,其中包括内连接和外连接。内连接的话只有一种而外连接的话有六种,当然还有一种连接叫做交叉连接。原创 2023-12-04 16:04:51 · 117 阅读 · 0 评论 -
【MySQL】MySQL分库分表详解[通俗易懂]
在互联网还未崛起的时代,我们的传统应用都有这样一个特点:访问量、数据量都比较小,单库单表都完全可以支撑整个业务。随着互联网的发展和用户规模的迅速扩大,对系统的要求也越来越高。因此传统的MySQL单库单表架构的性能问题就暴露出来了。转载 2023-11-17 14:12:20 · 1832 阅读 · 0 评论 -
全文索引&前缀索引
全文索引是一种用于支持文本数据搜索的索引类型,它可以帮助数据库系统高效地执行全文搜索操作,包括模糊匹配、关键词搜索等。在MySQL中,全文索引通常用于对文本类型的字段进行高效的搜索。全文索引与传统的B-tree索引不同,它使用了全文搜索引擎的特定算法和数据结构来实现对文本内容的索引和搜索。全文索引不仅考虑单词的出现,还会考虑到词语的语义、词根等信息,并能够支持自然语言查询。前缀索引是数据库中一种特殊的索引类型,它不是对整个列值进行索引,而是只对列值的前缀部分进行索引。原创 2023-11-10 15:58:08 · 159 阅读 · 0 评论 -
SQL SYNTAX
下面的命令是建立在表已经创建好的基础上去添加索引,如果是表还没有创建好的时候创建索引这里就不做过多的介绍了。原创 2023-11-09 17:29:44 · 158 阅读 · 0 评论 -
你知道Online DDL吗?
在线DDL(Online Data Definition Language)是指在数据库运行状态下执行数据定义语言(DDL)操作,例如创建、修改或删除表结构、索引等操作,而不会造成数据库的长时间锁定或无法使用。传统的DDL操作通常需要对受影响的表进行排他锁定,这可能导致其他会话无法对该表进行读写操作,从而影响了数据库的正常使用。COPY—— 5.6之前默认适应这种方法,全程无法并行DMLINPLACE—— MySQL 5.6出现的,在开始和提交的短租时间里,不能并行DMLINSTANT。原创 2023-11-09 14:25:47 · 1067 阅读 · 0 评论 -
三分钟搞懂MySQL5.6优化&索引下推
索引下推(Index Condition Pushdown,简称ICP),是MySQL5.6版本的新特性,它能减少回表查询次数,提高查询效率。原创 2023-11-08 10:14:32 · 126 阅读 · 0 评论 -
MVCC中的可见性算法
(1).如果m_ids包含trx_id,则代表Read View生成时刻,这个事务还未提交,但是如果数据的trx_id等于creator_trx_id的话,表明数据是自己生成的,因此是。(2)如果m_ids包含trx_id,并且trx_id不等于creator_trx_id,则Read View生成时,事务未提交,并且不是自己生产的,所以当前事务也是。(3).如果m_ids不包含trx_id,则说明你这个事务在Read View生成之前就已经提交了,修改的结果,当前事务是能看见的。原创 2023-11-07 14:17:20 · 530 阅读 · 0 评论 -
MySQL中的刷脏机制详解
如果没有,根据LRU算法,溢出LRU列表尾端的页,如果这些页有脏页,需要进行checkpoint。使用LRU算法,将淘汰LRU链表尾部的页,如果这个被释放的页时脏页,就要强制执行checkpoint,将脏页刷新到磁盘。这时候,MySQL 会把内存的脏页都 flush 到磁盘上,这样下次 MySQL 启动的时候,就可以直接从磁盘上读数据,启动速度会很快。这种情况是保证重做日志的可用性,说白了就是,重做日志中可以循环覆盖的部分空间太少了,换种说法,就是极短时间内产生了大量的redo log。原创 2023-11-07 11:31:40 · 603 阅读 · 0 评论 -
洞悉MySQL底层架构:游走在缓冲与磁盘之间
数据完整性依靠:redo log事务隔离级别的实现依靠MVCC,MVCC依靠undo log实现IO性能提升方式:buffer pool加快查询效率和普通索引更新的效率,log buffer对日志写的性能提升查询性能提升依赖于索引,底层用页存储,字段越小页存储越多行记录,查询效率越快;自增字段作为聚集索引可以加快插入操作;故障恢复:双写缓冲区、redo log主从同步:binlog。转载 2023-11-02 18:10:14 · 75 阅读 · 0 评论 -
ACID模型
ACID 是数据库管理系统(DBMS)中用来确保事务处理正确性和可靠性的四个特性的首字母缩写。ACID 是指原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。ACID 事务的特性保证了数据库中的事务处理是可靠和可靠的。通过将一系列操作组装成一个事务,并遵循 ACID 特性,可以确保数据库在并发环境下能够正确处理数据,并保持数据的一致性和完整性。原创 2023-11-01 18:25:21 · 134 阅读 · 0 评论 -
一篇文章让你了解MySQL中的索引
首先我们算出非叶子节点能放多少指针,一个指针的大小是6bit,id如果是integer类型是8bit,一共14bit,一页是16kb,也就是16384bit,所以一层非叶子节点最多可以存在16384/14=1170个指针,三阶的树这一层有16个叶子节点,就可以存放1770 * 16个指针,每个指针又指向一页,刚刚算出来一页放1170个指针,那就再乘以1770,所以最终可以存放1170 * 1170 * 16=21902400条记录。刚刚在说主键索引的时候,提到了innodb和myiSam。原创 2023-11-02 13:51:40 · 87 阅读 · 0 评论 -
MVCC详解
MVCC,即Multi-Version Concurrency Control (多版本并发控制)。它是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。通俗的讲,数据库中同时存在多个版本的数据,并不是整个数据库的多个版本,而是某一条记录的多个版本同时存在,在某个事务对其进行操作的时候,需要查看这一条记录的隐藏列事务版本id,比对事务id并根据事物隔离级别去判断读取哪个版本的数据。数据库隔离级别读已提交、可重复读。原创 2023-11-01 18:20:19 · 459 阅读 · 0 评论 -
InnoDB存储引擎
其实存储引擎也很简单,我认为就是一种存储解决方案,实现了新增数据、更新数据和建立索引等等功能。有哪些已有的存储引擎可以让我们选择呢?种类很多,但是常用的存储引擎目前就只有InnoDB和MyISAM,下面将会介绍到InnoDB存储引擎。原创 2023-10-30 16:15:57 · 110 阅读 · 0 评论 -
MySQL主从复制延时
如果使用的是STATEMENT格式,则可以考虑切换到ROW格式,以减少主从复制延迟。如果使用的是ROW格式,则可以考虑切换到MIXED格式,以避免大量的日志。在 MySQL 中,可以通过配置参数 binlog_format 来选择使用的复制格式,包括 STATEMENT、ROW 和 MIXED。在从数据库中使用缓存技术,例如Memcached或Redis等,可以减少从数据库的查询次数,从而提升性能。通过调整服务器负载,例如减少并发连接数、优化查询语句等,可以减轻从数据库的负载,从而提升性能。原创 2023-10-30 16:11:47 · 78 阅读 · 0 评论 -
MySQL语言分类
DDL操作可能会对数据库产生重大影响,请在操作之前务必进行充分的备份和谨慎评估。DML操作时要小心,确保对数据的操作符合预期,并且遵循数据库的安全性和完整性要求。DQL查询时要小心,确保查询结果符合预期,并且遵循数据库的安全性和完整性要求。DCL命令执行时需要谨慎操作,以确保数据的完整性和安全性。原创 2023-10-24 10:58:23 · 219 阅读 · 0 评论 -
浅谈数据库
数据库的发展经历了从简单的文件系统到层次结构、网状结构、关系型结构以及现在的NoSQL、NewSQL等多种类型的演化,同时也伴随着计算机技术和互联网的发展而不断地发展和改进。数据库的出现和发展让数据的存储、管理和应用变得更加高效和便捷,成为现代信息化社会中不可或缺的一部分。原创 2023-10-23 16:14:09 · 43 阅读 · 0 评论 -
MySQL的连接方式
mysql是通过什么连接的,这个怎么考率的,mysql是应用,我们需要实现的是mysql客户端与服务端进行通信,这里好比http,所以在客户端找到服务端之前,就需要他们所处的物理机先建立起连接,就如同http建立连接之前,需要tcp先建立连接。原创 2023-10-12 15:44:34 · 3432 阅读 · 0 评论 -
数据库代理和独享代理
数据库代理(Database Proxy)是一种位于应用程序和数据库服务器之间的中间层组件,用于管理和优化数据库访问。它充当了客户端和数据库之间的代理,并提供一系列功能和服务。连接池管理:数据库代理负责管理数据库连接池,维护一定数量的连接可供应用程序使用,从而减少连接的创建和销毁开销,提高数据库访问的效率。负载均衡:数据库代理可以通过在多个数据库服务器之间分发请求来实现负载均衡,从而平衡数据库服务器的负载,避免某些服务器过载而导致性能下降。原创 2023-10-17 14:03:07 · 327 阅读 · 0 评论 -
MySQL的HA切换机制
半同步复制、异步复制和全同步复制都是MySQL数据库中复制技术的一种实现方式。它们各自有着不同的数据复制机制、性能特点和可靠性保障。异步复制(Asynchronous Replication):异步复制是MySQL中最常用的复制方式之一。在异步复制中,主库将数据写入二进制日志,然后异步地将日志发送给从库进行复制。由于主库无需等待从库的确认,因此异步复制具有较高的写入性能,但复制的数据可能存在一定程度的延迟和不一致性。原创 2023-10-12 11:56:24 · 503 阅读 · 0 评论 -
MySQL Hint
MySQL Hint是一种能优化MySQL数据库查询性能的提示指令,也称为SQL注释或SQL提示。通过在SQL查询语句中添加hint,用户可以指导MySQL数据库选择最合适的查询执行路径。这种提示通常是以注释的形式添加到SQL查询语句中,以便优化MySQL的执行计划。当MySQL数据库优化器进行查询优化时,会考虑hint提供的信息,以生成更有效的查询执行计划。原创 2023-10-16 15:39:04 · 1051 阅读 · 0 评论 -
MySQL5.7.43 GTID主从复制配置
主库和从库的主配置文件中2个server-id=“不同的数字“做主从架构的时候若是使用克隆虚拟机需要在/var/lib/mysql/auto.cnf下面修改uuid,在MySQL中查看uuid show variables like '%server_uuid%';MySQL数据库的版本不同也会有问题,MySQL 8 的版本安全性相对较高,在做主从复制的时候要去修改一个表的数据,这里就不作过多介绍了Centos7的防火墙和SELinux一定要关闭。原创 2023-09-17 17:09:54 · 182 阅读 · 1 评论 -
MySQL 5和MySQL 8的区别
在数据库管理系统中,MySQL是一个广泛使用、开源的解决方案。它提供了强大的功能,同时具有优秀的性能和可扩展性。到目前为止,MySQL经历了两个重要的版本升级,从MySQL 5到MySQL 8。这两个版本在功能、性能和可扩展性方面都有一些显著的差异。本文将详细讨论这两个版本的差异以及MySQL 8的新功能。原创 2023-10-12 17:27:15 · 1657 阅读 · 0 评论 -
关系型数据库和非关系型数据库的区别
数据库是结构化信息或数据的有序集合,一般以电子形式存储在计算机系统中。通常由数据库管理系统 (DBMS)来控制。在现实中,数据、DBMS 及关联应用一起被称为数据库系统,通常简称为数据库。为了提高数据处理和查询效率,当今最常见的数据库通常以行和列的形式将数据存储在一系列的表中,支持用户便捷地访问、管理、修改、更新、控制和组织数据。另外,大多数数据库都使用结构化查询语言 (SQL) 来编写和查询数据。而数据库又可以分为关系型数据库和非关系型数据库。原创 2023-09-12 18:24:39 · 135 阅读 · 0 评论 -
MySQL中的存储引擎
在关系型数据库中,存储引擎是负责管理数据的方式和方法的组件或模块。它定义了数据如何被存储、访问和操作,决定了数据库的性能、可靠性和功能。存储引擎实现了数据库的核心功能,包括数据存储、索引管理、数据查询、事务处理、并发控制等。不同的存储引擎具有不同的特性和优势,可以根据应用需求选择最适合的引擎。总结来说,存储引擎是数据库中负责管理数据存储和操作的组件,它定义了如何存储、访问和处理数据。选择合适的存储引擎对于数据库的性能和功能至关重要。存储引擎主要特点InnoDB支持事务、外键和行级锁定;原创 2023-10-16 12:01:38 · 158 阅读 · 0 评论