Mysql 高可用
高可用高可用 指的是通过技术手段,确保数据库服务在出现各种故障时,能够快速、自动地恢复服务,从而保证业务的连续可用性。 复制复制是解决系统高可用的常见手段。其思路就是:不要把鸡蛋都放在一个篮子里。 复制解决的基本问题是让一台服务器的数据与其他服务器保持同步。一台主库的数据可以同步到多台备库上,备库本身也可以被配置成另外一台服务器的主库。主库和备库之 间可以有多种不同的组合方式。 MySQL 支持两种复制方式:基于行的复制和基于语句的复制。这两种方式都是通过在主库上记录 bin log、在备库重放日志的方式来实现异步的数据复制。这意味着:复制过程存在时延,这段时间内,主从数据可能不一致。 复制如何工作在 Mysql 中,复制分为三个步骤,分别由三个线程完成: binlog dump 线程 - 主库上有一个特殊的 binlog dump 线程,负责将主服务器上的数据更改写入 binlog 中。 I/O 线程 - 备库上有一个 I/O 线程,负责从主库上读取 binlog,并写入备库的中继日志(relay log)中。 SQL 线程 - 备库上有一个 SQL 线程...
Mysql 锁
Mysql 锁 不同存储引擎对于锁的支持粒度是不同的,由于 InnoDB 是 Mysql 的默认存储引擎,所以本文以 InnoDB 对于锁的支持进行阐述。 锁的分类为了解决并发一致性问题,Mysql 支持了很多种锁来实现不同程度的隔离性,以保证数据的安全性。 独享锁和共享锁InnoDB 实现标准行级锁定,根据是否独享资源,可以把锁分为两类: 独享锁(Exclusive),简写为 X 锁,又称为“写锁”、“排它锁”。 独享锁锁定的数据只允许进行锁定操作的事务使用,其他事务无法对已锁定的数据进行查询或修改。 使用方式:SELECT ... FOR UPDATE; 共享锁(Shared),简写为 S 锁,又称为“读锁”。 共享锁锁定的资源可以被其他用户读取,但不能修改。在进行 SELECT 的时候,会将对象进行共享锁锁定,当数据读取完毕之后,就会释放共享锁,这样就可以保证数据在读取时不被修改。 使用方式:SELECT ... LOCK IN SHARE MODE; 为什么要引入读写锁机制? 实际上,读写锁是一种通用的锁机制,并非 Mysql 的专利。在很多软件领域,都...
Mysql 事务
Mysql 事务 不是所有的 Mysql 存储引擎都实现了事务处理。支持事务的存储引擎有:InnoDB 和 NDB Cluster。不支持事务的存储引擎,代表有:MyISAM。 用户可以根据业务是否需要事务处理(事务处理可以保证数据安全,但会增加系统开销),选择合适的存储引擎。 事务简介事务概念“事务”指的是满足 ACID 特性的一组操作。事务内的 SQL 语句,要么全执行成功,要么全执行失败。可以通过 Commit 提交一个事务,也可以使用 Rollback 进行回滚。 ACIDACID 是数据库事务正确执行的四个基本要素。 原子性(Atomicity) 事务被视为不可分割的最小单元,事务中的所有操作要么全部提交成功,要么全部失败回滚。 回滚可以用日志来实现,日志记录着事务所执行的修改操作,在回滚时反向执行这些修改操作即可。 一致性(Consistency) 数据库在事务执行前后都保持一致性状态。 在一致性状态下,所有事务对一个数据的读取结果都是相同的。 隔离性(Isolation) 一个事务所做的修改在最终提交以前,对其它事务是不可见的。 持久性(Durabi...
Mysql 索引
索引简介MySQL 索引是一种数据结构,用于加快数据库查询的速度和性能 索引的优缺点B 树是最常见的索引,按照顺序存储数据,所以 Mysql 可以用来做 ORDER BY 和 GROUP BY 操作。因为数据是有序的,所以 B 树也就会将相关的列值都存储在一起。最后,因为索引中存储了实际的列值,所以某些查询只使用索引就能够完成全部查询。 ✔️️️️ 索引的优点: 索引大大减少了服务器需要扫描的数据量,从而加快检索速度。 索引可以帮助服务器避免排序和临时表。 索引可以将随机 I/O 变为顺序 I/O。 支持行级锁的数据库,如 InnoDB 会在访问行的时候加锁。使用索引可以减少访问的行数,从而减少锁的竞争,提高并发。 唯一索引可以确保每一行数据的唯一性,通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能。 ❌ 索引的缺点: 创建和维护索引要耗费时间,这会随着数据量的增加而增加。 索引需要占用额外的物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立组合索引那么需要的空间就会更大。 写操作(INSERT/UPD...
Mysql 存储引擎
概述在文件系统中,Mysql 将每个数据库(也可以称为 schema)保存为数据目录下的一个子目录。创建表示,Mysql 会在数据库子目录下创建一个和表同名的 .frm 文件保存表的定义。因为 Mysql 使用文件系统的目录和文件来保存数据库和表的定义,大小写敏感性和具体平台密切相关。Windows 中大小写不敏感;类 Unix 中大小写敏感。不同的存储引擎保存数据和索引的方式是不同的,但表的定义则是在 Mysql 服务层统一处理的。 MySQL 的存储引擎采用了插件的形式,每个存储引擎都面向一种特定的数据库应用环境。同时开源的 MySQL 还允许开发人员设置自己的存储引擎。 存储引擎相关操作查看存储引擎命令123456789101112# 查看支持的存储引擎SHOW ENGINES;# 查看默认的存储引擎SHOW VARIABLES LIKE 'storage_engine';# 查看某表所使用的存储引擎SHOW CREATE TABLE `table_name`;# 查看某数据库中的某表所使用的存储引擎SHOW TABLE STATUS LIKE ...
Mysql 架构
概述总的来说,MySQL 可以大体分为 Server 层和存储引擎层两部分。 Server 层包括连接器、查询缓存、解析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。 存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB,它从 MySQL 5.5.5 版本开始成为了默认存储引擎。 Mysql 查询流程SQL 语句在 MySQL 中是如何执行的? 大概流程可以参考下图: flowchart TD A[“客户端连接”] --> B[“连接器<br>管理连接, 认证”] B --> C{“查询缓存<br>(仅MySQL < 8.0)”} C -- 缓存命中 --> D[直接返回结果] C -- 缓存未命中/无缓存 --> E[“解析器<br&...
扩展 SQL
表查看表的基本信息12SELECT * FROM information_schema.tablesWHERE table_schema = 'test' AND table_name = 'user'; 查看表的列信息12SELECT * FROM information_schema.columnsWHERE table_schema = 'test' AND table_name = 'user'; 修改表的编码格式utf8mb4 编码是 utf8 编码的超集,兼容 utf8,并且能存储 4 字节的表情字符。如果表的编码指定为 utf8,在保存 emoji 字段时会报错。 1ALTER TABLE <tableName> CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; 其他显示哪些线程正在运行12345678mysql> show processlist;+----+---------------...
SQL 语法速成
SQL 简介 🔔 本文只针对mysql 数据库术语数据库(database) - 保存有组织的数据的容器(通常是一个文件或一组文件)。数据表(table) - 某种特定类型数据的结构化清单。模式(schema) - 关于数据库和表的布局及特性的信息。模式定义了数据在表中如何存储,包含存储什么样的数据,数据如何分解,各部分信息如何命名等信息。数据库和表都有模式。行(row) - 表中的一条记录。列(column) - 表中的一个字段。所有表都是由一个或多个列组成的。主键(primary key) - 一列(或一组列),其值能够唯一标识表中每一行。 SQL 语法 SQL(Structured Query Language),标准 SQL 由 ANSI 标准委员会管理,从而称为 ANSI SQL。各个 DBMS 都有自己的实现,如 PL/SQL、Transact-SQL 等。 SQL 语法结构SQL 语法结构包括: 子句 - 是语句和查询的组成成分,如:select、from、where、group by等。 表达式 - 表达式是能计算得出一个值的代码片段,如:>...
数据库系统概论
基础与模型类术语mysql 安装 下载:官网:https://dev.mysql.com/downloads/mysql/下载 zip 包解压 配置环境变量: 12345MYSQL_HOME E:\development\mysql-8.0.44-winx64# path里面添加%MYSQL_HOME%\bin 手动创建配置文件 my.ini 12345678910111213141516171819202122232425262728293031323334[mysqld]# 设置端口号(默认3306,若被占用可修改为3307等)port=3306bind-address=0.0.0.0 # 允许所有IP访问(本地测试可用 127.0.0.1)# 2. 可选:启用共享内存(Windows 本地连接优化)shared-memory=1shared-memory-base-name=MYSQL# 3. 可选:启用命名管道(Windows 本地连接)enable-named-pipe=1socket=MySQL# 设置MySQL安装目录(替换为你的解压路径)based...
redis 面试题
Redis 简介什么是 Redis【问题】 什么是 Redis? Redis 有什么功能和特性? 【解答】 什么是 Redis: Redis 是一个开源的“内存”数据库。由于,Redis 的读写操作都是在内存中完成,因此其读写速度非常快。 高性能 - 由于,Redis 的读写操作都是在内存中完成,因此性能极高。 高并发 - Redis 单机 QPS 能达到 10w+,将近是 Mysql 的 10 倍。 Redis 常被用于缓存,消息队列、分布式锁等场景。 Redis 的功能和特性: Redis 支持多种数据类型。如:String(字符串)、Hash(哈希)、 List (列表)、Set(集合)、Zset(有序集合)、Bitmaps(位图)、HyperLogLog(基数统计)、GEO(地理空间)、Stream(流)。 Redis 的读写采用“单线程”模型,因此,其操作天然就具有原子性。 Redis 支持两种持久化策略:RDB 和 AOF。 Redis 有多种高可用方案:主从复制模式、哨兵模式、集群模式。 Redis 支持很多丰富的特性,如:事务 、Lua 脚本、发...








