数据库
文章平均质量分 75
HD243608836
这个作者很懒,什么都没留下…
展开
-
MySQL的SQL语句的执行顺序
一张图即可完美描述:转载 2023-02-23 16:57:48 · 126 阅读 · 0 评论 -
MySQL InnoDB Cluster(MGR)配置相关问题——configureInstance与configureLocalInstance区别
根据 MySQL Shell 连接到实例的方式以及实例上安装的 MySQL 服务器的版本,这些配置更改可以自动持久化到实例。当针对 MySQL Shell 当前运行的 MySQL 实例(即本地实例)发出 AdminAPI 命令时,MySQL Shell 会将配置更改直接保存到该实例。在支持自动持久化配置更改的本地实例上,当针对远程实例运行时,换句话说,不是当前运行 MySQL Shell 的实例,如果实例支持自动持久化配置更改,则 AdminAPI 命令将配置更改持久化到实例的选项文件中。翻译 2023-02-21 19:32:52 · 436 阅读 · 0 评论 -
一文搞懂MySQL的MVCC原理及如何解决幻读(事务隔离级别)
在之前的文章中详细的介绍了MySQL 中的事务和隔离级别,在并发访问数据库造成的问题(脏读、不可重复读、幻读),而 MVCC 就是在尽量减少锁使用的情况下高效避免这些问题。隔离级别脏读不可重复读幻读READ UNCOMMITTED:未提交读可能发生可能发生可能发生READ COMMITTED:已提交读解决可能发生可能发生REPEATABLE READ:可重复读解决解决可能发生SERIALIZABLE:可串行化解决解决解决。转载 2023-02-21 16:51:09 · 1393 阅读 · 0 评论 -
写缓冲(change buffer)——这次彻底懂了
上篇《缓冲池(buffer pool),彻底懂了!》介绍了InnoDB缓冲池的工作原理。一、简单回顾一下:(1)MySQL数据存储包含内存与磁盘两个部分;(2)内存缓冲池(buffer pool)以页(page)为单位,缓存最热的数据页(data page)与索引页(index page);(3)InnoDB以变种LRU算法管理缓冲池,并能够解决“预读失效”与“缓冲池污染”的问题;画外音:细节详见《缓冲池(buffer pool),彻底懂了!》。毫无疑问,对于读请求.转载 2022-05-26 15:25:14 · 376 阅读 · 0 评论 -
MySQL Innodb Redo Log两阶段提交 和 BinLog之间的调用执行顺序
一、RedoLog和Binlog区别1. redo log 是 InnoDB 引擎特有的; binlog 是 MySQL 的 Server 层实现的,所有引擎都可以使用。2. redo log 是逻辑物理日志,页面内的操作记录的是逻辑日志,页间的操作记录的是物理日志; binlog 是逻辑日志,相当于是Mysql server层的日志,适用于所有引擎,且可以通过参数控制写入。3. redo log 是循环写的,空间固定会用完; binlog 是可以追加写入的。“追加写”是指 ...转载 2022-04-23 12:12:35 · 588 阅读 · 0 评论 -
必须了解的mysql三大日志-binlog、redo log和undo log
日志是mysql数据库的重要组成部分,记录着数据库运行期间各种状态信息。mysql日志主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。作为开发,我们重点需要关注的是二进制日志(binlog)和事务日志(包括redo log和undo log),本文接下来会详细介绍这三种日志。binlogbinlog用于记录数据库执行的写入性操作(不包括查询)信息,以二进制的形式保存在磁盘中。binlog是mysql的逻辑日志,并且由Server层进行记录,使用任何存储引擎的mysql数据库都会记转载 2022-04-23 10:39:55 · 210 阅读 · 0 评论 -
mysql数据库redo/undo log、binlog 的详解及其区别
一、redo log 和 undo logredo log 是重做日志,提供 前滚 操作;undo log 是回退日志,提供 回滚 操作。只用 undo log 实现原子性和持久性的缺陷:事务提交前需要将 Undo Log 写磁盘(提供可回滚功能,保证原子性),这会造成多次磁盘 IO(不考虑各种优化例如 SQL 解析优化等),这些 IO 算是顺序 IO; 事务提交后需要将数据立即更新到数据库中,这又会造成至少一次磁盘 IO,这是一次随机 IO。如何优化?事务提交后如果能够将数据缓存一段转载 2022-03-10 17:38:09 · 771 阅读 · 0 评论 -
MySQL千万级数据库数据插入insert速度加速调优
问题描述:普通台式机,采集数据,表中已经有>1000万数据量。采集回来的数据插入表中的时候很慢,每条约100毫秒。解决方法:1、加大mysql配置中的bulk_insert_buffer_size,这个参数默认为8Mbulk_insert_buffer_size=100M2、改写所有insert into语句为insert delayed into这个insert delayed不同之处在于:立即返回结果,后台进行处理插入。3、还有一个技巧是在一条insert中插转载 2021-12-02 12:35:34 · 15385 阅读 · 0 评论 -
linux(centos7)中mysql5.7开启binlog及日志内容查看(必须配置server-id)
一、如何开启5.7版本,直接在配置文件中指定:[mysqld]log-bin=mysql-binserver-id=1binlog_format=ROW二、坑接下来是两年前写这篇博客时候的踩坑记录,不感兴趣的,可以直接跳过该部分,直接跳到第二章:开启MySQL的binlog日志_happyfly的博客-CSDN博客_mysql开启binlog按照上面的步骤(这个教程应该是近期作者更新过了,下面踩的坑已经被修复了)操作,结果启动失败。然后查看我这边的配置文件:[转载 2021-11-30 16:05:11 · 4279 阅读 · 0 评论 -
【转载】一键生成数据库文档,堪称数据库界的Swagger,有点厉害
本文收录在个人博客:www.chengxy-nds.top,技术资料共享,同进步最近部门订单业务调整,收拢其他业务线的下单入口,做个统一大订单平台。需要梳理各业务线的数据表,但每个业务线库都有近百张和订单相关的表,挨个表一个一个字段的弄脑瓜子嗡嗡的。为了不重复 CV 操作,抱着一丝希望开始在GitHub里找,看看有没有什么工具可以用,结果就真的发现了宝藏,screw(螺丝钉),居然可以生成数据库文档,优秀啊~。数据库文档图一、数据库支持MySQL MariaDB TIDB .转载 2021-07-29 17:52:29 · 206 阅读 · 0 评论 -
MySQL commit一个dml,先写redolog 还是先记binlog顺序(这个图很好!好文章!)
mysql commit一个dml,在开启了binlog的情况下,为了保证binlog跟redo log 数据的一致性,mysql引入了两阶段提交。在事务commit的时候,会在两阶段提交的commit阶段,先将整个事务写入redolog,此时redolog还没有commit的标识。然后会将事务写入binlog,binlog commit成功之后,才会将commit标识写入redo log,并且告诉引擎层进行事务的提交。以上的图片中可以看到,事务的提交主要分为两个主要步骤:1. 准备阶段(Sto转载 2021-06-25 18:37:00 · 1221 阅读 · 0 评论 -
MySQL5.7半同步复制AFTER SYNC&AFTER COMMIT(好文章,原理讲解很透彻!)
今天主要剖析一下MySQL 5.7增强半同步的AFTER SYNC和AFTER COMMIT的区别。如果我们生产库对数据的一致性要求比较高,那么我们一般会开启了半同步复制,但在MySQL5.5/5.6里,会存在数据不一致的风险。比如有如下场景,客户端提交了一个事务,master把binlog发送给slave,在发送的期间,网络出现波动,此时Binlog Dump线程发送就会卡住,要等待slave把binlog写到本地的relay-log里,然后给master一个反馈,等待的时间以rpl_semi_...转载 2021-06-25 18:32:28 · 2434 阅读 · 1 评论 -
MySQL半同步复制(文章讲解很透彻!)
从MySQL5.5开始,MySQL以插件的形式支持半同步复制。如何理解半同步呢?首先我们来看看异步,全同步的概念一、三种同步异步复制(Asynchronous replication)MySQL默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主如果crash掉了,此时主上已经提交的事务可能并没有传到从上,如果此时,强行将从提升为主,可能导致新主上的数据不完整。全同步复制(Fully synchronous转载 2021-06-25 16:59:56 · 4658 阅读 · 2 评论 -
简单谈谈MySQL的半同步复制
从MySQL5.5开始,MySQL以插件的形式支持半同步复制。如何理解半同步呢?今天我们就来详细讲解下,希望大家能够喜欢。简介MySQL通过复制(Replication)实现存储系统的高可用。目前,MySQL支持的复制方式有:异步复制(Asynchronous Replication):原理最简单,性能最好。但是主备之间数据不一致的概率很大。 半同步复制(Semi-synchronous Replication):相比异步复制,半同步复制牺牲了一定的性能,提升了主备之间数据的一致性(有一些情况转载 2021-06-25 16:59:07 · 365 阅读 · 0 评论 -
mysql主从(半同步及增强半同步区别) (简单明了,好文章!)
半同步复制特点MySQL5.5开始推出半同步复制 半同步复制:至少有一个Slave节点收到binlog后再返回(IO线程接收到即可) 特点: 1.减少数据丢失风险 2.不能完全避免数据丢失 3.超时后,切换回异步复制(配置半同步复制需要先配置异步复制) 主从原理解析:5.6与5.7主从区别主要是主库的事务提交的时机不同,从而对主库性能影响不同。 1.mysql5.6主从原理解析: 参数:AFTER_COMMIT(5.6默.转载 2021-06-25 14:54:19 · 2541 阅读 · 0 评论 -
外键(简单清晰!好文章!)
当我们用主键唯一标识记录时,我们就可以在students表中确定任意一个学生的记录:students:id name other columns... 1 小明 ... 2 小红 ... 我们还可以在classes表中确定任意一个班级记录:classes:id name other columns... 1 一班 ... 2 二班 ... 但是我们如何确定students表的一条记录,例如,id=转载 2021-04-25 11:07:13 · 236 阅读 · 0 评论 -
mysql的timestamp(时间戳)详解以及2038问题的解决方案(好文章!!)
时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。生产环境中部署着各种版本的MySQL,包括MySQL 5.5/5.6/5.7三个大版本和N个小版本,由于MySQL在向上兼容性较差,导致相同SQL在不同版本上表现各异,下面从几个方面来详细介绍时间戳数据类型。时间戳数据存取在MySQL上述三个大版本中,默认时间戳(Timestamp)类型的取值范围为’1970-01-01 00:00:01’ UTC 至’2038-0转载 2021-03-22 15:21:27 · 5095 阅读 · 0 评论 -
Spring Data JPA OneToMany级联,多方删除修改新增详解(好文章!!申精!!)
前言近期的项目中使用Spring Data JPA。JPA带来很大的便捷,但它内部映射关系及持久化机制如果理解不到位会出现很多问题。不同的配置将会产生不同的执行过程。如果不了解其运行机制,很容易在一个问题上摸索很久,找不到答案。近期碰到一个问题,在一对多关系中,先进行了一方的查询,然后找到需要删除多方数据,做删除操作。看似简单的删除,但JPA在不同的onToMany配置下,却呈现出不同的执行结果。正好借此机会做了oneToMany不同配置的实验,在此做个记录。也希望通过实验,找到不同场景下最佳的配置方式转载 2021-03-17 17:29:08 · 1902 阅读 · 0 评论 -
MySQL添加外键约束foreign key语法(好文章!!)
sql语句格式:·添加外键约束(外键是在从表上添加,而不是主表!!):# altertable从表addconstraint外键名(形如:FK_从表_主表)foreignkey(从表外键字段)references主表(主键字段);ALTER TABLE orders ADD CONSTRAINT fk_users_ordersFOREIGN KEY(uid) REFERENCES users(uid)或者创建时:# CREATE TABLE [从表](CRE...转载 2021-03-17 16:56:35 · 1650 阅读 · 0 评论 -
Spring连接Mysql时遇到的TimeZone的问题(好文章!!)
我的Mysql版本是 8.0.18使用的Driver是 com.mysql.cj.jdbc.Driver当我们连接时没有指定时区,mysql会使用设置中time_zone所设置的时区,这个值默认是SYSTEM,也就是指向system_time_zone这个变量,在中国,这个值显示是CST。mysql> show variables like "%time_zone%";+------------------+--------+| Variable_name | Value |转载 2021-03-16 13:47:55 · 447 阅读 · 0 评论 -
MySQL5.7 开启GTID复制模式终于不用开启log_slave_updates参数了
MySQL5.6的GTID复制模式,必须开启log_slave_updates参数,否则启动就报错,因为需要在binlog找到同步复制的信息(UUID:事务号),如果在密集型写的环境,比如双十一大促在线支付,这无疑增加了从库不必要的磁盘IO开销。(注:开启log_slave_updates参数,是把relay-log里的日志内容再记录到slave本地的binlog里。)但在MySQL5.7里,官方终于做了调整,用一张gtid_executed系统表记录同步复制的信息(UUID:事务号),这样就转载 2021-01-05 18:56:46 · 358 阅读 · 0 评论 -
mysql主从同步错误解决和Slave_IO_Running: NO(好文章!!)
1、出现错误提示、 SlaveI/O:errorconnectingtomaster'backup@192.168.1.x:3306'-retry-time:60retries:86400,Error_code:1045 解决方法从服务器上删除掉所有的二进制日志文件,包括一个数据目录下的master.info文件和hostname-relay-bin开头的文件。master.info::记录了Mysql主服务器上的日志文件和记录位置、连...转载 2021-01-05 18:41:17 · 625 阅读 · 0 评论 -
mysqldump导出数据备份 --set-gtid-purged=OFF(简明!!)
Mysql 数据库 在主从 数据库进行 导出备份和恢复的时候,需要注意是否启用数据库用GTID模式.如果开启,则在mysqldump数据时,应该mysqldump命令加上参数--set-gtid-purged=OFF。具体详细见转载:下面是采用mysqldump导出a.sql的前30行记录:[root@aaa0-D14-042 mysqlbackup]# head -30 t1.sql -- MySQL dump 10.13 Distrib 5.6.24-72.2, for Linux (转载 2020-12-29 10:57:07 · 4441 阅读 · 0 评论 -
mysqldump关于--set-gtid-purged=OFF的使用(好文章!!)
数据库的模式中我开启了gtid:mysql> show variables like '%gtid%';+----------------------------------+-----------+| Variable_name | Value |+----------------------------------+-----------+| binlog_gtid_simple_recovery | ON || enforce_gtid_consistency | ON转载 2020-12-28 16:52:30 · 7096 阅读 · 0 评论 -
MySQL设置只读模式——锁定所有表(好文章!!)
常见现象运维工作中会经常维护MySQL主从服务器,当然Slave我们只是用于读操作。一般权限开通也只授权只读账号,但是有时候维护工作可能不是一个人在做,你不能保证其他同事都按照这个标准操作。有同事可能会授权Slave库MySQL账号为all或者select,update,insert,delete。还有一种情况是主从做了对所有数据的同步(包括用户信息),在Master库上面授权的账号也同步到了Slave库上面,当然Master账号中肯定会有select,update,insert,delete权转载 2020-12-17 18:15:46 · 2015 阅读 · 1 评论 -
mysql批量修改表格中某一列字段——利用备份表
CREATE TABLE cve_cve_tmp SELECT * from cve_cveUPDATE cve_cve a INNER JOIN cve_cve_tmp b on a.id=b.id set a.is_important=b.is_important补充:常用的还有如下语句INSERT INTO cve_cve(is_important) SELECT cve_cve_tmp WHERE cve_cve.id=cve_cve_tmp.id...原创 2020-12-17 16:53:51 · 274 阅读 · 0 评论 -
jpa执行原生sql,返回自定义对象(好文章!!)
jpa执行原生sql,返回自定义对象前言:我之前是用mybatis的,到了一个新公司,用的是hibernate了,感觉非常不适用,想写原生sql,百度了一天,有说用接口的,有说用工具类的,都不合我意,偶然看到一位大神的博客,不记得地址了,感谢,侵删。废话少说,直接上代码:我要实现这样的sql,select a.name,a.address,b.password,b.phone from tableA a inner join tableB b on a.bid = b.id where a转载 2020-12-04 17:02:56 · 1486 阅读 · 0 评论 -
mysql分组后其他字段按照分组规则拼接字符串 -- group by与 group_concat()(好文章!!)
建表语句:create table st( id int, name varchar(50), cla varchar(50), num int);插入数据:insert into st values(1,'张三','高数',3);insert into st values(1,'张三','大学物理',2);insert into st values(1,'张三','计量经济学',3);insert into st values(2,'李四四','高数转载 2020-12-03 14:11:17 · 1307 阅读 · 0 评论 -
sql关于group by和max函数一起使用的坑(同理,求部门最高工资)
前几天去参加一场面试,面试过程中有被问到一个SQL语句的问题,很遗憾没有回答上来,结果一面直接挂(问完这个问题后,当我听到面试官对我说:你有什么想问我的吗? 我的内心一片凉凉)。其实面试官问的问题听起来很简单,一张剧目演出表,表中有(剧目ID,剧目名称,演出单位,票房),问:查询出每个演出单位票房最高的剧目名称。(听起来很简单吧)我给面试官的答案是:(name是剧目名称,desp是演出...转载 2019-03-26 13:11:15 · 23288 阅读 · 9 评论 -
mysql STR_TO_DATE 为null问题(由于数据库sql_model影响,mysql5.6默认宽松模式,5.7默认严格模式)(找了一下午,好文章!!)
mysql时间转换1.情况SELECT STR_TO_DATE('20:09:30', '%h:%i:%s')-- 返回 NULL(超过12时的小时用小写h,得到的结果为NULL,此时改成大写H即可’%H:%i:%s’)2.情况此种情况为mysql设置问题类似于未指定的日期部分,STR_TO_DATE()函数将未指定的时间部分设置为零,请参见以下示例:mysql> SELECT STR_TO_DATE('11','%h');+---------------------.转载 2020-12-02 21:39:21 · 2266 阅读 · 0 评论 -
Mysql - 关于relay_log_recovery参数的测试(好文章!!)
一、概述官方文档中对relay_log_recovery参数的解释Enables automatic relay log recovery immediately following server startup. The recovery process creates a new relay log file, initializes the SQL thread position to this new relay log, and initializes the I/O thread to t转载 2020-11-30 14:27:41 · 656 阅读 · 0 评论 -
Mysql中 in or exists not exists not in区别 (网络整理)(好文章!!)
in 和or区别:如果in和or所在列有索引或者主键的话,or和in没啥差别,执行计划和执行时间都几乎一样。如果in和or所在列没有索引的话,性能差别就很大了。在没有索引的情况下,随着in或者or后面的数据量越多,in的效率不会有太大的下降,但是or会随着记录越多的话性能下降非常厉害因此在给in和or的效率下定义的时候,应该再加上一个条件,就是所在的列是否有索引或者是否是主键。如果有索引或者主键性能没啥差别,如果没有索引,性能差别不是一点点!具体可参考:http://blog.chinaunix转载 2020-11-27 21:55:47 · 256 阅读 · 0 评论 -
sql语句where后条件执行顺序与优化
曾经面试时。被问到过这个问题。结合网上的知识,整理如下:针对mysql,其条件执行顺序是 从左往右,自上而下;针对orcale,其条件执行顺序是从右往左,自下而上。其中mysql:where执行顺序是从左往右执行的,在数据量小的时候不用考虑,但数据量多的时候要考虑条件的先后顺序,此时应遵守一个原则:排除越多的条件放在第一个。在用MySQL查询数据库的时候,连接了很多个过滤条件,发现非常慢。例如:SELECT … WHERE p.languages_id=1 AND t.type=1.转载 2020-11-27 21:36:57 · 4938 阅读 · 0 评论 -
Mysql - 关于relay_log_recovery参数的测试(好文章!!)
一、概述官方文档中对relay_log_recovery参数的解释Enables automatic relay log recovery immediately following server startup. The recovery process creates a new relay log file, initializes the SQL thread position to this new relay log, and initializes the I/O thread to t转载 2020-11-25 17:17:26 · 619 阅读 · 0 评论 -
MySQL日志系统:redo log、binlog、undo log 区别与作用
日志系统主要有redo log(重做日志)和binlog(归档日志)。redo log是InnoDB存储引擎层的日志,binlog是MySQL Server层记录的日志, 两者都是记录了某些操作的日志(不是所有)自然有些重复(但两者记录的格式不同)。图来自极客时间的mysql实践,该图是描述的是MySQL的逻辑架构。redo log日志模块redo log是InnoDB存储引擎层的日志,又称重做日志文件,用于记录事务操作的变化,记录的是数据修改之后的值,不管事务是否提交都会记录下来。在实例和转载 2020-11-25 17:13:10 · 280 阅读 · 0 评论 -
MySQL日志(undo、redo、data file)事务执行的各个阶段
梳理下事务执行的各个阶段:(1)写undo日志到log buffer;(2)执行事务,并写redo日志到log buffer;(3)如果innodb_flush_log_at_trx_commit=1,则将redo日志写到log file,并刷新落盘。(4)提交事务。可能有同学会问,为什么没有写data file,事务就提交了?在数据库的世界里,数据从来都不重要,日志才是最重要的,有了日志就有了一切。因为data buffer中的数据会在合适的时间 由存储引擎写入到data fi转载 2020-11-25 17:08:18 · 419 阅读 · 0 评论 -
MHA高可用
MHA高可用nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /etc/mha/app1/manager.log 2>&1 &一.MHA简介1.作者:松信嘉範2.软件简介MHA能够在较短的时间内实现自动故障检测和故障转移,通常在10-30秒以内;在复制框架中,MHA能够很好地解决复转载 2020-11-25 15:05:58 · 699 阅读 · 0 评论 -
mysql5.7 开启增强半同步复制
前提是主从异步复制环境要提前搭建好,然后再开启mysql增强半同步环境:mysql5.7.26 主从异步复制早已部署好。1.加载plugin插件建议master和slave上全部执行(考虑到MHA的主从自动切换的环境)在主库安装semisync_master.so和semisync_slave.so插件:mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';mysql> INSTALL转载 2020-11-25 14:24:51 · 1207 阅读 · 0 评论 -
MySQL - 异步复制,半同步复制,增强半同步复制,组复制,全告诉你(最!清晰透彻,好文章!!)
1.什么是主从复制主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库。可以理解为,主数据库的数据的任何变化,从数据库都会跟着发生变化。2.主从复制的作用 在从服务器可以执行查询工作,降低主服务器压力;(主库写,从库读,降压)读写分离 在从主服务器进行备份,避免备份期间影响主服务器服务;容灾 当主服务器出现问题时,可以切换到从服务器。提高可用性 3.主从复制的基本原理步骤含义: SQL语句操作变化存入BinLog...转载 2020-11-25 11:11:56 · 2072 阅读 · 0 评论 -
MySQL半同步复制与增强半同步复制详解及安装
一、基础1.目前MySQL主要有三种复制方式1)异步复制2)半同步复制3)增强半同步复制推荐使用:对性能要求较高的推荐使用异步复制 ,如果运行的金融类业务推荐使用增强半同步复制,并使用ROW+GTID+5.7以上1.1)异步复制MySQL复制的默认方式2.1)半同步复制的优缺点rpl_semi_sync_master_wait_point=after_commit缺点1: 幻读当用户发起一个事务,该事务已经写入redo日志和binlog日志,但该事务还没写入.转载 2020-11-24 18:24:53 · 603 阅读 · 0 评论