22--面试手册

目录

1、你接触过哪几种数据库软件,各自的优缺点是什么?

1、关系型数据库-MySQL
在不同的引擎上有不同的存储方式。
查询语句是使用传统的sql语句,拥有较为成熟的体系,成熟度很高。
开源数据库的份额在不断增加,mysql的份额也在持续增长。
缺点就是在海量数据处理的时候效率会显著变慢。
  
非关系型数据库MongoDB
优势:
 1、在适量级的内存的MongoDB的性能是非常迅速的,它将热数据存储在物理内存中,使得热数据的读写变得十分快。
 2、MongoDB的高可用和集群架构拥有十分高的扩展性。
 3、在副本集中,当主库遇到问题,无法继续提供服务的时候,副本集将选举一个新的主库继续提供服务。
 4、MongoDB的Bson和JSon格式的数据十分适合文档格式的存储与查询。

劣势:
 1、 不支持事务操作。MongoDB本身没有自带事务机制,若需要在MongoDB中实现事务机制,需通过一个额外的表,从逻辑上自行实现事务。
 2、 应用经验少,由于NoSQL兴起时间短,应用经验相比关系型数据库较少。
 3、MongoDB占用空间过大。
 
 非关系型数据库Redis
Redis是NOSQL,即非关系型数据库,也是缓存数据库,即将数据存储在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限。
redis用于存储使用较为频繁的数据到缓存中,读取速度快。
MySQL偏向于存数据,Redis偏向于快速取数据,但Redis查询复杂的表关系时不如MySQL,所以可以把热门的数据放Redis,MySQL存基本数据。

2、MySQL binlog的几种日志格式有什么区别?

2、mysql binlog 三种格式
mysql的binlog日志作用是用来记录mysql内部增删改等对mysql数据库有更新内容的记录(对数据库进行改动的操作),对数据库查询的语句如show,select开头的语句,不会被binlog日志记录,最大的作用是用来数据增量恢复和主从库复制

ROW
ROW格式会记录每行记录修改的记录,这样可能会产生大量的日志内容,比如一条update语句修改了100条记录,那么这100条记录的修改都会被记录在binlog日志中,这样造成binlog日志量会很大,这种日志格式会占用大量的系统资源,mysql5.7和myslq8.0安装后默认就是这种格式。

STATEMENT
记录每一条修改数据的SQL语句(批量修改时,记录的不是单条SQL语句,而是批量修改的SQL语句事件)所以大大减少了binlog日志量,节约磁盘IO,提高性能,看上面的图解可以很好的理解row和statement 两种模式的区别。但是STATEMENT对一些特殊功能的复制效果不是很好,比如:函数、存储过程的复制。由于row是基于每一行的变化来记录的,所以不会出现类似问题

MIXED
实际上就是前两种模式的结合。在Mixed模式下,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在Statement和Row之间选择一种。

3、MySQL的存储引擎有哪几种?

MyISAM

使用这个存储引擎,每个MyISAM在磁盘上存储成三个文件。

(1)frm文件:存储表的定义数据

(2)MYD文件:存放表具体记录的数据

(3)MYI文件:存储索引

INNODB
InnoDB是默认的数据库存储引擎,他的主要特点有:

(1)可以通过自动增长列,方法是auto_increment。

(2)支持事务。默认的事务隔离级别为可重复度,通过MVCC(并发版本控制)来实现的。

(3)使用的锁粒度为行级锁,可以支持更高的并发;

(4)支持外键约束;外键约束其实降低了表的查询速度,但是增加了表之间的耦合度。

(5)配合一些热备工具可以支持在线热备份;

(6)在InnoDB中存在着缓冲管理,通过缓冲池,将索引和数据全部缓存起来,加快查询的速度;

Memory

将数据存在内存,为了提高数据的访问速度,每一个表实际上和一个磁盘文件关联。
(1)支持的数据类型有限制,比如:不支持TEXT和BLOB类型,对于字符串类型的数据,只支持固定长度的行,VARCHAR会被自动存储为CHAR类型;

(2)支持的锁粒度为表级锁。所以,在访问量比较大时,表级锁会成为MEMORY存储引擎的瓶颈;

(3)由于数据是存放在内存中,一旦服务器出现故障,数据都会丢失;

(4)查询的时候,如果有用到临时表,而且临时表中有BLOB,TEXT类型的字段,那么这个临时表就会转化为MyISAM类型的表,性能会急剧降低;

4、MySQL主从复制原理是什么?

当复制开始时,从库就会创建从库I/O线程和从库的SQL线程进行复制处理。

从库I/O线程:当START SLAVE语句在从库开始执行之后,从库创建一个I/O线程,该线程连接到主库并请求主库发送binlog里面的更新记录到从库上。 从库I/O线程读取主库的binlog输出线程发送的更新并拷贝这些更新到本地文件,其中包括relay log文件。

从库的SQL线程:从库创建一个SQL线程,这个线程读取从库I/O线程写到relay log的更新事件并执行。

5、MySQL中myisam和innodb的区别?

1>.InnoDB支持事物,而MyISAM不支持事物
2>.InnoDB支持行级锁,而MyISAM支持表级锁
3>.InnoDB支持MVCC, 而MyISAM不支持
4>.InnoDB支持外键,而MyISAM不支持
5>.InnoDB不支持全文索引,而MyISAM支持。

6、字段类型varchar和char的区别是什么?varchar(50)中50代表什么?

char是一种固定长度的类型,varchar则是一种可变长度的类型,它们的区别是:
char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足。在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节。
varchar(50)表示最多占用50个字符。

7、关系型数据库和非关系型数据库的区别?你都用过哪些?

关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织
优点:
1、易于维护:都是使用表结构,格式一致;
2、使用方便:SQL语言通用,可用于复杂查询;
3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。
缺点:
1、读写性能比较差,尤其是海量数据的高效率读写;
2、固定的表结构,灵活度稍欠;
3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。
常用的关系型数据库有Oracle、mysql、sqlserver、postgresql

非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等。
优点:
1、格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
2、速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘;
3、高扩展性;
4、成本低:nosql数据库部署简单,基本都是开源软件。
非关系型数据库常见的软件有Redis、mongdb

8、MySQL数据库备份有哪几种备份方式?如何选择?

在之前工作中,经常用到的两种备份方式是mysqldump以及xtrabackup
mysqldump是逻辑备份,备份效率较低,数据量较少的情况下可以采用mysqldump的备份方式
xtrabackup是物理备份,备份效率高,切支持在线热备,缺点是只支持innodb引擎。数据量较大的情况下可使用xtrabackup的方式进行备份。

9、之前公司的数据备份采用什么样的备份方案?如何实施?

之前工作中公司业务量较少,且生产环境是阿里云的RDS,因此采用阿里云RDS的备份策略以及本地备份结合的方式。
备份策略是每天凌晨两点进行一次全量备份,本地备份则是通过脚本以及计划任务,同样是每天进行一次全备,并且每天的备份数据进行打包压缩,并保存三个月。

10、实际使用中使用过哪几种数据恢复方式?

实际工作中主库的宕机故障没有发生过,但是有一些临时需求,开发环境需要导入生产环境的数据进行调试,使用全量结合增量恢复的方式,将备份的全量数据以及增量数据通过xtrabackup恢复到数据库中。

11、什么是数据库事务?

事务:一个最小的不可再分的工作单元;通常一个事务对应一个完整的业务(例如银行账户转账业务,该业务就是一个最小的工作单元)
一个完整的业务需要批量的DML(insert、update、delete)语句共同联合完成
事务只和DML语句有关,或者说DML语句才有事务。这个和业务逻辑有关,业务逻辑不同,DML语句的个数不同

12、数据库事务的特性是什么?

事务四大特征(ACID)
原子性(A):事务是最小单位,不可再分
一致性(C):事务要求所有的DML语句操作的时候,必须保证同时成功或者同时失败
隔离性(I):事务A和事务B之间具有隔离性
持久性(D):是事务的保证,事务终结的标志(内存的数据持久到硬盘文件中)

13、数据库的部署环境以及部署方式?

之前工作中生产环境的数据库都是采用阿里云的RDS服务,采用的是阿里云企业版的rds产品。
开发环境是在本地服务器部署的,基于linux操作系统部署的。
部署过程中采用的是源码编译安装的方式。

14、如果单表数据量过大,有什么优化方式?

1)优化索引
2)进行表的切割。根据实际表的字段采用水平或者垂直切割的方式,对单表进行分表操作。

15、针对数据库权限,你们是如何管理的?

对于生产环境的数据库,程序调用需要使用的账号,给予非root用户的较高的权限。
开发人员、数据分析人员需要用到的查询生产数据的账号,给予select权限。
生产环境中相关的update、insert等的数据修复或者新增数据工作都是由运维采用非root的高权限账号进行。

16、详细描述SQL语句分类及对应代表性关键字。

DDL(Data Definition Language)---数据库定义语言(create、alter、drop),管理基础数据库,例如:库,表  
DCL(Data Control Language)---数据控制语言(grant、revoke、commit、rollback),用户授权,权限回收,数据提交回滚等    
DML(Data Manipulation Language)---数据操作语言(insert、delete、update),针对数据库里的表,记录 
DQL:Data Query Language --数据查询语言(SELECT)

17、MySQL有哪些日志,分别是什么用处?

mysql日志一般分为5种
错误日志:-log-err (记录启动,运行,停止mysql时出现的信息)
二进制日志:-log-bin (记录所有更改数据的语句,还用于复制,恢复数据库用)
查询日志:-log (记录建立的客户端连接和执行的语句)
慢查询日志: -log-slow-queries (记录所有执行超过long_query_time秒的所有查询)
更新日志: -log-update (二进制日志已经代替了老的更新日志,更新日志在MySQL5.1中不再使用)

18、MySQL服务器因断电、异常关闭等导致表损坏,无法读取表数据的时候,如何进行修复?

如果MySQL服务器突然断电、异常关闭,可能会导致表损坏,无法读取表数据。这时就可以用到MySQL自带的两个工具进行修复,myisamchk和mysqlcheck。
myisamchk:只能修复myisam表,需要停止数据库

常用选项:
-f –force    强制修复,覆盖老的临时文件,一般不使用
-r –recover  恢复模式
-q –quik     快速恢复
-a –analyze  分析表
-o –safe-recover 老的恢复模式,如果-r无法修复,可以使用此参数试试
-F –fast     只检查没有正常关闭的表

快速修复xxx数据库:
# cd /var/lib/mysql/xxx
# myisamchk -r -q *.MYI

mysqlcheck:myisam和innodb表都可以用,不需要停止数据库,如修复单个表,可在数据库后面添加表名,以空格分割
常用参数:
-a  –all-databases  检查所有的库
-r  –repair   修复表
-c  –check    检查表,默认选项
-a  –analyze  分析表
-o  –optimize 优化表
-q  –quik   最快检查或修复表
-F  –fast   只检查没有正常关闭的表

快速修复xxx数据库:
mysqlcheck -r -q -uroot -pxxx xxx

19、MySQL数据库中出现中文乱码是什么原因?如何解决?

中文乱码的问题通常是由于没有设定默认字符集引起的,在mysql命令行中设置全局默认的字符集为UTF8。

20、事务的隔离级别?

事务有4 个隔离级别,分别是:
    读未提交(read uncommit)
    读已提交(read commit)
    可重复读(repeatable read)
    和序列化(serializable)。

21、MySQL主从环境部署流程的重点是什么?

1)主库和从库需要设置不同的server-id。
2)主库需要开启binlog日志并确定准确的binlog起始信息。
3)从库在建立主从关系时要指定正确的host、port、user、password、binglog日志信息。

22、nosql指什么?

nosql是所有非关系型数据库的统称

23、用过什么监控软件?

在之前工作中一直使用的是zabbix监控软件。

24、常用的监控软件有哪些特点?

常见的监控软件有:
• Cacti:是一套基于PHP、MySQL、SNMP及RRDTool开发的网络流量监测图形分析工具。
• Zabbix:Zabbix是一个企业级的高度集成开源监控软件,提供分布式监控解决方案。可以用来监控设备、服务等可用性和性能。
• Open-falcon:open-falcon是一款用golang和python写的监控系统,由小米启动这个项目。
• Prometheus:Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。

25、为什么要使用监控软件?最终要达到的目的是什么?

1.对系统不间断实时监控
2.实时反馈系统当前状态
3.保证服务可靠性安全性
4.保证业务持续稳定运行
5.及时发现和解决问题。

26、zabbix有哪些优势?

Zabbix是一个企业级的高度集成开源监控软件,提供分布式监控解决方案。可以用来监控设备、服务等可用性和性能。其主要优势有:
• 自由开放源代码产品,可以对其进行任意修改和二次开发,采用GPL协议;
• 安装和配置简单;
• 搭建环境简单,基于开源软件构建平台;
• 完全支持Linux、Unix、Windows、AIX、BSD等平台,采用C语言编码,系统占用小,数据采集性能和速度非常快;
• 数据采集持久存储到数据库,便于对监控数据的二次分析;
• 非常丰富的扩展能力,轻松实现自定义监控项和实现数据采集。

27、使用zabbix主要监控哪些内容?

硬件监控、web监控、MySQL监控、服务监控、日志监控

28、zabbix架构体系有哪些?

Zabbix体系相对清晰,其主要组件有:
• Zabbix Server:负责接收agent发送的报告信息的核心组件,所有配置、统计数据及操作数据均由其组织进行。
• Database Storage:专用于存储所有配置信息,以及有zabbix收集的数据。
• Web interface(frontend):zabbix的GUI接口,通常与server运行在同一台机器上。
• Proxy:可选组件,常用于分布式监控环境中,代理Server收集部分被监控数据并统一发往Server端。
• Agent:部署在被监控主机上,负责收集本地数据并发往Server端或者Proxy端。
原文地址:https://www.cnblogs.com/caodan01/p/15060156.html