- 博客(20)
- 收藏
- 关注
原创 MySQL-binlog2sql闪回工具介绍与回滚实战
binlog2sql是一个MySQL binlog解析工具,通过不同的选项,可以得到原始sql、回滚sql和去除主键的插入sql。快速回滚主从切换后新master丢数据的修复使用要求:开启binlog、binlog记录格式设置为row[mysqld]#记录修改的每一行#记录完整的列信息 update记录更新前后所有字段的值 delete会记录删除前所有字段的值 insert会记录插入后所有字段的值。
2025-02-08 08:50:28
719
原创 MySQL客户端与服务端建立连接抓包分析
mysql采用的是挑战-响应方式来进行身份认证。由服务端生成加密用的盐给客户端,提高安全性名称类型长度描述Protocolint1个字节协议的版本号Versionstring不确定mysql的版本Thread IDint4个字节建立连接所分配的idSaltstring20个字节 8+12挑战字符串,相当于用于加密密码的盐,分为两部分,长度分别为8字节和12字节int2个字节服务器支持的功能,int为32位,1支持,0不支持,最多支持32种功能。
2024-06-20 10:14:03
1203
原创 MySQL大表删除方案
这是我亲身经历的一个教训,在下午5点多下班的时候去删除一个与业务无关的表,20多T,结果还是导致数据库阻塞了,后面的事务全都在等待,事务一直堆积导致数据库挂了。借助linux硬链接的机制,为表的数据文件创建一个硬链接,这样执行drop操作时,删除的就不是真实的数据文件,而是一个指针,能够极大的提高drop速度,降低影响其他事务执行的风险。第一点,因为buffer pool中存在最近修改的数据(称为脏页)还未刷新到磁盘中,如果需要删除表,那么则需要把这些脏页丢弃(都删除表了,那数据自然也不需要了)。
2024-05-22 16:53:18
749
3
原创 记录一次在springboot的yml中读取maven配置项的坑
通过添加一个初始化器,在spring启动的过程中打印出环境信息。(具体springboot启动的细节可以参考黑马满一航老师的spring高级视频,b站上有,讲的很好。,怎么出现了一个https://spring.io/projects/spring-boot/springboot-liquibase这个不存在的链接?根据我的一个猜测,应该是Spring环境中默认内置了一个名为url的参数,值为。注意上面的密码是使用单引号括起来的,因为密码包含#号,会被yml当作注释。我的url明明写的不是这个东西啊。
2024-05-17 13:39:52
582
原创 Linux硬盘挂载操作记录
文件系统就是将硬盘抽象为文件和文件夹的形式来管理数据,我们只需要创建文件和文件夹来使用存储空间,而不需要具体是怎么使用硬盘的。:添加硬盘或分区后,需要将其挂载到某个具体的目录下,这样这个目录下的文件数据就会被写入硬盘,硬盘才真正生效。拓展分区和逻辑分区是父子关系,拓展分区下包含多个逻辑分区,拓展分区不能挂载,逻辑分区可用于挂载。sdc中创建了两个分区sdc1和sdc2,每个分区占3G,还剩4G,可用于创建更多的分区。对于新添加的盘,可直接挂载到指定目录下,也可划分为多个分区挂载到不同目录下。
2024-04-29 15:27:12
696
2
原创 JDBC查询大数据时怎么防止内存溢出-流式查询
在使用 JDBC 查询大数据时,由于 JDBC 默认将整个结果集加载到内存中,当查询结果集过大时,很容易导致 JVM 内存溢出的问题。解决办法通常是使用分页查询,但是分页查询越往后要遍历的行数越多,效率越低。除非能够添加索引条件,但这又提高了业务逻辑的复杂度。JDBC的流式查询就是在使用ResultSet对象获取查询结果集的时候,不是把结果集一次性全部加载到内存中,而是分批次读取数据。在jdbc客户端和mysql服务端建立tcp连接后,mysql以包的形式返回数据。
2024-04-26 12:33:23
3299
3
原创 MySQL分布式事务xa的介绍与使用
xa指的是分布式事务,传统的事务针对的是单机MySQL。在如今大数据时代下,往往需要多台MySQL组成一个集群存储数据。这种情况下,针对所有MySQL节点操作就无法保证所有MySQL的事务一致性,即只要一台MySQL上执行的事务回滚了,那么其他所有MySQL也要回滚。
2024-04-24 10:55:12
2600
2
原创 MySQL存储过程的基本用法
注:每次自己进行小测试时,需要往mysql中插入几十上百万的模拟数据,老是忘了存储过程、while循环怎么写,于是借助博客记录一下。虽然可以使用jdbc或者其他工具来批量插入,但架不住存储过程最直接、方便。”作为语句的分隔符,存储过程包含多个sql语句,所以会被解析为多个sql依次执行。因此必须改变分隔符,将创建存储过程的多个sql视作一个整体。DELIMITER:用于改变语句的分隔符。默认情况下,mysql会以分号“OUT:返回结果,后跟参数名、类型。IN:入参,后跟参数名、类型。
2024-04-23 15:21:00
565
1
原创 MySQL多版本并发控制mvcc原理浅析
mvcc(Multi Version Concurrency Control),多版本并发控制,是一种数据库的并发控制机制。它用于管理事务并发执行时对数据的访问和修改,保证在多个事务同时对数据库进行读写操作,不会出现数据不一致或丢失的情况。
2024-04-19 09:36:05
2221
2
原创 MySQL函数now和sysdate使用时的注意事项
mysql提供的函数now和sysdate都是用来获取当前的日期和时间。不同的是,now会在sql开始执行时就固定下来,而sysdate会在执行过程中计算。简单说,now是静态的,sysdate是动态的。
2024-04-18 15:26:12
500
原创 MySQL关于binlog简介
binlog是mysql server层维护的一种二进制日志,其记录了对mysql的更新操作信息,并以事件的形式保存在磁盘中mysqlbinlog是mysql提供的专门处理binlog文件的工具,利用它可以查看binlog,通过指定条件进行恢复等操作。
2024-04-16 16:15:10
985
原创 MySQL关于事务acid特性的简单介绍
原子性是指一个事务是不可分割的最小单位,其中的操作要么都成功,要么都失败;如果事务中的一个sql执行失败,则已执行成功的sql必须回滚,数据库退回到事务执行前的状态持久性是指事务一旦提交,它对数据库的改变就应该是永久的。接下来的操作或故障不会导致数据丢失或其他异常。隔离性是指事务内部的操作与其他事务是隔离的,并发执行的各个事务之间不能互相干扰。严格的隔离性,对应了事务隔离级别中的,但实际应用中出于性能考虑基本不会使用该级别写对写的影响:锁写对读的影响:多版本并发控制(mvcc)
2024-04-15 16:21:01
1081
1
原创 MySQL索引与b+树浅析
索引是为了加速对表中的数据检索而创建的一种数据结构(比如二叉搜索树)。索引一般以文件的形式存储在磁盘上,所以使用时需要进行磁盘IO。
2024-04-14 12:12:13
933
3
原创 mydumper与myloader使用介绍
mydumper与myloader是github上的一个开源工具,用于mysql数据库的备份与恢复。相比于mysql自带的备份与恢复工具,mydumper和myloader的优势在于使用的是多线程进行备份与恢复,所以它的效率更高。mydumper:对指定的库表进行备份myloader:利用mydumper备份的文件进行恢复。
2024-04-13 16:37:58
1313
1
原创 MySQL可重复读隔离级别下开启事务的一个注意事项
在日常我们操作mysql时,mysql默认是自动提交的。当我们需要开启一个事务时,可以使用或begin命令,再使用commit或rollback提交或回滚事务。但事务的使用也有一些注意事项,不注意的话,可能会带来意料之外的结果。今天,我要分享的就是在(简称rr)隔离级别下,mysql的快照生成时机的问题。
2024-04-12 09:36:39
749
2
原创 MySQL主从同步及gtid简介
on或off,在从库宕机且relaylog损坏情况下,主库日志已经传到了从库,从库还没来得及应用,开启该配置项,从库会自动放弃未执行的relaylog,并生成一个新的relaylog,将从库的io线程的position重新指向新的relaylog,并将sql线程的position退回到与io线程一致,重新开始同步,这样事务不会丢失。Master_Server_Id、Master_UUID、Master_Info_File:主库的server_id,uuid,从库保存主库相关内容的目录。
2024-04-11 09:44:26
1515
1
原创 springboot在spring之上做了哪些事情—自动配置
我个人认为,springboot相比spring最大的特点就是自动配置(autoconfigure)
2024-04-10 14:00:42
400
1
原创 spring与springboot原理浅析
以下事件都是继承了SpringApplicationEvent抽象类的与spring应用程序相关的事件,在spring程序启动中,实际上还会涉及到与web、servlet相关的事件。在执行某些初始化操作时,如果这些操作依赖于注入的bean,那么就无法在构造方法中实现,因此,可以使用@PostConstruct注解来进行初始化操作。这两个接口用于在spring程序启动后执行一些特定的代码,如将数据缓存到redis中,当有多个这两个接口的实现类,可以通过@Order指定执行顺序。讲的很有深度,推荐大家学习。
2024-04-10 10:48:44
786
1
原创 MySQL主从一致性校验工具pt-table-checksum简单介绍
pt-table-checksum是percona toolkit工具中的一个命令,用于在线比较Mysql主从数据一致性。写入一个表中,通过主从复制,在从库上也执行同样的操作,再对比主从库上的校验和信息,判断主从是否一致。将一张大表分为多个块,默认第一个块是1000条数据,后面的块大小会根据机器性能浮动。使用replica into而不是insert into避免了主键冲突问题。–no-check-binlog-format 不校验binlog格式。针对每个块计算校验和,将结果通过。
2024-04-09 16:49:11
1123
5
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人