自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 MySQL高级主从复制

延时从库延时从库即从库延迟一定的时间再对主库中新产生的数据进行同步。常规的主从复制,由于主库发生数据变动时,从库会很快对主库新产生的数据进行同步。例如:主库误删除一张表,从库为了同步数据,也会在从库中执行相应的操作。所以常规的主从复制只能很好的避免数据的物理损坏,但是无法避免数据库中的数据逻辑损坏主从复制的主要作用就是备份数据、恢复数据,所以就需要延时从库来尽可能地避免数据库中数据地逻辑损坏。延时从库的配置延时从库主要是通过 SQL线程 延时回放 relaylog 来实现的。主.

2021-03-31 14:32:48 208

转载 MySQL中新特性:MTS

一、MTS:多线程复制MTS简介在MySQL 5.6版本之前,Slave服务器上有两个线程I/O线程和SQL Thread线程。I/O线程负责接收二进制日志(Binary Log,更准确的说是二进制日志的event),SQL线程进行回放二进制日志。如果在MySQL 5.6版本开启并行复制功能,那么SQL线程就变为了coordinator(协调者)线程:coordinator线程主要负责以前两部分的内容:若判断可以并行执行,那么选择worker线程执行事务的二进制日志。若判断

2021-03-30 12:20:12 460

原创 MySQL基础的主从复制

概念什么是MySQL的主从复制MySQL主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL默认采用异步复制方式,这样从节点就不用一直访问主服务器来更新自己的数据。数据的更新可以在远程连接上进行,从节点可以复制主节点中的所有数据库或者特定的数据库,或者特定的表。为什么需要主从复制在业务复杂的系统中,有这个一个情景,有一句SQL语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务了。使用主从复制,让主库负责写,从库负责读,这样缓解主节点的压力,让业务正

2021-03-29 20:17:11 169 1

原创 MySQL的数据备份与恢复

概要MySQL中备份数据的工具有mysqldump (MDP) percona Xtrabackup (XBK) MySQL Enterprise Backup (MEB) mysqlbinlog其中MEB是MySQL官方的备份工具,是收费的。由于本身条件有限,没有使用过这款工具,故在这里就不做讲解。备份方式逻辑备份全量备份:使用 mysqldump 可以实现数据的全量备份,但是无法实现增量备份增量备份:依赖 binlog 可以实现增量备份 Tip:使用 bin..

2021-03-28 20:51:00 619

原创 MySQL中日志文件说明

错误日志错误日志(Error log)是MySQL中最常用的一种日志,主要记录MySQL服务启动和停止过程中的信息、服务在运行过程中发生的故障和情况等。在实际工作中,我们通过错误日志分析得到导致业务崩溃和其它故障的根本原因。查看错误日志的位置db01 [(none)]>select @@log_error;+---------------------+| @@log_error |+---------------------+| /tmp/mysqld3306.err |

2021-03-26 21:26:10 1072

原创 InnoDB存储引擎的核心参数

"双一"标准innodb_flush_log_at_commit参数innodb_flush_log_at_commit参数的作用是控制从 log buffer(如redo buffer、undo buffer) 往磁盘刷写数据的粗略。innodb_flush_log_at_commit参数有三个状态:为0时:log buffer 中的数据是按照每秒写入到 OS(操作系统缓存)中,然后再每秒刷新一次数据到磁盘中。每次事务的提交不会有任何影响,也就是此状态下 log buffer 的刷新操作和事务提交

2021-03-24 11:14:02 313

原创 InnoDB存储引擎核心特性:MVCC

MVCC概念多版本并发控制(Multiversion Concurrency Control)指的是一种提高并发性能的技术。最早的数据库系统,只有读读之间可以并发,读写、写读、写写都要被阻塞。引入MVCC之后,只有写写之间相互阻塞,其它三种操作都可以并行,这样就大幅提高InnoDB存储引擎的并发性能。在内部实现中,InnoDB存储引擎通过undo log保存每条数据的多个版本,并且能够找回数据历史版本提供给用户读,每个事务读到的数据版本可能是不一样的。在同一个事务中,用户只能看到该事务创建快照之前已经提

2021-03-23 09:46:11 312

原创 InnoDB存储引擎锁监控及处理

前言InnoDB存储引擎由于实现了行级锁定,虽然在锁定机制的实现方面所带来的性能损耗可能比表级锁定会要更高一些,但是在整体并发处理能力方面要远远由于MyISAM存储引擎的表级锁定。当系统的并发量较高的时候,InnoDB存储引擎的整体性能和MyISAM存储引擎相比就会有比较明显的优势了。但是,InnoDB存储引擎的行级锁定同样也有脆弱的一面,当我们使用不当的时候,可能会让InnoDB存储引擎的整体性能表现得不仅不能比MyISAM存储引擎高,甚至可能会更差。查看行级锁争用情况如果发现MySQL运行比较卡顿

2021-03-21 15:13:39 184

原创 InnoDB中锁的问题

首先,我们要明确的一个大前提是:MySQL中的锁是由具体的存储引擎实现的。所以像MyISAM存储引擎和InnoDB存储引擎的锁实现机制是有区别的。(MyISAM存储引擎只支持表级锁,InooDB存储引擎能够支持到行级锁)但是今天先放下MyISAM存储引擎不谈,主要来说说InnoDB存储引擎的行级。InnoDB存储引擎支持多粒度锁(multiple granularity locking),它允许行级锁与表级锁共存。行级锁(记录锁)优缺点优点:由于锁粒度小,争用率低,从而可以提高MySQL的并发新能

2021-03-21 14:22:02 552

原创 MySQL中“for update“、“lock in share mode“解析

前言共享锁又称为读锁,简称S锁,顾名思义,共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能改。排它锁又称为写锁,简称X锁,顾名思义,排它锁就是不能与其它锁并存,如一个事务获取了一个数据行的排它锁,其它事务就不能再获得该行的其它锁,包括共享锁和排它锁,但是获取此数据行排它锁的事务可以对数据进行读取和修改。其中:排它锁(X):select xxx from xxx where xxx for update;共享锁(S):select xxx from xxx where x

2021-03-18 19:46:13 1810

原创 InnoDB的核心特性:事务

事务的定义事务:一个最小的不可再分的工作单元;通常一个事务对应一个完整的业务一个事务由一个或多个DML语句共同组成事务只和DML语句有关,或者说DML语句才有事务tip:事务是MySQL等关系型数据库区别于NoSQL非关系型数据库的重要方面,是保证数据一致性的重要手段事务的ACID特性Atomicity:原子性Consistency:一致性Isolation:隔离性Durability:持久性...

2021-03-17 19:32:05 344

转载 使用fsck命令检查文件系统错误

FSCK 是一个很重要的 Linux/Unix 工具,它用于检测并修复文件系统中的错误。它类似于 Windows 操作系统中的 “chkdsk” 工具,但它是为 Linux、MacOS、FreeBSD 操作系统所准备的,FSCK 全称为 File System Consistency Check。在大多数时候,它在系统启动时运行,但是如果需要的话,它也能被超级用户手工启动。它可以进行三种模式的操作:查错并在发现错误时由用户决定如何处理查错并自动修复查错但在发现错误时只显示错误而不进行修复FSC

2021-03-15 19:47:29 2455

原创 MySQL的表空间问题

前言我们知道MySQL数据库中的数据信息是独立存储的,比如我在安装MySQL数据库时指定"/data/mysql/data"目录作为存储MySQL数据库数据信息的目录。通过添加一块新的磁盘A,然后将磁盘A挂载在"/data/mysql/data"目录下,这样MySQL数据库产生的所用数据都会保存在此磁盘中,从而方便数据的管理和迁移,但是扩容却很麻烦。因为随着数据越来越多,磁盘的空间就会被沾满,这样数据库也就无法再运行了;由于Linux中一个目录下只能挂载一块磁盘,若是磁盘没有分区,那么一块磁盘也只能挂

2021-03-15 19:19:41 283

原创 MySQL中的碎片整理

前言关于MySQL中表碎片化(Table Fragmentation)产生的原因,MySQL的Engine不同,碎片化的原因可能也有所差别。这里没有深入理解、分析这些差别,此文仅以InnoDB引擎为主。若是有不足的地方,那我也没办法。InnoDB的"页合并"和"页分裂"我使用的是MySQL 5.7 版本,数据存储目录使用的是"/data/mysql/data";为了不让你们发现不足,我从InnoDB存储引擎的存储数据的结构讲起。我们知道,假如在MySQL数据库中建立一个world数据库,然后再在w

2021-03-12 21:01:14 1291

原创 MySQL执行计划中key_len计算规则

今天来说一下MySQL执行计划中key_len的计算,当用explain查看SQL的执行计划时,执行计划中会显示出key_len的值,根据这个值可以判断联合索引的覆盖长度,从而在可以获知SQL语句走了联合索引中的哪些索引。(覆盖长度一般情况是越长越好)影响索引长度因素:(索引列为字符串类型的情况)key_len的计算公式:varchar():表字符集长度*列长度+2(变长)+1(null) 若是列被定义为"not null",则不需要加1char():表字符集长度*列长度+1(null) 若是列

2021-03-09 20:42:01 1065 2

原创 MySQL索引失效的原理是什么?

今天我们讲讲MySQL索引为什么会失效,很多文章和培训机构的教程,都只会告诉你,在什么情况下索引会失效。在讲之前,还是先把一些什么情况下索引会失效的结论罗列一下,然后大家结合我讲的原理再来体会一下,就会发现那些结论没必要记。没有查询条件,或者查询条件没有建立索引(相当于废话)表的数据量比较大,且查询结果集是原表中的大部分数据,应该是25%以上,这时走不走索引效率都很低。所以这种情况数据库系统不会走索引索引本身失效,统计数据不真实查询条件使用函数在索引列上,或者对索引列进行运算,运算包括(+,-,

2021-03-09 14:47:24 1769 4

原创 MySQL执行计划详解

前言在实际数据库项目开发中,由于我们不知道实际查询时数据库里发生了什么,也不知道数据库是如何扫描表、如何使用索引的。因此,我们能够感知到的就只有SQL语句执行的时间,尤其在数据规模比较大的场景下,如何写查询、优化查询、如何使用索引就显得很重要了。那么,问题来了,如何在查询前估计下查询要扫面多少行、使用哪些索引呢?以MySQL为例,MySQL是通过explain命令(desc命令也可以)来输出一条语句的执行计划,对要执行的查询进行分析。什么是执行计划呢?简单的说,就是SQL在数据库中执行时的表现情况

2021-03-08 20:30:40 198 1

原创 MySQL的索引

一、MySQL索引什么是索引?为什么要建立索引?索引类似一本书的目录,用于快速找出在某个列中含有特定值的行,起到优化查询的作用。若是使用索引,MySQL必须从第一条记录开始读完整个表,知道找出相关的行,表越大,查询数据所花费的时间就越多。如果表中所查询的列建立了索引,那么MySQL就能够快速到达一个位置就搜索数据文件,而不必查看所有数据,这样就会极大的提高查询的速度,且表越大效果越明显。索引的优缺点索引只是提高效率的一个因素,如果MySQL有大量数据的表,就需要花时间研究建立最优秀的索引,或

2021-03-07 16:59:59 671

原创 MySQL中试图的应用

什么是试图:通俗的讲,试图就是一条select语句执行后返回的结果集。所以我们在创建试图的时候,主要工作就落在创建这条SQL查询语句上。试图的特性:试图是对若干张基本表的引用,是一张虚拟的逻辑表,由查询语句执行的结果构成试图不存储具体的数据(基本表数据发生了改变,试图也会跟着改变)试图可以跟基本表一样,进行增删改查操作,但是增删改查操作是由限制的试图的作用:方便操作,特别是查询操作,减少复杂的SQL语句,增强可读性;更加安全,数据库授权命令不能限定到特定行和特定列,但是通过合理创建试图

2021-03-06 10:51:34 632

原创 使用group by报错sql_mode=only_full_group_by

db01 [world]>select countrycode,population from city group by countrycode limit 10;ERROR 1055 (42000): Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column'world.city.Population' which is not functionally dependent

2021-03-05 20:07:13 383

原创 MySQL的体系结构与管理

1.mysqld进程运行原理mysqld进程是MySQL服务的主进程,负责处理MySQL数据库的文件1.1通过一张图来详细了解一下mysqld的程序结构tips:(1)mysql> show processlist; 执行此语句后会显示所有的已经和本数据库建立的会话,每一个会话就是一个连接线程;其中yigemysql数据库实例最大允许会话数是可以通过参数设置的,默认是151个。...

2021-03-05 16:02:00 186 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除