数据库相关面试考点

一.三大范式

  • 第一范式(确保每列保持原子性)
  • 第二范式(确保表中的每列都和主键相关)
  • 第三范式(确保每列都和主键列直接相关,而不是间接相关)

二.数据库的主从复制
1.什么是主从复制?
主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一般是准实时的业务数据库.
2.主从复制的作用?(实际中干嘛用)
① 做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失.
② 架构的扩展.业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能.
③ 读写分离,使数据库能支撑更大的并发.在报表中尤其重要.由于部分报表sql语句非常慢,导致锁表,影响前台服务.如果前台使用master(主数据库),报表使用slave(从数据库),那么报表sql将不会造成前台锁,保证了前台的速度.
3.主从复制的原理

数据库有个bin-log二进制文件,记录了所有sql语句,我们的目标就是把主数据库的bin-log文件的sql语句复制过来,让其在从数据的relay-log重做日志文件中在执行一次这些sql语句即可.
下面的主从配置就是围绕这个原理配置的,具体操作需要三个线程来配合完成:
- bin-log输出线程: 每当有从库连接到主库的时候.主库就会创建一个线程然后发送bin-log内容到从库.再从库里,当复制开始的时候,从库就会创建两个线程进行处理.
- 从库I/O线程:当START SLAVE 语句在从库开始执行之后,从库创建一个I/O线程,该线程连接到主库并请求主库发送bin-log里面的更新记录到从库上.从库I/O线程读取主库的bin-log输出线程发送的更新并拷贝这些更新到本地文件,其中包括relay-log文件.
- 从库的sql线程:从库创建一个sql线程,这个想成读取从库I/O线程写到relay-log的更新文件并执行.

由此可知,杜宇每一个主从复制的连接,都有三个线程.拥有多个从库的主库为每一个连接到主库的从库创建一个bin-log输出线程,每一个从库都有他自己的I/O线程和sql线程
原理图如下
数据库相关面试考点_第1张图片
原理图2,帮助加深理解:
数据库相关面试考点_第2张图片
步骤一:主库的db的更新事件(update,insert,delete)被写到bin-log
步骤二:从库发起连接,连接主库
步骤三:从库启动之后,创建一个I/O线程,读取主库传过来的bin-log内容并写入到relay-log
步骤五:还会创建一个sql线程,从relay-log里面读取内容,从Exec_Master_log_Pos位置开始执行读取到的更新事件,将更新内容写入到slave的db.
下面整理一些面试题干货(如果闻到数据库主从问题,必问:)
1.主从的好处是?(见上文中)
2.主从的原理是?
数据库相关面试考点_第3张图片

  • I/O线程去请求主库的bin-log,并将得到的bin-log日志写到relay-log(中继日志)文件中;
  • 主库会生成一个log-dump线程,用来给从库I/O线程传送bin-log;
  • sql线程,会去读取relay-log文件中的日志,并解析成具体操作,来实现主从的操作一直,最终实现主从数据一致;

3.从数据库的读的延迟问题了解吗?如何解决?

  • 主机宕机后,数据可能丢失
  • 从库只有一个sql thread 从库写的压力大,复制就很可能延迟
    解决办法:

  • 半同步复制—>解决数据丢失问题

  • 并行复制—>解决从库复制延迟的问题
    • mysql并行复制
      社区版5.6中新增
      并行是指从库多线程apply binlog库级别并行应用binlog,同一个库数据更改还是串行的(5.7版并行复制基于事务组)设置
      设置sql线程数为10
      set global slave_parallel_workers=10;

4.做主从后主服务器挂了怎么办?
看到从服务器这么努力,主服务器深受感动,决定与从服务器来次身份互换,让从服务器过过做主的瘾,同时也能考察下从服务器是否具备做主的能力。身份调换之前,主服务器会对表上锁,保证调换期间,不会写进新的数据。

从服务器先停止从服务器IO线程,此期间,会应用完RelayLog中的所有信息,保证主、从数据完全一致。接下来,主、从服务器都会把自身的Binlog文件清除掉,建立起新的Binlog文件,再将之前两者的交互信息删干净,此时,可以重新建立主从连接了,从服务器俨然成为新一代主服务器,而原主服务器也解开之前的表锁,担起了从服务器的角色,事实证明,这是一次完美的试炼。

一路披荆斩棘的前行,有一天,从服务器的机会终于到来,主服务器宕机了,是时候退位让贤了,这时的从服务器完全有能力承担主服务器的职责, 此刻,我们称其为新的主服务器。一个合格的主服务器要有从服务器搭配才行,我们再给他配个小弟。到这里,一个新的主、从组合诞生,继续维持着系统的平稳运行。

读写分离
● 原理、实现

你可能感兴趣的:(mysql面试干货)