Linux运维(数据库专题)面试题

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 Tair(兼容Redis),内存型 2GB
简介:

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://yht1990.blog.51cto.com/9014030/1788484

1、什么是关系型数据库?什么是非关系型数据库?

  关系型数据库概念:可以理解为一第二维表,每个关系都具有一个关系名,就是通常说的表名,是指爱用了关系模型来组织的数据库

  非关系型数据库:关系型数据库暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。


2、Redis、Memcached和MongoDB优点和局限性?

   Memcached

   Memcached的优点:

   Memcached可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS(取决于key、value的字节大小以及服务   器硬件性能,日常环境中QPS高峰大约在4-6w左右)。适用于最大程度扛量。

   支持直接配置为session handle。

 

   Memcached的局限性:

   只支持简单的key/value数据结构,不像Redis可以支持丰富的数据类型。  

   无法进行持久化,数据不能备份,只能用于缓存使用,且重启后数据全部丢失。

   无法进行数据同步,不能将MC中的数据迁移到其他MC实例中。

   Memcached内存分配采用Slab Allocation机制管理内存,value大小分布差异较大时会造成内存利用率降低,并引    发低利用率时依然出现踢出等问题。需要用户注重value设计。


   Redis

   Redis的优点:

   支持多种数据结构,如 string(字符串)、 list(双向链表)、dict(hash表)、set(集合)、zset(排序set)、hyperloglog(基数估算)

   支持持久化操作,可以进行aof及rdb数据持久化到磁盘,从而进行数据备份或数据恢复等操作,较好的防止数据丢失的手段。

   支持通过Replication进行数据复制,通过master-slave机制,可以实时进行数据的同步复制,支持多级复制和增量复制,master-slave机制是Redis进行HA的重要手段。

   单线程请求,所有命令串行执行,并发情况下不需要考虑数据一致性问题。

   支持pub/sub消息订阅机制,可以用来进行消息订阅与通知。

   支持简单的事务需求,但业界使用场景很少,并不成熟。


   Redis的局限性:

   Redis只能使用单线程,性能受限于CPU性能,故单实例CPU最高才可能达到5-6wQPS每秒(取决于数据结构,数据大小以及服务器硬件性能,日常环境中QPS高峰大约在1-2w左右)。

   支持简单的事务需求,但业界使用场景很少,并不成熟,既是优点也是缺点。

   Redis在string类型上会消耗较多内存,可以使用dict(hash表)压缩存储以降低内存耗用。


   Mogodb

   mogodb是一种文档性的数据库。先解释一下文档的数据库,即可以存放xml、json、bson类型系那个的数据。这些数据具备自述性(self-describing),呈现分层的树状数据结构。redis可以用hash存放简单关系型数据。

   mogodb存放json格式数据。

   适合场景:事件记录、内容管理或者博客平台,比如评论系统。


3、Redis两种保存快照的方式是什么?他们有什么区别?

   快照模式和AOF模式

   快照模式:将数据保存在内存中,再保存到磁盘中,性能高,但是可能会有少量数据丢失

   AOF模式:性能差,一致性要求高,可以选用这种方法,一般生产环境两种都开

   

4、什么是主健?什么是外健?什么是索引?索引的优缺点是什么?

   主健:主关键字(主键,primary key)是被挑选出来,作表的行的惟一标识的候选关键字。一个表只有一个主关    键字。主关键字又可以称为主键。 主键可以由一个字段,也可以由多个字段组成,分别成为单字段主键或多字段主键。 

   外健:表的外键就是 这个字段 是关联着别的表,且是别的表的主键。

   索引:相当于书中的目录 

   优点:加快查询表记录的速度

   缺点:会减慢对表记录的写(insert upadate delete)的速度

   索引会占用物理磁盘空间

   db.frm 保存表结构

   db.MYD 保存表里数据

   db.MYI 保存索引信息文件


5、主健、外健的作用是什么?并说明主健特点?

   主健作用:1)保证实体的完整性; 

             2)加快数据库的操作速度 

             3)在表中添加新记录时,ACCESS会自动检查新记录的主键值,不允许该值与其他记录的主键值重复。 

             4) ACCESS自动按主键值的顺序显示表中的记录。如果没有定义主键,则按输入记录的顺序显示表中的记录。 

       特点 :

             1) 一个表中只能有一个主键。如果在其他字段上建立主键,则原来的主键就会取消。在ACCESS中,虽然主键不是必需的,但最好为每个表都设置一个主键。 

             2)主键的值不可重复,也不可为空(NULL)。

   外健作用: 使两张表形成关联,外键只能引用外表中的列的值! 


6、什么是存储引擎?         

   MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。

   通过选择不同的技术,  你能够获得额外的速度或者功能,从而改善你的应用的整体功能。

   

7、指出MySQL引擎中Innodb与MyIsam的区别,生产环境中怎么选用存储引擎?        

   InnoDB: 支持行锁,支持事务,支持外健,批量插入速度慢,内存使用高,空间使用高,数据可压缩,独享表空间

   MyISAM:支持表锁,不支持事务,不支持外健,批量插入速度快,内存使用低,空间使用低,数据不可压缩,共享表空间

   在一般的既有读又有写的业务中,建议选用Innodb引擎。

   只有读没有写的业务就用MyIsam引擎


8、什么是幻读?什么是脏读?什么是不可重复读?

   幻读:是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改这种修改涉及到表中的全部数据行。同时第二个事务也修改这个表中的数据

         这种修改是向表中插入一行新数据。那么以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。

   脏读:脏读就是指当一个事务正在访问数据并且对数据进行了修改而这种修改还没有提交到数据库中,这时另外一个事务也访问这个数据,然后使用了这个数据,实际这个数据并没有提交还不能正常使用

   不可重复读:是指在一个事务内多次读同一数据。在这个事务还没有结束时另外一个事务也访问该同一数据。那么在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样在一个事务内两次读到的数据是不一样的因此称为是不可重复读。 


9、什么是事务?什么是回滚?

   事务:你的一次sql操作从开始执行到正确执行结速的这个过程称为事务

   事务回滚:恢复到未操作一切动作前的状态


10、事务隔离的四种级别是哪四种?分别代表什么意思?

    未提交读(read uncommitted):会出现脏读、不可重复读和幻读。

    提交读(read committed):会出现不可重复读和幻读。

    重复读(repeatable read):会出现幻读。

    串行化(serializable):隔离级别最高,不允许出现脏读、不可重复读和幻读。


11、事务有几大特性?分别代表什么意思?

    事务具有四个特征:原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持续性( Durability )。这四个特性简称为 ACID 特性。

    原子性: 事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做 

    一致性: 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统 运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是 不一致的状态。 

    隔离性:一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。 

    持续性:也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响


12、数据库默认的三个库是什么库?分别代表什么意思?

    information_schema: 主要存储系统中的一些数据库对像信息,如用户信息,列信息,权限信息,字符集信息和分区信息等

    performance_schema: 主要存储数据库服务器性能参数

    mysql:主要存储系统的用户权限信息

    test:该数据库为MySQL数据库管理系统自动创建的测试数据库,任何用户都可以使用


13、MySQL锁粒度是什么?MySQL有几种锁级别?说一下他的特性?

    就是通常我们所说的锁级别。

    MySQL有三种锁的级别:页级、表级、行级。

    MySQL这3种锁的特性可大致归纳如下:

    表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。

    行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

    页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般


14、说一下数据库的几种备份方式和包启的意思?

    冷备(cold backup):需要关mysql服务,读写请求均不允许状态下进行;

    温备(warm backup): 服务在线,但仅支持读请求,不允许写请求;

    热备(hot backup):备份的同时,业务不受影响。


15、简述如何搭建主从数据库以及工作模式?

搭建:1、主数据库修改my.cnf配置文件,打开log-bin功能,设置server-id,重启服务

     2、在主服务器上授权服户可以从 从服务器 上连接自已,且有拷贝数据的权限

     3、从服务器上修改my.cnf文件,设置server-id,重启服务

     4、在从服务器上使用授权用户测试是否能连接登陆主数据库服务器

     5、从服务器上建立同步账户信息


工作模式:从服务器的IO线程连接主数据库的IO线程,并从主服务器获取二进制日志,保存为本地的中继日志,

 接着通过SQL线程执行中继日志里面的SQL语句,从而使主从库保持一致

    

16、主从数据库不能同步怎么办?

     1、通过跳过错误来继续执行同步,适用于对数据一致性不是那么高的情况下

        set global sql_slave_skip_counter =1;

     2、重新做主从,完全同步

        该方法适用于主从库数据相差较大,或者要求数据完全统一的情况

        热备方式修复主从库

        操作过程

        1)先关闭从数据库

        2)记录主库的log_file文件名和位置点

        3)导出主库的数据库,拷贝到从库机器上

        4)从库删除以前的老库,导进从主库拷贝过来的新库

        5)changes主库的Log_file和位置点

        6)开启从库


17、怎么清理数据库碎片?

    查看哪个表空间最占用空间

    对大表进行move

   

18、MariaDB集群的功能和优势是什么?

    功能:

    同步复制

    真正的multi-master,即所有节点可以同时读写数据库  

    自动的节点成员控制,失效节点自动被清除

    新节点加入数据自动复制

    真正的并行复制,行级

    用户可以直接连接集群,使用感受上与MySQL完全一致

    优势:

    因为是多主,所以不存在Slave lag(延迟)

    不存在丢失交易的情况

    同时具有读和写的扩展能力

    更小的客户端延迟

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
3月前
|
缓存 监控 Linux
在Linux中,如何进行数据库调优?
在Linux中,如何进行数据库调优?
|
5天前
|
运维 监控 网络协议
|
1天前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
22 3
|
17天前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
24 1
|
3月前
|
关系型数据库 MySQL Linux
在Linux中,如何配置数据库服务器(如MySQL或PostgreSQL)?
在Linux中,如何配置数据库服务器(如MySQL或PostgreSQL)?
|
3月前
|
SQL 关系型数据库 MySQL
在Linux中,如何备份和恢复MySQL数据库?
在Linux中,如何备份和恢复MySQL数据库?
|
3月前
|
存储 前端开发 关系型数据库
Linux 技术架构:前端、后端与数据库的完美融合
【8月更文挑战第25天】本文深入剖析了Linux操作系统的技术架构,重点介绍了前端、后端及数据库三大核心组成部分。Linux前端技术不仅涵盖了图形用户界面(GUI),包括GNOME、KDE等桌面环境,还涉及HTML、CSS、JavaScript等Web前端技术及其相关框架。后端技术则聚焦于Python、Java等多种编程语言、Apache和Nginx等Web服务器以及MySQL、PostgreSQL等数据库管理系统。Linux数据库技术覆盖了关系型和非关系型数据库,如MySQL、MongoDB等,并提供了多种数据库管理工具。
84 0
|
3月前
|
缓存 监控 Linux
在Linux中,如何进行数据库性能调优?
在Linux中,如何进行数据库性能调优?
|
3月前
|
存储 监控 关系型数据库
在Linux中,如何设计一个高可用数据库系统?
在Linux中,如何设计一个高可用数据库系统?
|
3月前
|
关系型数据库 MySQL Linux
在Linux中,如何备份一个数据库?
在Linux中,如何备份一个数据库?