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的数据目录转移到 ...
随机推荐
- FastExcel 合并单元格(相当的行数据,进行合并)
目录 需求 思路 实现 Excel导出单元格全量合并策略 日期格式转换 接口代码 Service DTO 使用FastExcel数据导出:官网: https://idev.cn/fastexcel/z ...
- IOS CABasicAnimation实现旋转动画
IOS CABasicAnimation实现旋转动画 定义一个CABasicAnimation lazy var rotateAnimation: CABasicAnimation = { let a ...
- 天地图接口Python代码详解
天地图是中国国家测绘地理信息局推出的一款权威.全面的在线地理信息系统,提供了丰富的卫星影像.地形.矢量图等地图资源.开发者可以通过天地图提供的API接口,实现地图的展示.搜索.定位等功能.本文将详细介 ...
- kubernetes更改nodePort模式下的默认端口范围
使用nodePort模式,官方默认范围为30000-32767,详见Service官方文档. NodePort 类型如果将 type 字段设置为 NodePort,则 Kubernetes 控制平面将 ...
- adduser和addgroup命令讲解
https://wiki.alpinelinux.org/wiki/Setting_up_a_new_user 在Alpine Linux下创建用户和组命令分别是adduser和addgroup,本文 ...
- 【shell】远程执行shell|多节点并行执行shell|远程执行注意
目录 前提条件 shell远程执行 多节点上并行执行命令的三种方法 方法1 使用bash执行命令 方法2 使用clustershell执行命令--还能收集结果 方法3 使用pdsh 执行命令 远程执行 ...
- Qt编写地图综合应用34-生成区域轮廓图
一.前言 区域轮廓图的前提是,如何拿到这些轮廓的js文件,网络上其实能够找到各省市的轮廓的json数据,这些json数据对应内容是各种边界的一些类似 @@CGIUCACAAAAA@Q@ 字符的东西,每 ...
- Qt通用方法及类库3
函数名 //设置全局样式 static void setStyle(QUIWidget::Style style); static void setStyle(const QString &q ...
- 使用Visual Studio Code进行前端开发并运行前端页面时提示:npm WARN Local package.json exists, but node_modules missing, did you mean to install?
使用Visual Studio Code进行前端开发并运行前端页面时提示如下错误: npm WARN Local package.json exists, but node_modules missi ...
- Web端即时通讯实践干货:如何让WebSocket断网重连更快速?
本文作者网易智慧企业web前端开发工程师马莹莹.为了提升内容质量,收录时有修订和改动. 1.引言 在一个完善的即时通讯IM应用中,WebSocket是极其关键的一环,它为基于Web的即时通讯应用提供了 ...