BUG指挥官
天下一亩三
展开
-
canal实现Mysql数据同步
阿里巴巴MySQL数据库binlog增量订阅与消费组件,基于数据库增量日志解析,提供增量数据订阅与消费,目前主要支持了MySQL。Canal开源地址:https://github.com/alibaba/canal。原创 2025-02-10 09:56:26 · 73 阅读 · 0 评论 -
浅谈分库分表的“读扩散”问题
mysql在单表数据过大时,查询性能会变差,因此当数据量变得巨大时,需要考虑水平分表。水平分表需要选定一个分片键,一般选择主键,然后根据id进行取模,或者根据id的范围进行分表。mysql水平分表后,对于非分片键字段的查询会有读扩散的问题,可以用普通索引列作分片键建一个新表,先查新表拿到id后再回到原表再查一次原表。这本质上是借鉴了倒排索引的思路。如果想要支持更多维度的查询,可以监听mysql的binlog,将数据写入到es,提供近实时的查询能力。当然,用tidb替换mysql也是个思路。原创 2024-09-02 16:46:21 · 293 阅读 · 0 评论 -
浅谈 Mybatis 动态 SQL
如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。Mybatis 借助功能强大 OGNL 表达式,可以根据参数条件,动态生成执行 SQL。使用动态 SQL 最常见情景是根据条件包含 where 子句的一部分。这条语句提供了可选的查询博客文章列表 ,如果不传入 “title”,那么所有处于 “ACTIVE” 状态的 博客都会返回。原创 2024-06-20 10:22:31 · 142 阅读 · 0 评论 -
MySQL表设计军规18条
另外,还有有个好处是,如果哪天有非订单的业务,比如:金融业务,也需要建一个名字叫做pay的表,可以取名:finance_pay,就能非常轻松的区分。举个例子,比如:做异步excel导出功能时,需要在异步任务表中加一个字段,保存用户通过前端页面选择的查询条件,每个用户的查询条件可能都不一样。数据库中,特别是做了分库分表的业务库中,主键最好由外部算法(比如:雪花算法)生成,它能够保证生成的id是全局唯一的。其实还有很多公共字段,在不同的表之间,可以使用全局统一的命名规则,定义成相同的名称,以便于大家好理解。原创 2024-04-02 11:15:39 · 237 阅读 · 0 评论 -
MySQL的21个SQL经验
NOT NULL列更节省空间」,NULL列需要一个额外字节作为判断是否为 NULL 的标志位。「NULL列需要注意空指针问题」,NULL列在计算和比较的时候,需要注意空指针问题。原创 2024-02-26 16:30:25 · 2056 阅读 · 1 评论 -
EXPLAIN分析回表查询问题
mysql索引有两种:主键索引,其实就是聚簇索引;主键索引之外,其他的都称之为非主键索引,非主键索引也被称为二级索引,或者叫作辅助索引。对于主键索引和非主键索引,使用的数据结构都是 B+Tree,唯一的区别在于叶子结点中存储的内容不同:主键索引的叶子结点存储的是一行完整的数据。非主键索引的叶子结点存储的则是主键值。当我们需要查询的时候:如果是通过主键索引来查询数据,例如 select * from user where id=100,那么此时只需要搜索主键索引的 B+Tree 就可以找到数据。原创 2023-07-14 10:25:18 · 783 阅读 · 0 评论 -
MYSQL中的14个查询技巧
但如果有大批量的数据需要插入,特别是是需要插入的数据来源于,另外一张表或者多张表的结果集中。如果已存在,则不插入数据,而直接返回结果。肯定不行,因为brand表的name字段创建了唯一索引,同时该表中已经有一条name等于xxx的数据了,执行之后直接报错了。但如果插入数据的请求,有一定的并发量,这种做法就可能会产生重复的数据。我们获取到该文件,然后执行相应的insert语句,就能创建相关的表,并且写入数据了,这就相当于。在我们的实际业务场景中,有些情况并发量不太高,为了保证数据的正确性,使用悲观锁也可以。原创 2023-06-09 17:06:55 · 429 阅读 · 0 评论 -
MySQL replace uuid REPLACE(UUID(), ‘-‘, ‘‘)重复问题,多种解决方案
1.之前使用的MySQL数据库版本为5.7.23-log,在批量插入数据时使用REPLACE(UUID(), '-', ''),不存在重复问题。2.后来数据库升级到5.7.36,同样的存储过程就不能使用了,原因就是REPLACE(UUID(), '-', '')重复。1.将REPLACE替换成MD5:生成32位字符串,符合主键要求,且不存在“-”3.同样的存储过程,在MySQL版本8以上可以正常运行,已不存在重复问题。2.使用REPLACE(@id:=UUID(), '-', '')原创 2023-06-09 15:52:45 · 2125 阅读 · 0 评论 -
MySQL批量插入不重复的UUID
有时候需要给表中已有数据填充一个字段为, 比如更新所有ID等。原创 2023-06-09 15:46:27 · 2113 阅读 · 0 评论 -
Nacos集群模式更新配置生成重复配置文件问题?(根源:mysql:唯一键约束失效)
至始至终没有出现“不进行唯一性检查”的字眼,写文档的人真是狡猾。但如果 DML 操作的数据如果不在 innodb buffer pool 中,则不会通过读取磁盘上的主键、唯一索引进行唯一检测,此时就和普通的二级索引一样,直接在 change buffer 完成数据写入,减少磁盘 IO。但如果 DML 操作的数据如果不在 innodb buffer pool 中,则不会通过读取磁盘上的主键、唯一索引进行唯一检测,此时就和普通的二级索引一样,直接在 change buffer 完成数据写入,减少磁盘 IO。原创 2023-03-29 14:59:07 · 825 阅读 · 0 评论 -
数据迁移工具
DataStage,即IBM WebSphere DataStage,是一套专门对多种操作数据源的数据抽取、转换和维护过程进行简化和自动化,并将其输入数据集市或数据仓库目标数据库的集成工具,可以从多个不同的业务系统中,从多个平台的数据源中抽取数据,完成转换和清洗,装载到各种系统里面。FineDataLink是国内做的比较好的ETL工具,FineDataLink是一站式的数据处理平台,具备高效的数据同步功能,可以实现实时数据传输、数据调度、数据治理等各类复杂组合场景的能力,提供数据汇聚、研发、治理等功能。原创 2023-03-24 14:13:37 · 1455 阅读 · 0 评论 -
MySQL唯一索引出现重复值
碰巧看到GreatSQL社群推送的这篇文章《》,给我们介绍了MySQL数据库中和重复值相关的一个场景,值得学习借鉴。MySQL5.7.38主从架构,主节点唯一索引上(唯一索引不是主键)有重复值,全部从节点报1062,SQL线程状态异常,根据SQL线程报的binlog位置点,insert数据时有重复值,插入失败。原创 2023-03-17 10:44:34 · 1131 阅读 · 0 评论 -
MySQL 默认隔离级别是RR,阿里等大厂却改成RC?
还有就是使用 RC 的时候,不能使用statement格式的 binlog,这种影响其实可以忽略不计了,因为MySQL是在5.1.5版本开始支持row的、在5.1.8版本中开始支持mixed,后面这两种可以代替 statement格式。但是直到有一天,我们线上发生了一次死锁的问题,我在排查的过程中,才发现我们的数据库用的隔离级别没有使用默认的 RR,而是修改成了Read Committed。数据库的锁,在不同的事务隔离级别下,是采用了不同的机制的。很多人问,要怎么做才能扛得住这么大的并发量。原创 2023-01-11 10:59:55 · 866 阅读 · 0 评论 -
MYSQL中的14个实用的功能
执行完之后,就会将order_2022121820表创建好,并且将order表中的数据自动插入到新创建的order_2022121820中。但如果有大批量的数据需要插入,特别是是需要插入的数据来源于,另外一张表或者多张表的结果集中。通常情况下,我们在插入数据之前,一般会先查询一下,该数据是否存在。如果已存在,则不插入数据,而直接返回结果。但如果插入数据的请求,有一定的并发量,这种做法就可能会产生重复的数据。我们获取到该文件,然后执行相应的insert语句,就能创建相关的表,并且写入数据了,这就相当于。原创 2023-01-06 16:24:40 · 847 阅读 · 0 评论 -
MySQL查询性能优化之索引潜水
但是,问题来了,当我们在where条件中,再加一个参数,变成了10个参数,预估扫描行数本应该增加,结果却大大减少了。当where语句in条件中参数个数大于等于这个值的时候,MySQL就采用另一种方式。where条件中有9个参数,重点关注一下执行计划中的预估扫描行数为279行。一般情况下,我们的where语句的in条件的参数不会太多,适合使用。之前的版本,这个值默认是10,之后的版本,这个值默认是200。实际是310行,预估扫描行数是30行,真是错到家了。到这里没什么问题,预估的非常准,实际就是279行。原创 2022-08-19 11:03:58 · 467 阅读 · 0 评论 -
Linux如何启动/停止/重启MySQL
一、启动方式1、使用 service 启动:service mysqld start2、使用 mysqld 脚本启动:/etc/inint.d/mysqld start3、使用 safe_mysqld 启动:safe_mysqld&二、停止1、使用 service 启动:service mysqld stop2、使用 mysqld 脚本启动:/etc/inint.d/mysqld stop3、 mysqladmin shutdown三、重启1、使用 se.原创 2022-03-29 10:44:53 · 5271 阅读 · 1 评论 -
MySQL索引原理,设计原则
????本篇速览早在MySQL基础篇,我们就听说了索引这么个东西,听起来是个很高级的东西,但当时只停留在了,索引能够加快查找的效率这一阶段的认知。这篇将从如下几点,来带你逐一攻破ta:索引到底是什么 索引底层的实现 聚簇索引是什么?二级索引呢? 最左前缀原则 如何设计索引,遵循的原则 索引相关语法建议通过侧边栏目录检索对您有帮助的部分,其中有emoji表情前缀属于重点部分,觉得对您有帮助的话,melo还会持续更进完善本篇文章和MySQL专栏。不过就怕等到我更新时,那会您不方便找到原创 2022-02-11 16:45:36 · 2639 阅读 · 0 评论 -
Mysql的性能优化
Mysql的性能优化1、参考书籍:MYSQL 5.5从零开始学 Mysql性能优化就算通过合理安排资源,调整系统参数使MYSQL运行更快,更节省资源。MYSQL性能优化包括查询速度优化,更新速度优化,mysql服务器优化等等。此处,介绍以下几个优化。包含,性能优化的介绍,查询优化,数据库结构优化,mysql服务器优化。 Mysql优化,一方面是找出系统的瓶颈,提高mysql数据库整体的性能,另外一个方面需要合理的结构设计和参数调整,以提高用户操作响应的速度。同时还要尽可能节省系统资源,以便系统可原创 2021-01-25 16:15:09 · 151 阅读 · 0 评论