之前简单总结了一下MySQL的场景面试知识点

1.讲下MVCC原理
2.MySQL高可用架构介绍
3.OSC(在线更改表结构)原理
4.MySQL性能调优有哪些关键点/经验
5.MySQL在线备份方案,Xtrabackup原理
6.MySQL监控有哪些指标
7.如何在线迁移MySQL
8.MySQL 5.7有哪些新特性/功能
9.Update t1 set c1=v1 where id=123; id是普通索引,该操作,会加哪些锁?
10.空隙锁是解决什么问题的?
11.服务器参数调优,有哪些关键点
12.了解哪些中间件,对LVS,MHA的理解
13.运维MySQL主从复制集群中,遇到过哪些问题,如何解决?
14.运维MySQL过程中,遇到过什么重大故障,如何处理的?
15. 数据库监控自动化方案
16. innodb_autoinc_lock_mode#自增锁进发怎么设?设哪个参数,值多少,为什么?

1 mvcc

mysql数据库的多版本并发控制,对innodb引擎的表实现一致性的非锁定行读,如果读取当前的数据正在进行
dml操作,读取操作不会等待行锁,innodb进行一个快照读,快照的版本是事务开始之前的版本,通过innodb的
undo来实现,不同事务隔离级别,事务快照定义不一样。每一行存储版本号,每一个事务都会保存理解的版本号,
依照事务的版本来检查每行的版本。

2 mysql高可用架构

 a 双主keepalived,master-master,通过keepalived提供一个虚拟ip,并提供心跳检测脚本(ka_check_mysql.sh)
,如果脚本检测mysql失效, 则将该主机剔除keepalived
b mha,manager节点,多个node,1个master,多个slave,mha可以进行自动切换,手工切换,由于mha可以保证
多个日志进行合并,日志比对,将数据丢失到最小
c lvs+keepalived+slave slave负载均衡  
d pxc

由于这个总结于2016年,现在应该加上MGR

3 osc在线更改表结构

 mysql原生的在线ddl,copy和inplace
--add index:copy,新建带index的表,锁原表,禁止dml,允许select,将原表数据拷贝到临时表,禁止读写,进行rename,升级字典锁,完成创建index操作
--add index(second index): inplace,创建索引数据字典,加共享锁,禁止dml,允许select,读取聚簇索引,构造新的索引项,排序并插入新索引
等待打开当前表的所有只读事务提交,创建结束
第三方工具进行在线ddl,OAK,pt-online-ddl
--oak,检查表是否符合oak-online-alter-table,没有fk,trigger,online ddl,数据一致性校验,表切换,rename,删除触发器
--pt

4 mysql性能调优

 --mysql 参数,
--innodb_buffer_pool_size
--innodb_thread_concurrency
--innodb_io_capacity
--innodb_flush_method
--innodb_flush_log_at_trx_commit
--sync_binlog

5 mysql在线备份方案,xtrabackup

   a mysqldump,在线逻辑备份,导出成create,insert格式
b xtrabackup,innobackupex 在线物理备份,以read-write模式打开innodb的数据文件,
每次读写1mb的数据,一页一页的遍历,由于不锁表,所以复制出来的数据不一致,对于
myisam表,必须先锁表,然后复制文件
--启动后台检测,实时检测mysql redo的变化,一旦redo写入,立刻将日志写入日志xtrabackup_log中
--复制innodb的数据问候和系统表空间文件
--复制结束,执行flush table with read lock
--复制frm,myd,myi等文件
--这一刻获得binary log的位置
--unlock tables
InnoDB 维护了一个 redo log,又称为 transaction log,事务日志,它包含了 innodb 数据
的所有改动情况。当 InnoDB 启动的时候,它会先去检查 data file 和 transaction log,并且会
做二步操作:
1.It applies committed transaction log entries to the data files
2.it performs an undo operation on any transactions that modified data but did not commit.

6 mysql监控指标

  zabbix监控mysql,指标
--cpu,processor load,memory,swap
--qps,tps,mysqld
--slave_io_running,slave_sql_running

7 在线迁移mysql

    a 通过master-slave在线迁移,手动迁移
b 通过mha,手工切换
c pt-archive

8 5.7新特性,功能

   a 安全性,初始化后没有密码为null的,密码修改策略,锁住用户等
b 对json格式支持
CREATE TABLE t_jeson (jdoc JSON);
insert into t_jeson VALUES('{"key1": "value1", "key2": "value2"}');
c generate column
CREATE TABLE triangle (sidea DOUBLE, sideb DOUBLE, area DOUBLE AS (sidea * sideb / 2));
d 引入sys schema,系统库,包含一些视图,函数和过程
e 在线开启GTID

9.Update t1 set c1=v1 where id=123; id是普通索引,该操作,会加哪些锁

   a innodb表,RR模式下,首先通过id索引定位到第一条满足查询的记录,记录上加X锁,加GAP的gap锁,然后加聚簇索引记录上的x锁,然后返回
,然后读取下一条,重复进行,直至进行到第一条不满足条件的记录,此时不需要加x锁,仍需要加gap锁。
b inndob表,RC模式下,对应所有满足sql查询条件的记录,都会被加锁,同时,这些记录在主键索引上的记录,也会被加锁  

关于锁这一块,可以详细看一下mysql 45讲里面的锁讲解

10.空隙锁是解决什么问题的?

在RR模式下,innodb为了解决幻读,产生了gap锁 ,在同一个事务,连续两次当前读,返回的完全相同的记录。

11.服务器参数调优,有哪些关键点

	1 os系统选择,redhat,centos,suse
2 关闭swap,vm.swappiness=10
3 单实例mysql,关闭NUMA,os内核中设置,启动mysql时候关闭该参数
4 做双网卡,bond0,调整网络参数
5 磁盘调度设置
6 文件系统 推荐xfs/ext4 ,noatime,nobarrier

12.了解哪些中间件,对LVS,MHA的理解

   a mycat 中间件,可实现读写分离,主从自动切换,主要在分库分表
b lvs 负载均衡,dr模式,选择路由方式,负责工作转派
c mha 高可用架构,manager节点负责管理node,可用进行failover和手动切换主备库
d dble
e sharding-JDBC

13.运维MySQL主从复制集群中,遇到过哪些问题,如何解决?

   集群问题:
1 从库报错:1062
stop slave;
delete from t1 where ename='robin';
start slave;
2 1032
stop slave sql_thread;
insert into t1 values(1,'linuxidc','http://www.linuxidc.com/linuxidc');
start slave sql_thread;
3 从库找不到对应的被删除的记录(Errno: 1032)
stop slave sql_thread;
set gtid_next='1b64c25d-8d2b-11e6-9ac0-000c29b82d0d:92';
begin;commit;
set gtid_next='AUTOMATIC';
start slave sql_thread;
4 主库binlog被purge的情形(Errno: 1236)
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log:

14.运维MySQL过程中,遇到过什么重大故障,如何处理的?

15. 数据库监控自动化方案

16. innodb_autoinc_lock_mode#自增锁进发怎么设?设哪个参数,值多少,为什么?

  插入类型
insert-like=insert,replace,insert...select,replace...select,load data
simple inserts=insert,replacce
bulk inserts=insert...select,replace..select,load data
mixed-mode inserts=insert into t1(c1,c2) values (1,'a'),(null,'b'),(5,'b'),(null,'d')
innodb_autoinc_lock_mode=0,1,2
1 默认值,对于simple inserts只用互斥量对内存中的计算器进行累加,对于bulk inserts,还是传统
的auto-inc locking的方式,不考虑rollback,自增长还是连续的。
如果使用auto-inc locking方式产生自增长的值,进行simple inserts时,需要等待auto-inc locking的释放
2 所有的insert-like,自增长值的产生都是通过互斥两,而不是auto-inc locking方式,性能最高
并发插入,每次插入,自增长的值可能不连续,使用该模式,主从要用row-base replication,保证
最大的并发性能及复制中的主从数据的一致  

上面大部分都偏一点理论知识的理解,其实还有很多的知识点没有列举

在有的时候,面试官会比较关心:集群规模,业务数据量,业务类型等实际的问题

MySQL 常见面试知识点的更多相关文章

  1. Java集合类常见面试知识点总结

    微信公众号[Java技术江湖]一位阿里Java工程师的技术小站 Java集合类学习总结 这篇总结是基于之前博客内容的一个整理和回顾. 这里先简单地总结一下,更多详细内容请参考我的专栏:深入浅出Java ...

  2. 设计模式常见面试知识点总结(Java版)

    设计模式 这篇总结主要是基于我设计模式系列的文章而形成的的.主要是把重要的知识点用自己的话说了一遍,可能会有一些错误,还望见谅和指点.谢谢 更多详细内容可以到我的cdsn博客上查看: https:// ...

  3. mysql常见面试题目

    1, mysql的复制原理以及流程. (1)先问基本原理流程,3个线程以及之间的关联. (2)再问一致性,延时性,数据恢复. (3)再问各种工作遇到的复制bug的解决方法 2,mysql中myisam ...

  4. 知名互联网公司校招 Java 开发岗面试知识点解析

    天之道,损有余而补不足,是故虚胜实,不足胜有余. 本文作者在一年之内参加过多场面试,应聘岗位均为 Java 开发方向.在不断的面试中,分类总结了 Java 开发岗位面试中的一些知识点. 主要包括以下几 ...

  5. [ Java面试题 ]Java 开发岗面试知识点解析

    如背景中介绍,作者在一年之内参加过多场面试,应聘岗位均为 Java 开发方向. 在不断的面试中,分类总结了 Java 开发岗位面试中的一些知识点. 主要包括以下几个部分: Java 基础知识点 Jav ...

  6. Java开发岗面试知识点解析

    本文作者参加过多场面试,应聘岗位均为 Java 开发方向.在不断的面试中,分类总结了 Java 开发岗位面试中的一些知识点. 主要包括以下几个部分: Java 基础知识点 Java 常见集合 高并发编 ...

  7. Java 开发岗面试知识点

    本文作者在一年之内参加过多场面试,应聘岗位均为 Java 开发方向.在不断的面试中,分类总结了 Java 开发岗位面试中的一些知识点. 主要包括以下几个部分: Java 基础知识点 Java 常见集合 ...

  8. mysql常见知识点总结

    mysql常见知识点总结 参考: http://www.cnblogs.com/hongfei/archive/2012/10/20/2732516.html https://www.cnblogs. ...

  9. Java 面试知识点解析(六)——数据库篇

    前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...

随机推荐

  1. hdu2159 二维02bag

    设f[i][j]为杀第j只怪时耐久度为i的最大经验值 完全背包类型:有N种物品和一个容量为V 的背包,每种物品都有无限件可用.放入第i种物品的耗费的空间是Ci,得到的价值是Wi. 求解:将哪些物品装入 ...

  2. P1801 黑匣子[对顶堆]

    没错我就是专门找对顶堆练习题的.现在感觉对顶堆使用面有点狭窄.这道题由于我询问是随时间单调增的,而且数据比较友好,应该是插入几次就询问一下的.而中位数那题也是经常询问的.如果查询的东西不单调,或者查询 ...

  3. ssh转发流量的四种姿势

    在很多时候拿到了内网的一台主机,我们需要用它做跳板来对内网进一步扩大战果. 也许方法很多,meterpreter,nc等等.但是最方便也最有可能穿透防火墙的方法,就是用ssh. 分为四种类型: 本地转 ...

  4. TCP下的套接字服务端实现并发 作业题

    # 服务端 import socket from threading import Thread """ 服务端 1.要有固定的IP和PORT 2.24小时不间断提供服务 ...

  5. electron-vue 引入 vue.ant.design报错

    ERROR in ./node_modules/ant-design-vue/dist/antd.less (./node_modules/css-loader!./node_modules/less ...

  6. Javascript兼容各浏览器的日期转换

    var date = new Date(Date.parse("2015-09-05".replace(/-/g,"/")));'2015-09-05'是无法被 ...

  7. 51 Nod 阶乘后面0的数量

    1003 阶乘后面0的数量  基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 n的阶乘后面有多少个0? 6的阶乘 = 1*2*3*4*5*6 = 72 ...

  8. vue路由 routers的写法:require用与不用

    vue路由的写法有很多种,这里我只说routers的写法,一种是compcomponent后面直接写路径,另一种是用require的方式,来看代码 import Vue from 'vue' impo ...

  9. JavaWeb_(SSH论坛)_四、页面显示

    基于SSH框架的小型论坛项目 一.项目入门 传送门 二.框架整合 传送门 三.用户模块 传送门 四.页面显示 传送门 五.帖子模块 传送门 六.点赞模块 传送门 七.辅助模块 传送门 帖子表与回复表 ...

  10. python学习之路(21)

    偏函数 Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function).要注意,这里的偏函数和数学意义上的偏函数不一样. 在介绍函数参数的时候,我们讲 ...