面试手册

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

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

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

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

5、MySQL中myisam和innodb的区别?

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

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

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

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

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

11、什么是数据库事务?

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

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

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

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

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

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

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

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

20、事务的隔离级别?

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

22、nosql指什么?

23、用过什么监控软件?

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

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

26、zabbix有哪些优势?

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

28、zabbix架构体系有哪些?

参考答案

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

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

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

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


3、
MyISAM

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

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

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

(3)MYI文件:存储索引

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

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

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

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

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

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

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

Memory

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

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

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

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



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

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

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


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




6char是一种固定长度的类型,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、在之前工作中,经常用到的两种备份方式是mysqldump以及xtrabackup
mysqldump是逻辑备份,备份效率较低,数据量较少的情况下可以采用mysqldump的备份方式
xtrabackup是物理备份,备份效率高,切支持在线热备,缺点是只支持innodb引擎。数据量较大的情况下可使用xtrabackup的方式进行备份。


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


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


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



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

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

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



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

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

18、
如果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命令行中设置全局默认的字符集为UTF8。


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


21、主从复制的重点主要有:
1)主库和从库需要设置不同的server-id2)主库需要开启binlog日志并确定准确的binlog起始信息。
3)从库在建立主从关系时要指定正确的host、port、userpassword、binglog日志信息。


22、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监控系统的开源版本。


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

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

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


28、
Zabbix体系相对清晰,其主要组件有:
• Zabbix Server:负责接收agent发送的报告信息的核心组件,所有配置、统计数据及操作数据均由其组织进行。
• Database Storage:专用于存储所有配置信息,以及有zabbix收集的数据。
• Web interface(frontend):zabbix的GUI接口,通常与server运行在同一台机器上。
• Proxy:可选组件,常用于分布式监控环境中,代理Server收集部分被监控数据并统一发往Server端。
• Agent:部署在被监控主机上,负责收集本地数据并发往Server端或者Proxy端。
文档更新时间: 2022-02-08 21:53   作者:李延召