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的数据目录转移到 ...
随机推荐
- 树莓派4B 多屏 QT程序窗口全屏 QScreen 只能获取1个屏幕
直接运行程序时,窗口全屏, 并且QScreen 只能获取1个屏幕,这是由于QT默认使用了EGLFS.(坑了一下午) 所以必须采用命令方式打开程序. ./程序名称 -platform xcb
- Qt+OPC开发笔记(一):OPCUA介绍、open62541介绍、编译与基础环境Demo
前言 本篇介绍OPC协议,相关开源库.编译并搭建Qt开发OPC的基础环境. Demo OPC OPC(OLE for Process Control)是一个工业标准,用于实现工业 ...
- 【Linux】职教云作业
作业_职教云_Day01 @ 哔哩哔哩 萌狼蓝天 1.由普通用户切换到root用户 su 2.列出home目录下的各个文件名字 cd /home ls 3.在/etc/目录下显示以sysc开头的所有命 ...
- .NET 9 中的 多级缓存 HybridCache
HybridCache是什么 在 .NET 9 中,Microsoft 将 HybridCache 带入了框架体系. HybridCache 是一种新的缓存模型,设计用于封装本地缓存和分布式缓存,使用 ...
- Qt编写地图综合应用44-悬浮工具条
一.前言 百度地图内置了悬浮工具条,可以自行开启,包括离线地图也可以开启,用到了DrawingManager这个库,鼠标绘制工具条库,提供鼠标绘制点.线.面.多边形(矩形.圆)的编辑工具条的开源代码库 ...
- C#中工作线程处理完数据后将处理结果返回给UI主线程通知主线程操作界面
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 🎉 夜莺监控突破一万 star,这是汗水,也是鞭策
夜莺监控项目在上周突破了一万 star,算是一个小小的里程碑.在开源领域,通常把 star 数量看作项目的繁荣指标,star 数量越多,说明愿意关注你的人越多.这个数字的背后,是一群人对你的鼓励.认可 ...
- Ubuntu安装宝塔服务
Linux面板7.9.4安装脚本 查看详细安装教程 使用 SSH 连接工具,如 堡塔SSH终端 连接到您的 Linux 服务器后, 挂载磁盘 ,根据系统执行相应命令开始安装(大约2分钟完成面板安装): ...
- 2020-2024 IDEA安装+激活
一.下载 1. IDEA各版本官方下载入口 IDEA官网下载地址 2. 选择左边,然后点击[20xx.x.x-Windows(exe)] PS: 如需下载特定版本,可以往下拉,都是选择[202x.x- ...
- AI 与 Mermaid 使用教程之流程图 - 从入门到精通
本文由 Mermaid中文文档 整理而来,并且它同时提供了一个 Mermaid在线编辑器,支持在线编辑与生成流程图. 在文章的末尾我们将介绍如何使用AI来自动生成 Mermaid 流程图. Merma ...