Linux运维面试题(三)之数据库管理

Linux运维面试题(三)之数据库管理

  • 1. SQL语句
  • 2.集群
    • 主从服务器原理
    • 主从故障切换
    • 单台Mysql达到性能瓶颈时,如何处理
  • 3.索引(软优化)
    • 什么是索引
    • 索引的分类
    • 劣势(优点:效率和减少数据表内排序和随机查询——>顺序查询(已经过排序和去重(合并)))
    • 什么时候需要创建索引
    • 什么时候不需要创建索引
    • 误操作drop语句导致数据库数据破坏,请给出恢复的实际大体步骤
  • 4.Redis
    • 工作原理
    • redis持久化-RDB
    • 如何利用redis对mysql进行性能优化
      • 主主服务器(分摊写压力)
      • 主主备份方式(主主从模式)
      • Amoeba模式
      • Amoeba的配置
      • Redis的处理方式(做交集)
      • Redis和mysql模式

1. SQL语句

  • Linux运维面试题(三)之数据库管理_第1张图片
  • Linux运维面试题(三)之数据库管理_第2张图片
  • count(*)返回指定匹配条件的行数,like匹配李
  • order by排序方式,desc降序
  • limit2取前两行
  • Linux运维面试题(三)之数据库管理_第3张图片
  • Linux运维面试题(三)之数据库管理_第4张图片
  • @后登陆数据库的方式,本地登陆(localhost)、远程登录(具体、泛指@),密码
  • 声明两个字段,并对类型做约束。name字符串长度不能超过30
  • 往字段的某一位置插入哪些值
  • Linux运维面试题(三)之数据库管理_第5张图片
  • 2.3.停止服务、提前备份
  • Linux运维面试题(三)之数据库管理_第6张图片
  • 查看,改变字段类型,查看表的结构信息
  • Linux运维面试题(三)之数据库管理_第7张图片
  • 字段类型
  • Linux运维面试题(三)之数据库管理_第8张图片
  • Linux运维面试题(三)之数据库管理_第9张图片
  • 但凡指定用户,必须指明用户类型;授权用户所有权限给at管理aa表的al字段
    Linux运维面试题(三)之数据库管理_第10张图片

2.集群

  • (1)MYSQL 一主多从,主库宕机,如何合理切换到从库,其他从库如何处理?

主从服务器原理

Linux运维面试题(三)之数据库管理_第11张图片
技术点:bin-log二进制日志
开启主服务器的bin-log日志记录(数据增删改授权等,对数据库进行数据修改)功能,将主服务器的bin-log日志传到从服务器,从服务器根据日志内容(均执行一遍)将数据还原到本地。
主从(身份声明,授权允许)服务器:
主服务器负责接收用户的写入和用户的查询,从服务器备份主服务器的数据。
从服务器主动把主服务器上的数据同步到本地(备份备用)

  • 连接线程、解析线程。
  • 一主一从、一主多从

主从故障切换

  • MYSQL一主多从,主库宕机,如何合理切换到从库,其它从库如何处理
  • 登陆所有从库查看post信息,使用POST最大(从主同步的数据更多更完整)的做为新的主库,然后将从库提升为新的主库,登陆从库(新的主库)执行stop slave
    修改my.cnf配置文件,开启bin-log并重新启动数据库服务,登录数据库执行reset master,show master status\G;查看主库信息,最后创建授权同步用户与权限和网站使用数据库的用户与权限,最后修改对应服务器的IP地址等信息
    登录其他从库,执行change master操作,查看同步状态。
  • Linux运维面试题(三)之数据库管理_第12张图片

单台Mysql达到性能瓶颈时,如何处理

  • 数据库代理工具:Amoeba(反向代理、转发中间件)
    Amoeba致力于MySQL的分布式数据库前端代理层,它主要在应用层访问Mysql的时候充当sql路由功能,专注于分布式数据库代理层(Database Proxy)开发。具有负载均衡(分配主从服务器任务分配算法)、高可用性、SQL、过滤、读写分离(主:插入更新,从:查询操作,降低主服务器负载)、可路由相关的到目标数据库、可并发请求多台数据库合并结果。通过Amoeba你能够完成多数据源的高可用、负载均衡、数据切片的功能。
  • 横纵向扩展。纵向扩展:增加配件来提升单台服务器性能;横向扩展:一台——》多台(较好)
  • Linux运维面试题(三)之数据库管理_第13张图片
    Linux运维面试题(三)之数据库管理_第14张图片

3.索引(软优化)

  • MYSQL什么时候创建索引

什么是索引

  • 索引本质是数据结构,(创建好新表)排好序的快速查找数据结构,可以提高查找效率
    (词典目录)
    数据分身之外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是索引

索引的分类

  • 主键索引
  • 单值索引 一个索引只包含单个列,一个表可以有多个单列索引。如果字段会被经常用来检索就可以用单值索引
  • 复合索引 一个索引包含多个列,如电话簿上姓+名字。最好不超过5个字段
  • 唯一索引 所有列的值必须唯一,但是允许有空值
  • 普通索引和唯一索引可以称为辅助索引

劣势(优点:效率和减少数据表内排序和随机查询——>顺序查询(已经过排序和去重(合并)))

  • 实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,索引列也要是占用空间的。
    Linux运维面试题(三)之数据库管理_第15张图片
  • 虽然索引大大提高了查询速度,但是会降低更新表的速度,如对表进行INSERT,UPDATE,DELETE。因为更新表示,Mysql不仅要保存数据,还要保存一下索引文件每次更新添加了索引列的字段,都会调整因为更新所带来的键值变化后的索引信息。
    索引只是提高效率的一个因素,如果Mysql有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询。

什么时候需要创建索引

  • 主键自动建立唯一索引
    频繁作为查询条件的字段应该创建索引
    查询中与其他表关联的字段,外键关系建立索引
    频繁更新的字段不适合创建索引,因为每次更新不单单是更新了记录还会更新索引
    where条件里用不到的字段不创建索引
    单键/组合索引的选择问题,在高并发下倾向创建组合索引
    查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度
    查询中统计或者分组字段(group by)

什么时候不需要创建索引

  • Linux运维面试题(三)之数据库管理_第16张图片

误操作drop语句导致数据库数据破坏,请给出恢复的实际大体步骤

  • 手动切割bin-log日志并记好切割好的bin-log日志文件位置,这里假设为009,备份全部bin-log日志
  • 找到之前全备份数据最后备份到的bin-log文件位置并记好位置,这里假设为005
  • 用mysqladmin命令将005到008bin-log文件中的SQL语句分离出来,并找到drop库的语句将其删掉
  • 将之前全备数据导入mysql服务器(005+(005-008)+009)
  • 将步骤3中分离出的SQL语句导入mysql服务器
  • 将009bin-log文件删除,再次刷新bin-log日志,到此数据库已恢复成功

4.Redis

  • 如何保证Redis能永久保存数据(持久化)

工作原理

  • Redis是一个key-value存储系统,它支持的value类型相对较多,包括string、list、set和zset,这些数据都支持push/pop/add/remove及交并补等操作,而且这些操作都是原子性的,在此基础上,redis支持各种不同方式的排序。为了保证效率,数据是缓存在内存中的,redis会周期性的把数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave同步。
  • 与mysql的库表结构不一样
  • 原子性,总核不变,事件修改完整
    Linux运维面试题(三)之数据库管理_第17张图片
  • 回滚,红递明未接,拿回,保证原子性。
  • 主从备份,保障完整性。

redis持久化-RDB

  • 在Redis运行时,RDB程序将当前内存中的数据库快照保存到磁盘中,当redis需要重启时,RDB程序会通过重载RDB文件来还原数据库。
    Linux运维面试题(三)之数据库管理_第18张图片
  • Linux运维面试题(三)之数据库管理_第19张图片
  • AOF——>mysql的bin-log
  • Linux运维面试题(三)之数据库管理_第20张图片
    Linux运维面试题(三)之数据库管理_第21张图片
    Linux运维面试题(三)之数据库管理_第22张图片
  • 对数据进行修改时的操作,避免记录对数据进行重复修改的操作(覆盖式,保留最新一次)。

如何利用redis对mysql进行性能优化

  • 互补关系
  • Linux运维面试题(三)之数据库管理_第23张图片
  • if语句是否有符合相应条件的语句,Redis没有则向Amoeba发送请求,由于Amoeba是关系型数据库的代理服务器,A发起查询操作,找到结果后,A将结果返回给用户并向redis插入一份,并设置TTL值——有效时间值:redis用来做mysql的缓存,原始关系数据库更新,若无更新,用户优先查缓存而查不到原始数据,以此使缓存和关系数据库数据保持一致性。
  • Linux运维面试题(三)之数据库管理_第24张图片

主主服务器(分摊写压力)

  • Linux运维面试题(三)之数据库管理_第25张图片

主主备份方式(主主从模式)

  • Linux运维面试题(三)之数据库管理_第26张图片
  • 在同一个设备启用两个不同的mysql程序

Amoeba模式

Linux运维面试题(三)之数据库管理_第27张图片

Amoeba的配置

  • Linux运维面试题(三)之数据库管理_第28张图片
  • 上为A信息,下为连接的资源池信息

Redis的处理方式(做交集)

  • Linux运维面试题(三)之数据库管理_第29张图片

Redis和mysql模式

  • Linux运维面试题(三)之数据库管理_第30张图片
  • Linux运维面试题(三)之数据库管理_第31张图片

你可能感兴趣的:(面试八股文,运维,linux,数据库)