2025-02-18-关于运维关于数据库面试题
关于运维·关于数据库面试题
目录
引言:明人不说暗话,今天分享几个关于运维·关于数据库的面试题
一、数据库类型
Redis 是非关系型数据库 : 存储格式灵活 ,可以是key-value(一种以 键值 存储数据的数据库 )的形式,也可以是文本文档图片等形式, 读写速度快 ,可以使用磁盘或者其他储存器作为载体,具有高扩展性, 但是不支持事务也不支持sql语句。
Mysql是关系型数据库 : 支持事务,支持sql语句,支持行锁定,可以复杂查询,使用固定表结构,读写速度慢 ,因为使用的固定表结构导致 存储方式不够灵活 ,对于高并发的读取请求,磁盘性能是很大的瓶颈。
二、数据库引擎
innodb :支持事务,不支持行锁定;
myisam :有较高的查询能力,不支持事务;
memory :需要很快的读写速度但对安全性要求不高的情况下可以使用,对表的大小有要求,支持锁表不支持所锁行。
三、mysql数据库类型
整数型;
浮点型;
文本文字类型;
日期时间类型;
枚举型;
集合型。
四、mysql的约束添加
**主键PRIMARY KEY (PK)
:用于唯一的标识表行的数据,定义逐渐约束后,此列不能被重复**
**自增(AUTO_INCREMENT)
:
标识该字段的值自动增长**
空值null :此列不能为空
default :默认约束,即使没有插入数据,也会有默认值
unique :唯一约束,该列不允许被复制
五、主从复制原理
主库 开启binlog日志,授权用户密码 ;
从库开启两个线程 io线程和sql线程 , io线程会像主库binlog日志文件发起读取请求 ,读取成功后记录在从库的
Realy-log( 中继日志文件) 当中, sql线程读取Realy-log(中继日志) 后如果发现有更新立即把更新的内容在本机的数据库上面执行一遍。
六、主从方式有几种
两种做法:
binlog日志方式 :从节点需要 手动指定 binlog日志的名称、位置或时间
gtid方式 :从节点不需要手动指定binlog日志的名称、位置或时间; 会自动锁定
七、mysql主从数据不一致的原因
网络延迟 ,主从复制是基于binlog的异步复制,通过网络传送binlog文件,网络延迟是大多数引起数据不一致的原因
主从机器的负载不一致 :mysql主从复制是主库开启dump线程,从库开启io和sql线程。当任何一台服务器负载过高,导致其中一个线程资源不足,会出现主从不一致的情况
版本不一致
max_allowed_packet( 一次传送数据包的过程中最大允许的数据包大小 )设置不一致 :主库设置的max_allowed_packet设置的比从库大,一条大的sql语句在主库能执行完毕,但在从库上无法执行,导致主从不一致。
解决方法:
1、stop slave set global sql_slave_skip_counter=1 跳过这一步错误;
2、重新做主从:先锁表,导入数据数据+同步,重新做主从
八、mysql的优化
安全方面 :修改默认端口号,禁止root用户远程登录,对用户降权,以普通用户运行mysql
性能方面 :升级硬件,内存、磁盘、优化sql语句(开启慢查询)、设置索引
参数优化 :innodb的buffer参数调大,连接数调大、缓存的参数优化
架构方面 :读写分离,一主多从,高可用
九、什么是事务的特征
原子性 :指事务是不可拆分的最小单元
隔离性 :数据库允许多个事务同时对数据库的数据进行读写和修改的能力,隔离性为了防止多个事务并发执行由于交叉执行导致的数据不一致。隔离级别分为读未提交、读提交、可重复读、串行化。隔离等级越高,数据越安全,但是消耗的资源就越多。
一致性 :事务中的sql语句,要么全部成功,要么全部失败。
持久性 :事务结束后,对数据的修改是永久写入到磁盘的,即使系统故障也不会丢失
十、数据库读写分离的好处
分摊服务器的压力,
提高系统的处理效率。
主要分担主服务器的读取压力,间接提高了主库的写入性能,读请求全部发给了从库。
十一、 怎样优化sql语句
1. 对查询进行优化 ,应尽量 避免全表扫描 ,首先应考虑在 where 及 order by 涉及的列上建立索引。
2.应尽量 避免在 where 子句中对字段进行 null 值判断 ,否则将导致引擎放弃使用索引而进行全表扫描
3. 任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。
4. 避免频繁创建和删除临时表 ,以减少系统表资源的消耗。
十二、mysql的同步方式
「异步复制」 :MySQL 默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给客户端, 并不关心从库是否已经接收并处理 。这样就会有一个问题,一旦主库宕机,此时主库上已经提交的事务可能因为网络原因并没有传到从库上,如果此时执行故障转移,强行将从提升为主,可能 导致新主上的数据不完整 。
「全同步复制」 :指当主库执行完一个事务,并且所有的从库都执行了该事务,主库才提交事务并返回结果给客户端。因为 需要等待所有从库执行完该事务才能返回 ,所以全同步复制的性能必然会收到严重的影响。
「半同步复制」 :是介于全同步复制与全异步复制之间的一种,主库只需要等待至少一个从库接收到并写到 Relay Log 文件即可, 主库不需要等待所有从库给主库返回 ACK 。主库收到这个 ACK 以后,才能给客户端返回 “事务完成” 的确认。
十三、mysql的数据备份有几种
逻辑备份 :mysqldump,备份sql语句, 速度慢,恢复也慢 ,需要一条一条执行sql语句
物理备份 :xtrabackup备份, 备份速度慢,文件大,恢复速度快 。
物理备份又分为3种备份方式:
完全备份 :备份当前的所有数据
增量备份 :备份上一次备份到当前时间点的更新的所有数据(上一次备份可以是全备也可以是增量备份),数据占用磁盘空间小,但恢复过程较复杂
差异备份 :备份上一次完全备份到当前时间点的所有数据,占用磁盘空间比较大,恢复过程简单
希望能够帮助到大家!
68747470733a2f2f626c:6f672e6373646e2e6e65742f797a323332323934343931322f:61727469636c652f64657461696c732f313335353734323237