面试总结06(有关数据库类的面试总结)

面试总结06(有关数据库类的面试总结)

一.引子

笔者使用过的数据库只有两种,mysql数据库和redis数据库。所以面试中也遇到了比较多的面试官询问有关Mysql和redis数据库的问题,这边做一个总结。

二.mysql数据库常见问题

1.mysql数据库的常用命令
笔者准备写一篇文章重点整理mysql的常用命令,希望对大家有帮助
2.mysql限制连接数及
my.cnf文件:max_connections = 10
my.cnf文件:mysqld --skip-grant-tables
3.mysql数据库的优化
(1).架构优化:主从读写分离,减轻压力
(2).硬件优化:使用性能更好的硬件和数据库
(3).创建索引:
(4).sql语句优化:适当的字符使用适当的数据类型,没有数据以空字符代替
(5).分库分表
(6).开启慢日志
(7).预处理:将要用的数据放在缓存里,做crontab预处理
4.mysql主键,外键和索引的区别
主键:此表唯一
外键:可以多个,他表某行数据是此表的外键
索引:可以多个,此表做索引提高查询效率
5.mysql主从同步原理
(1).主库将基本信息发给从库
(2).从库开启SQL线程和IO线程,主库binlog文件发生改变,从库通过IO线程读取binlog文件添加到relaylog文件中,通过sql线程读取relaylog内容,将主库更新的事务写入从节点db库中
6.mysql有一张表我如何提取出第二第三列

7.mysql事务类型

扁平事务(Flat Transactions)
带有保存点的扁平事务(Flat Transactions with Savepoints)
链事务(Chained Transactions)
嵌套事务(Nested Transactions)
分布式事务(Distributed Transactions)

8.MySQL主键innodb与Myism的区别
(1).InnoDB支持事务,MyISAM不支持
(2).InnoDB适合频繁修改以及涉及到安全性较高的应用,、MyISAM适合查询以及插入为主的应用
(3).InnoDB支持外键,MyISAM不支持
(4).InnoDB支持行锁,myISAM不支持行级锁页级锁
(5).InnoDb需要指定,myISAM是默认主键
(6).InnoDB不支持FULLTEXT类型的索引
(7)InnoDB中不保存表的行数,如select count() from table时,InnoDB需要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count()语句包含where条件时MyISAM也需要扫描整个表
(8)对于自增长的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中可以和其他字段一起建立联合索引
(9)清空整个表时,InnoDB是一行一行的删除,效率非常慢。MyISAM则会重建表

9.mysqlCPU突然飙升到500%

(1) 当 cpu 飙升到 500%时,先用操作系统命令 top 命令观察是不是 mysqld 占用导致的
(2)找出占用高的进程,并进行相关处理。如果是 mysqld 造成的, show processlist,看看里面跑的 session 情况,是不是有消耗资源的 sql 在运行。
(3)找出消耗高的 sql,看看执行计划是否准确, index 是否缺失,或者实在是数据量太大造成。 kill 掉这些线程(同时观察 cpu 使用率是否下降),等进行相应的调整(比如说加索引、改 sql、改内存参数)之后,再重新跑这些 SQL。也有可能是每个 sql 消耗资源并不多,但是突然之间3
(4)有大量的 session 连进来导致 cpu 飙升,这种情况就需要跟应用一起来分析为何连接数会激增,再做出相应的调整,比如说限制连接数等。

10.mysql主从一致性如何查看,服务器宕机如何保障数据一致性
mysql数据库主从一致性验证(pt-table-checksum),pt-table-sync实现主从数据一致性修复
(1).在能连接主从的服务器上下载pt-table-checjsum
(2).主从数据库创建用户
(3).执行命令
连接地址:https://blog.csdn.net/mofiu/article/details/79756586

11.mysql如何规划存储,你们公司以前如何规划Mysql储存
(1).zabbix监控数据库储存
(2).到达警戒线报警
(3).对数据库进行切片操作

12.如何防止sql注入

三.redis数据库常见问题

1.redis-cluster集群如何工作
在redis官方给出的集群方案中,数据的分配是按照槽位来进行分配的,每一个数据的键被哈希函数映射到一个槽位,redis-3.0.0规定一共有16384个槽位,当然这个可以根据用户的喜好进行配置。当用户put或者是get一个数据的时候,首先会查找这个数据对应的槽位是多少,然后查找对应的节点,然后才把数据放入这个节点。这样就做到了把数据均匀的分配到集群中的每一个节点上,从而做到了每一个节点的负载均衡,充分发挥了集群的威力。
在redis中,把一个key-value键值对放入的最简单的方式就是set key value

2.redis支持的字符类型
string,hash,list,set,zset

3.redis主从同步原理
如果设置了一个从服务器,在连接时它发送了一个SYNC命令,不管它是第一次连接还是再次连接都没有关系。
然后主服务器开始后台存储,并且开始缓存新连接进来的修改数据的命令。当后台存储完成后,主服务器把数据文件发送到从服务器,
从服务器将其保存在磁盘上,然后加载到内存中。然后主服务器把刚才缓存的命令发送到从服务器。这是作为命令流来完成的,并且
和Redis协议本身格式相同。

4.redis事务类型
Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:

  • 批量操作在发送 EXEC 命令前被放入队列缓存。
  • 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
  • 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

一个事务从开始到执行会经历以下三个阶段:

  • 开始事务。
  • 命令入队。
  • 执行事务。
    事务命令
mysql:
Begin:显式的开启一个事务
Commit:提交事务,将对数据库进行的所有的修改变成永久性的
Rollback:结束用户的事务,并撤销现在正在进行的未提交的修改
redis:
Multi:标记事务的开始
Exec:执行事务的commands队列
Discard:结束事务,并清除commands队列
默认状态
mysql:
mysql会默认开启一个事务,且缺省设置是自动提交,即每成功执行一次sql,一个事务就会马上commit,所以不能rollback
redis:
redis默认不会开启事务,即command会立即执行,而不会排队,并不支持rollback

5.redis如何做持久化储存

6.redis的热点数据处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值