自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 mysql实战——xtrabackup问题

那启动失败的原因我认为是权限的问题,把数据文件目录权限全部设置为mysql.mysql,之后用mysql用户运行命令。后来发现上图这样是正常的,mysqld_safe后就出现pid和sock文件。我测试了很多遍,最开始我以为备份后的数据文件没有pid造成的,所以一直测试。备份恢复后启动不成功。

2024-05-23 17:36:40 78

原创 mysql实战——xtrabackup全量备份/增量备份及恢复

恢复的机器必须有my.cnf配置文件,再配置文件中配置好datadir目录即数据问目录,数据目录也必须为空,若不为空则会报错。可以看到第一次增量备份后新增的表空间被恢复了。可以看到inc4是第一次增量备份生成的文件。增量备份需要获取全量备份的to_lsn。如上图to_lsn=18374406。可以看到test2表空间。

2024-05-23 13:48:09 660

原创 mysql实战——XtraBackup二进制包安装

解压后会有6个目录,bin目录下均是二进制可执行文件。具体原因是因为没有配置环境变量,添加下面内容。2、安装xtrabackup。1、二进制包下载网站。

2024-05-22 17:11:13 223

原创 mysql实战——Mysql8.0高可用之双主+keepalived

1、 采用keepalived作为高可用方案时,两个节点最好都设置成BACKUP模式,避免因为意外情况下相互抢占导致两个节点内写入相同的数据而引发冲突;2、 把两个节点的auto_increment_increment(自增步长)和auto_increment_offset(字增起始值)设置成不同值,其目的是为了避免master节点意外宕机时,可能会有部分binlog未能及时复制到slave上被应用,从而会导致slave新写入数据的自增值和原master上冲突,因此一开始就错开;

2024-05-22 15:20:28 376

原创 mysql实战——mysql5.7升级到mysql8.0

楼主只改了for8.0下的配置,别的和mysql5.7相同,还改动了datadir路径和basedir路径。1、上传mysql8.0压缩包到/usr/local目录下。# 最后几个for8.0的参数要格外注意。3、前期配置修改完了,下面执行升级程序。# 修改mysql服务启动项配置。2、更改配置文件my.cnf。# 修改basedir目录。

2024-05-21 12:20:39 445

原创 mysql实战——mysql5.7保姆级安装教程

输出以上即初始化成功,记住最后一行的密码这是mysql生成的随机密码,等会登录需要。按下面内容粘贴复制,如果你的安装路径不同,就把basedir和datadir修改了。# 默认使用“mysql_native_password”插件认证。(1)运行以下命令,添加mysql软连接并重启mysql服务。# 设置mysql客户端连接服务端时默认使用的端口。# 设置mysql数据库的数据的存放目录。# 创建新表时将使用的默认存储引擎。# 设置mysql客户端默认字符集。# 设置mysql的安装目录。

2024-05-21 10:53:22 286

原创 mysql实战——半同步复制搭建

主库 192.168.1.78。从库 192.168.1.76。2、在异步的基础上搭建半同步复制。

2024-05-20 12:46:29 802

原创 mysql实战——异步复制(双主双从)

主库1 192.168.1.76主库2 192.168.1.78从库1 192.168.1.71从库2 192.168.1.72搭建前要确定好四台主机uuid号是否相同,请改成互不相同。

2024-05-20 11:52:55 806 1

原创 Got fatal error 1236 from master when reading data from binary log

主从复制报错error1234解决方法:主库运行flush logs;从库运行stop slave;两个进程启动成功。

2024-05-17 15:28:22 164

原创 mysql实战——异步复制(gtid复制)

报错原因:GTID_MODE=off,应该为on,配置文件没有重新启动发挥作用。之后我重启了下机器,让/etc/my.cnf文件配置成功。都是用的 caching_sha2_password这种。重启后发现io进程:connecting,还没开启成功。主库 192.168.1.76。从库 192.168.1.78。最后发现是因为现在的mysql8.0的。可以发现从库运行语句报错。解决方法:主从库依次运行。发现io进程没有开启。2、主库创建复制用户。

2024-05-17 15:22:54 328

原创 mysql实战——异步复制(一主多从)

主库 192.168.1.76从库1 192.168.1.77从库2 192.168.1.78。

2024-05-17 10:48:44 558

原创 MySQL实战——主从异步复制搭建(一主一从)

有可能你的备库的操作系统是主库备份过去的,所以uuid相同,这种情况只要改变其中一个库的uuid即可。可以在从库验证下创建的复制用户后是否有效以及主从库之间的网络是否流畅。主库和从库的my.cnf中的server-id设置的相同了,改正即可。主库 192.168.1.76。从库 192.168.1.77。若是相同,改变其中一个库的uuid。注意:改变之后一定要重启服务。至此主从异步复制搭建完成。(1)判断uuid是否相同。2、在主库创建复制用户。5、查看主从复制的状态。

2024-05-16 18:03:09 281

原创 mysql实战——基于二进制包安装mysql8.0保姆级教程

可以私信我要二进制包,免费分享。

2024-05-16 16:06:35 503

原创 SQL优化的步骤和方法

这几天看到群里高手发的sql优化的基本思路步骤:增加过滤条件,创建合适索引,简化复杂sql,减少io扫描。下面将对sql优化的步骤和方法进行介绍。

2024-03-08 09:24:31 938

原创 数据库用户管理

以mysql为例。对于数据库的DCL语句(用来管理系统中的对象权限时所使用的)。

2024-02-28 17:31:41 836

原创 undo日志详解

上一节详细的说了redo日志,redo日志的功能就是把增删改操作都记录着,如果断电导致内存中的脏页丢失,可以根据磁盘中的redo日志文件进行恢复。redo日志被设计出来是为了保证数据库的持久性,undo日志设计出来是为了保证数据库的原子性。一个事务开启之后,做增删改操作,会记录redo日志,但是如果后悔了进行回滚,redo日志是做不到回退的,这时候就需要undo日志了。总结:记住一句话,redo日志保证了数据库的持久性,undo日志保证了数据库的原子性。

2024-02-22 10:40:59 1209

原创 数据库事务id

事务可以分为只读事务和读写事务。~start transaction read only语句开启只读事务只读事务不可以对普通的表进行增删改,但是可以对临时表做增删改操作。~start transaction read write语句开启读写事务,或者使用begin、start transaction语句默认开启读写事务。

2024-02-21 09:41:26 445

原创 redo日志——log buffer与磁盘的交互详解

上面没有介绍怎么确定哪些redo日志可以被覆盖,log buffer刷盘机制有一个就是脏页刷入之前,先将redo日志刷入磁盘,这些就没有必要刷入了,但是伴随着别的机制所以磁盘中可能存在脏页还没有刷入的redo日志,这些是有用的,不能被覆盖,而恢复就是从这个点之后进行顺序恢复,注意这个点之后的redo日志对应的脏页可能被刷入磁盘了,这点我们不能确定,不确定就全刷,mysql也有机制判断是否被刷入。终点我们想当然的觉得终点很容易确定,就是最后的block,但是计算机怎么确定是最后的block呢?

2024-02-20 16:25:57 963

原创 redo日志详细介绍

前面介绍了buffer pool,我们知道内存中的脏页并不是产生就被立即刷入磁盘,而是达到某些条件才会刷入。那这就会导致一个问题,内存中还有脏页这时候断电,重启会导致内存丢失脏页,这样之前的操作就白做了,为了解决这个问题引入redo日志,目的就是记录所有操作,故障后通过redo日志进行恢复buffer pool中的脏页。对于悲观插⼊来说,由于需要新申请数据⻚,还需要改动⼀些系统⻚⾯,⽐⽅说要修改各种段、区的统计信息信息,各种链表的统计信息。总共需要记录的redo⽇志有⼆、三⼗条。

2024-02-19 15:13:45 1108

原创 buffer pool和查询缓存的区别

查询缓存和BufferPool完全是两个东西。查询缓存位于server层,BufferPool是Innodb数据引擎中的核心组件。

2024-01-23 17:41:00 554

原创 InnoDB的Buffer Pool

最近最少使用的原则去淘汰缓存页。当我们需要访问某个页的时候,LRU链表发生了这个情况:1)如果该页不在buffer pool,在把该页从磁盘加载到buffer pool中的缓存页时,就把该缓存页对应的控制块作为节点塞到LRU链表的头部。2)如果该页已经在buffer pool中,直接把控制块移动到头部。上面的两种情况反映出了两个问题:1)加载到buffer pool的页不一定被用到2)用的少的页面把热点页面挤掉。1)InnoDB想操作系统申请一段连续的内存空间作为缓存。

2024-01-22 22:26:56 978

原创 mysql优化器对sql语句的简化(条件简化、外连接消除、子查询优化)

大多数的sql语句由人工写完后都可以转换成某种比较高效的执行形式,称为查询重写。本质上就是mysql优化器觉得你写的sql语句不好,自己再重写一遍。那重写的规则是什么?

2024-01-17 16:32:53 1022

原创 Oracle11g RAC无法使用VIP或SCAN IP连接数据库的解决方案

安装完Oracle 11g rac后,在10g的客户端的 tnsnames.ora中配置好,scanip,但是无法访问,报错为目标主机不存在,折腾了很久,没弄明白,后面查到,系统初始化参数里有local_listener这一项,在这里可以对host的值加以修改,将scanip注册进来、在监听器中使用vip!因此只要把数据库实例参数local_listener内的host改为vip的IP地址即可。另外解决Oracle 11gR2 RAC 无法在客户端通过scanIP连接数据库。节点二上面也是,一样的修改。

2023-12-07 17:47:25 1749

原创 复杂sql分析 以及 索引合并

简单的sql语句我们很简单的就可以分析出来它的执行计划,但是复杂的sql呢。例如这条语句很难分析出来,遇到这样的语句怎么办呢,怎么分析它的范围匹配区间呢?首先我们在为某个索引确定范围区间的时候只需要把用不到相关索引的搜索条件替换成true。之所以把用不到索引的搜索条件替换为true,是因为我们呢不打算使用这些条件进行在该索引上进行过滤,所以不管索引的记录满不满足这些条件,我们都把他们选取出来,带到之后徽标的时候再使用他们过滤。

2023-12-05 18:09:20 1355

原创 navicat某些表为什么不按主键排序

可以发现不是全表扫描而是索引树扫描,由此得知了共性,不按主键顺序排序的表,肯定是在二级索引上就保存着全部数据信息,索引mysql在select *的时候直接就会扫描二级索引树,故此查出来的数据就会按照二级索引的顺序排序。图一二级索引就是name,图二的二级索引是name和age的联合索引。不知道大家注没注意过navicat的这种情况。我们来全表扫描看下他的执行计划。为什么不是按主键排序呢。

2023-12-03 17:59:38 556

原创 limit 10和limit 10000 10效率相同吗

先说结论:不相同,差异很大。对比Query_ID为57和64的语句发现执行时间limit 10比limit 10000,10效率高了10倍。什么原因呢?这就要从limit的底层原理开始讲起。请继续往下看。

2023-12-01 12:04:46 1520

原创 mysql语句性能分析工具——profiling

sql查询慢的情况很常见,对于慢sql的优化有三个步骤,又称优化三板斧。板斧一:查看执行计划explain板斧二:建立合适索引板斧三:使用合适的连接关系和过滤条件来实现sql语句的优化如果执行计划正确sql语句的性能还很慢,可以通过mysql的profiling工具进行定位分析。为了更精准的定位一条sql语句的性能问题,需要清楚的直到这条sql语句运行时消耗多少系统资源。

2023-11-30 17:30:13 1640

原创 一文彻底理解索引下推

索引下推的产生一定围绕着回表,没有回表那就没必要产生索引下推,因为上面也说了索引下推的目的就是减少回表,而不是避免回表。(题外话:避免回表使用索引覆盖——建立覆盖索引)因为%在前面所以不会走索引,当然如果不是select * ,会使用二级索引的index。二级索引取出的数据是依次回表还是一次回表?索引下推是为了什么发明的?extra=using index condition 发生了索引下推。注意:索引下推是为了减少回表而发明的。引入的一个特性,索引下推。MySQL5.6开始。

2023-11-29 18:18:08 1177

原创 MySQL 基于成本的优化

我们现在已经得到了聚簇索引占⽤的⻚⾯数量以及该表记录数的估计值,所以就可以计算全表扫描成本了,但是设计MySQL的⼤叔在真实计算成本时会进⾏⼀ 些微调,这些微调的值是直接硬编码到代码⾥的,由于没有注释,我也不知道这些微调值是个啥⼦意思,但是由于这些微调的值⼗分的⼩,并不影响我们分 析,所以我们也没有必要在这些微调值上纠结了。9693指的是统计数据中表的记录数,对于InnoDB存储引擎来说是⼀个估计值,0.2指的是访问⼀条记录所需的成本常数,后边的1.0是⼀个微调值,我们 不⽤在意。

2023-11-24 18:05:34 1484

原创 连接的原理(待修改)

此处假设使⽤t1作为驱动表,那么就 需要到t1表中找满⾜t1.m1 > 1的记录,因为表中的数据太少,我们也没在表上建⽴⼆级索引,所以此处查询t1表的访问⽅法就设定为all吧,也就是采⽤全 表扫描的⽅式执⾏单表查询。需要注意的是,这个ON⼦句是专⻔为外连接驱动表中的记录在被驱动表找不到匹配记录时应不应该把该记录加⼊结果集这个场景下提出的,所以如果把ON ⼦句放到内连接中,MySQL会把它和WHERE⼦句⼀样对待,也就是说:内连接中的WHERE⼦句和ON⼦句是等价的。

2023-11-23 17:56:39 58

原创 范围查询 range级别 继续优化思路

执行计划range级别继续优化

2023-11-22 17:53:38 658

原创 隐式转换导致索引失效的原因

所以,我们在写SQL时一定要养成良好的习惯,查询的字段是什么类型,等号右边的条件就写成对应的类型。比如'123abc'会转换为123,'012abc'会转换为012也就是12,'5.3a66b78c'会转换为5.3,其他同理。比如左面是字符型,右边是数值型,字符转换成数值,而字符容易产生歧义,比如'10000f'和'10000'转换成数值类型相同,这样除了会导致查询结果错误还会导致索引失效。隐式转换不一定都导致索引失效,比如左面是数值类型,右边的字符就会转换成数值类型,不会导致索引失效。

2023-11-19 22:41:23 310

原创 linux配置固定ip(两种方法)

4、第二步填写子网ip注意第三位的配置,那个就是你想固定的ip,如果选择DHCP,会自动为你配置ip(固定的),开机ip addr就会显示。BOOTPROTO="DHCP"修改为BOOTPROTO="static"记住这些信息(配置网关ip,不能设置最后以为为1,后面为1是主机ip)这样配置需要切换网络适配器,本来是nat,需要切换仅主机或者~模式。配置完点击确定,就可以开机ip addr,就会出现固定ip。首先刚下载的vm,刚创建的虚拟机,肯定是需要配置ip的。重启网卡,或者重启虚拟机就配置好固定ip。

2023-11-18 22:08:12 1363

原创 数据库的分库分表 详解

一个系统随着用户量上升,产生的数据也越来越多,到达一定程度,数据库就会产生瓶颈。首先单机数据库所能承载的连接数,io和吞吐量都是有限的,并发量上来数据库就渐渐顶不住了。如果单表的数据量过大,查询的性能也会下降,B+Tree层数可能增加,io次数增加,原理可以看我以前的文章。此时就不得不分库分表。

2023-11-17 17:48:58 830

原创 InnoDB的表空间

表空间是⼀个抽象的概念,对于系统表空间来说,对应着⽂件系统中⼀个或多个实际⽂件;对于每个独⽴表空间来说,对应着⽂件系 统中⼀个名为表名.ibd的实际⽂件。⼤家可以把表空间想象成被切分为许许多多个⻚的池⼦,当我们想为某个表插⼊⼀条记录的时候,就从池⼦中捞出⼀个对应的 ⻚来把数据写进去。页多种多样,在InnoDB中我们接触最多的就是索引页⻚⾯通⽤部分 我们前边说过数据⻚,也就是INDEX类型的⻚由7个部分组成,其中的两个部分是所有类型的⻚⾯都通⽤的。当然我不能寄希望于你把我说的话都记住,所以在这

2023-11-16 17:52:33 42

原创 mysql慢查询日志分析工具(pt-query-digest)

pt-summary。

2023-11-15 17:49:15 546

原创 mysql查询成本计算

myisam和innodb都需要将数据和索引存储到磁盘上,当进行查询时,就需要把数据或者索引页加载到内存中,从磁盘加载数据到内存这个过程,损耗的时间就叫io成本。1、rows:表示的是表中的 记录数,是个估值,但是计算成本时候,按照show table status like ’orders'显示的结果来进行计算。读取记录的时候,需要检查记录是否满足对应的搜索条件,对结果集进行排序等等操作发生的损耗为cpu成本。2、iex_expire_time:expire_time属于是范围查询,也可能用到索引。

2023-11-14 17:54:54 270

原创 order by与group by优化

order by优化的核心原则:尽量减少额外排序,使用索引的有序性,直接返回有序数据。

2023-11-13 18:06:52 447

原创 Linux新增磁盘分区挂载方法(一文搞定磁盘分区挂载)

添加一行信息:UUID=096a15e5-ee05-40f1-be4e-d5efed55d2a0 /fenqu ext4 defaults 0 0。blkid /dev/sdb1(查看分区对应的UUID)mkfs.ext4 /dev/sdb1(格式化)输入:n,p,1,enter,+512,wq。4、fdisk -l后可以看到磁盘已经分区。3、fdisk /dev/sdb(分区)fdisk /dev/sdb1(分区)可以看到/dev/sdb没有分区。

2023-11-12 18:28:34 99 1

原创 sql中exists和in的区别

在查询的时候,首先查询子查询的表,然后将内表和外表做一个笛卡尔积,然后按照条件进行筛选。,那么先执行子查询,所以我们会以驱动表的快速返回为目标,那么就会考虑到索引及结果集的关系 ,另外。的区别: 如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用。, 反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用。主要是造成了驱动顺序的改变(这是性能变化的关键),如果是。遍历循环外表,检查外表中的记录有没有和内表的的数据一致的。,那么以外层表为驱动表,先被访问,如果是。的遍历是在内存中遍历。

2023-11-11 18:28:27 166 1

空空如也

空空如也

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

TA关注的人

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