MySQL - mysql 面试题
事务的四个特点是什么?他们的实现原理是什么?
事务的四个特点是ACID,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
A(Atomicity):原子性 通过undolog实现
事务是一个不可分割的工作单位,要么全部执行成功,要么全部失败回滚,不能只执行部分操作。实现原理是使用日志记录所有对数据库的修改操作,并在执行过程中进行回滚操作。
C(Consistency):一致性
事务的执行结果必须使数据库从一个一致性状态转换到另一个一致性状态。实现原理是在事务开始前对数据库进行约束检查,保证事务执行后数据库仍然满足约束条件。
I(Isolation):隔离性 通过锁 MVCC实现
多个事务并发执行时,每个事务的执行都应该与其他事务的执行相互隔离,互不干扰。实现原理是使用锁机制对共享资源进行控制,以保证每个事务可以独立地访问和修改数据。
D(Durability):持久性 通过redolog实现
事务执行结束后,其对数据库的修改应该永久保存在数据库中,即使出现系统故障也不会丢失。实现原理是使用日志记录所有对数据库的修改操作,并在系统重启后通过恢复操作将这些修改重新应用到数据库中。
mysql的redolog、undolog、binlog分别有什么作用?
MySQL的redo log、undo log和binlog是三种不同的日志,各自有不同的作用:
1. Redo log(重做日志):记录了所有对数据页的修改操作,包括插入、更新、删除等。其主要作用是确保事务提交后,即使发生系统崩溃或宕机等异常情况,也能够通过重做日志来恢复数据。Redo log是物理日志,记录的是对数据页的修改操作,因此在恢复时需要重新执行对应的物理操作。
2. Undo log(回滚日志):记录了事务执行前的数据状态,主要用于实现事务的回滚操作。当事务需要回滚时,可以使用Undo log中的信息将数据恢复到事务开始前的状态。Undo log是逻辑日志,记录的是对数据的逻辑操作,因此在恢复时需要执行相反的逻辑操作。
3. Binlog(归档日志):记录了所有对数据库的修改操作,包括数据库结构的变化和数据的增删改操作等。Binlog主要用于数据备份、数据复制和恢复操作。可以通过Binlog将数据库的修改操作传输到其他服务器,以实现数据同步或灾备等功能。Binlog是逻辑日志,记录的是对数据库的逻辑操作,因此在恢复时需要执行相应的逻辑操作。
综上所述,Redo log、Undo log和Binlog分别用于保证数据的一致性、实现事务的回滚操作和实现数据备份、数据复制等功能。在MySQL中,这三种日志通常一起使用,以确保数据的安全性和可靠性。
什么是二阶段提交,如何保证宕机时数据的一致性?
二阶段提交(Two-Phase Commit):是一种分布式事务协议,用于在多个数据库节点之间保持数据的一致性。在二阶段提交协议中,事务的提交过程分为两个阶段:准备阶段和提交阶段。在准备阶段,各个节点会向协调者发送准备请求,并等待协调者的回复;在提交阶段,协调者会向各个节点发送提交请求,并等待节点的响应。只有当所有节点都已经准备就绪后,协调者才会发送提交请求,否则会发送回滚请求,撤销事务的执行。
在宕机时,二阶段提交协议可以通过超时机制来保证数据的一致性。如果某个节点在规定时间内没有响应,协调者会将其视为故障节点,向其他节点发送回滚请求,以确保数据的一致性。
MVCC如何实现多版本并发控制?如何解决读写冲突?
MVCC(Multi-Version Concurrency Control):是一种多版本并发控制技术,用于在并发访问中保证数据的一致性。MVCC通过为每个事务创建一个独立的数据版本,避免了读写之间的冲突,从而提高了并发访问的效率。
MVCC的实现原理是,在每个数据行中增加一个版本号,每次修改时都会生成一个新的版本,而不是直接覆盖原有的数据。在读取数据时,系统会根据事务的隔离级别选择合适的数据版本进行访问,以保证数据的一致性。
解决读写冲突:在MVCC中,读操作和写操作之间是不存在冲突的,因为每个事务都是读取自己创建的版本,不会对其他事务产生影响。但是,在并发读操作时可能会出现读写冲突,这时可以使用锁机制来解决冲突。
mysql中的幻读是什么?如何解决幻读问题?
幻读(Phantom Read):是指在一个事务中多次执行同一语句,但由于其他事务插入了新数据,导致查询结果不一致的现象。
解决幻读问题可以采用两种方法:一种是使用锁机制来避免并发插入操作,但这样会降低并发性能;另一种是使用快照隔离级别,在读取数据时不加锁,而是复制一份当前数据的快照,从而避免了幻读问题。
在MySQL中,MVCC是通过在InnoDB存储引擎中实现的。InnoDB使用多版本并发控制来保证数据的一致性,在读取数据时会根据事务的隔离级别选择合适的数据版本进行访问。同时,InnoDB还使用了间隙锁来避免幻读问题的出现。
MySQL系统有哪些日志
slowlog、binlog、relaylog、errorlog、undolog、redolog
- server
- slowlog:慢日志,可以记录执行比较慢的sql语句,可以设置时间,超过这个时间就是慢sql,记录到slowlog中
- binlog:用来进行主从复制或者数据备份
- relaylog:中继日志,用来记录同步来的binlog数据
- errorlog:错误日志,记录mysql运行过程中的错误信息
- innodb
- undolog:回滚日志,方便进行回滚操作以及满足mvcc的需要
- redolog:前滚日志,用来进行持久化存储
数据库的并发场景
读读:不存在任何并发问题,也不需要并发控制
读写:有线程安全问题,会造成脏读、幻读、不可重复读
写写:有线程安全问题,会造成丢失更新。
mysql 中执行了grant select on a.* to user_a; 然后数据库a中的表删除后,又重新生成,那么还需要再赋权么?
不用,上述赋权语句是数据库级别的,不是针对某个表,所以重新生成后,不需要再次赋权。
MySQL - mysql 面试题的更多相关文章
- Linux运维必会的MySQL企业面试题大全
(1)基础笔试命令考察 1.开启MySQL服务 /etc/init.d/mysqld start service mysqld start systemctl start mysqld 2.检测端口是 ...
- (转)linux运维必会MySQL企业面试题
linux运维必会MySQL企业面试题 老男孩教育运维班全体学员MySQL必会企业面试题最实战.最细致.最落地的运维实训基地,老男孩教育连续多年国内平均就业工资最高! 数据库的重要性是所有技术里最核 ...
- (转)Linux运维MySQL必会面试题100道
老男孩教育Linux运维班MySQL必会面试题100道 (1)基础笔试命令考察 (要求:每两个同学一组,一个口头考,一个上机实战作答,每5个题为一组,完成后换位) 1.开启MySQL服务 2.检测端口 ...
- MySQL 基础理论面试题整理
前言: 之前整理公司面试题的时候,看了一篇大神些 SQL 优化之六脉神剑 文章,写的真好! 博主有一些 MySQL 的面试题,简单抽了一个备注一下,补充一下自己不熟悉的地方. 一.在MySQL中, ...
- 数据库MySQL经典面试题之SQL语句
数据库MySQL经典面试题之SQL语句 1.需要数据库表1.学生表Student(SID,Sname,Sage,Ssex) --SID 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学 ...
- mysql面试题及答案,mysql最新面试题,mysql面试题大全汇总
mysql最新面试题及答案汇总 Mysql 的存储引擎,myisam和innodb的区别.mysql最新面试题 答: 1.MyISAM 是非事务的存储引擎,适合用于频繁查询的应用.表锁,不会出现死锁, ...
- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
有时候,当我们使用"mysql"."mysqladmin"."mysqldump"等命令管理数据库时,服务器抛出类似如下错误: 一.错误现场 ...
- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
从供应商手中接手一个云平台(Windwos Azure)上的MySQL数据库,登录数据库时遇到错误: $mysql -uroot -p Enter password: ERROR 2002 (HY00 ...
- mac ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib /mysql/mysql.sock' (111)
之前装了mysql,今天打开mysql的时候报了个Can't connect to local MySQL server through socket '/var/lib /mysql/mysql.s ...
- 更换mysql数据目录后出现ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) 的解决办法
服务器上的mysql默认数据目录为/var/lib/mysql/,同时服务器的/空间不是很大,而近期又有大量的日志需要导入进行分析,时常搞得/的空间捉襟见肘,晚上一狠心就想把mysql的数据目录转移到 ...
随机推荐
- docker-compose的nginx更换完ssl证书不起作用的完美解决方法
以Harbor为例,ssl证书更新后,docker-compose启动不起作用. 问题出在一句很重要的命令:./prepare 步骤:(Harbor样例) 1. cd /data/ssl 换ssl证 ...
- 大文件传输与断点续传实现(极简Demo: React+Node.js)
大文件传输与断点续传实现(极简Demo:React+Node.js) 简述 使用React前端和Node.js后端实现大文件传输和断点续传的功能.通过分片上传技术,可以有效地解决网络不稳定带来的传输中 ...
- 实用干货分享 - Oracle数据库RPM部署指南
下载依赖和Oracle19c版本的RPM包 http://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-dat ...
- .NET 9 New features-AOT相关的改进
上一篇文章给大家介绍了 .NET 9 New features-JSON序列化 本篇文章,研究分享一下关于AOT方面的改进 1. 什么是AOT AOT(Ahead-of-Time)编译是一种在应用程序 ...
- manim边学边做--移动动画
在Manim中,其实直线移动的动画非常简单,每个Mobject对象都有animate属性, 通过obj.animate.shift()或者obj.animate.move_to()很容易将对象从一个位 ...
- 【MyBatis】学习笔记15:通过分步查询解决一对多或多对多问题
目录 对象 SmbmsProvider.java SmbmsBill.java 接口 providerMapper.java orderMapper.java 映射文件 providerMapper. ...
- Qt开源作品37-网络中转服务器
一.前言 用Qt做开发10年了,其中做过好多项目,基于现在web和移动互联网发展如此迅猛,大量的应用场景需要一个网络中转服务器,可以实现手机app或者其他客户端远程回控设备,现在物联网发展非常迅猛,这 ...
- [转]MySQL和MySQL驱动mysql-connector-java升级到8.0.X版本
原文链接:MySQL和MySQL驱动mysql-connector-java升级到8.0.X版本
- 状压 DP 做题记录
1.普通状态压缩 DP oi-wiki I.P1896 [SCOI2005] 互不侵犯 \(f_{i,j,st}\) 表示前 \(i\) 行中放置了 \(j\) 个国王,当前行状态为 \(st\) 的 ...
- IT系统架构的演化-copy
前言 一个成熟的大型网站(如淘宝.天猫.腾讯等)的系统架构并不是一开始设计时就具备完整的高性能.高可用.高伸缩等特性的,它是随着用户量的增加,业务功能的扩展逐渐演变完善的,在这个过程中,开发模式.技术 ...