Question1:
你现阶段接触的mysql版本是什么?除开官方版本,还接触过别的的mysql分支版本嘛?
造成分支的缘故
很多开发者觉得必须将其拆分为别的新项目,而且每一个分支新项目都是有自身的特长。该要求及其Oracle对关键商品增长迟缓的忧虑,造成 出現了很多开发者很感兴趣的子项和分支
三个时兴MySQL分支:Drizzle、MariaDB和PerconaServer(包含XtraDB模块)
MariaDB不但是mysql的代替品,关键還是自主创新和提升mysql已有技术性。
新功能介绍
multi-sourcereplication多源拷贝
表的并行复制
galeracluster群集
spider水准分块
tokuDB储存模块
XtraDB是innodb储存模块的增强版,能用来能够更好地充分发挥全新的计算机系统系统软件性能,还包括在高性能方式下的新特点。它能够 兼容问题,因为它是在innodb基本上搭建,因此 他有大量的指标值和拓展作用。并且它在cpu多核的标准下,能够 能够更好地应用运行内存,时数据库性能提及高些!
Drizzle与mysql的区别就较为变大,而且不可以适配,假如想运作此自然环境,就必须重新写过一些编码了!
Question2:
mysql关键的储存模块myisam和innodb的不同点?
事务管理的适用不一样(innodb适用事务管理,myisam不兼容事务管理)
锁粒度分布(innodb行锁运用,myisam表锁)
储存空间(innodb既缓存文件索引文档又缓存数据文档,myisam只有缓存文件索引文档)
存储结构
(myisam:数据库文件的拓展名叫.MYDmyData,索引文档的后缀名是.MYImyIndex)
(innodb:全部的表都储存在同一个数据库文件里边即是.Ibd)
5.统计分析记录个数
(myisam:储存有表的总公司数,selectcount(*)fromtable;会立即取下出该值)
(innodb:沒有储存表的总公司数,selectcount(*)fromtable;就会解析xml全部表,耗费非常大)
Question3:
Innodb的系统架构简易介绍一下?
谈起到innodb的系统架构,最先要考虑到mysql的系统架构,分成两一部分mysql的server层和储存模块层
需先跟招聘者聊清晰mysql的总体方位,随后再去涉及到innodb系统架构
提议从三层面详细介绍innodb系统架构:运行内存----进程-----硬盘
运行内存中包括insert_buffer,data_buffer,index_buffer,redo_log_buffer,double_write
运行内存更新到硬盘的体制,redo,脏页,binlog的更新标准
各种各样进程的功效,master_thread,purge_thread,redologthread,readthread,writethread,pagecleanerthread
硬盘中储放着数据库文件,redolog,undolog,binlog
Question4:
mysql有什么索引种类:
算法设计视角上能够 分:B+tree索引,hash索引,fulltext索引(innodb,myisam都适用)
储存视角上能够 分:集聚索引,非集聚索引
逻辑性视角上能够 分:primarykey,normalkey,列项,复合型,遮盖索引
Question5:
mysqlbinlog有几种文件格式:
1.statement
优势:不用记录每一行的转变,降低了binlog日志量,节省了IO,提升性能
缺陷:当应用一些特殊函数的情况下,或是跨库实际操作的情况下非常容易遗失数据
注:在生产制造中不建议应用
2.row
优势:清楚记录每列的数据信息,不容易出現跨库丢数据的状况
缺陷:內容当记录到日志中的情况下,都将以每列记录的改动来记录,但就会造成很多的binlog,针对互联网花销也较为大
注:生产制造中强烈推荐应用
3.mixed
是mysql5.1的情况下,一个衔接版本,DDL句子会记录成statement,DML会记录row。
注:生产制造中不建议应用
今年Java数据库笔试题全集
Qusetion6:
mysql主从复制的实际基本原理是什么?
主网络服务器把数据升级记录到二进制日志中,从服务器根据iothread向主库进行binlog要求,主网络服务器根据IOdumpthread把二进制日志传送给从库,从库根据iothread记录到自身的无线中继日志中。随后再根据sqlthread运用无线中继日志中sql的內容。
Qusetion7:
数据库中双一是什么?
sync_binlog=1
innodb_flush_log_at_trx_commit=1
innodb_flush_log_at_trx_commit和sync_binlog2个主要参数是操纵MySQL硬盘写入对策及其数据安全系数的重要主要参数
innodb_flush_log_at_trx_commit设定为1,每一次事务管理递交时MySQL都是会把logbuffer的数据写入logfile,而且刷出硬盘中去。
sync_binlog=N(N>0),MySQL在每写N次二进制日志binarylog时,会应用fdatasync()涵数将它的写二进制日志binarylog同歩到硬盘中去
Qusetion8:
怎样监管mysqlreplication拷贝延迟时间?
能够 根据第三方专用工具业内中的法国×××percona-toolkit中的指令,pt-heartbeat开展主从关系延迟时间监管。
传统式方式 ,根据较为主从关系集群服务器的position号的差别值。
还能够根据查询seconds_behind_master估计一下主从关系时间延迟
Qusetion9:
大表DDL句子,怎样执行,才可以把性能危害降至最少?
能够 根据传统式方式 导入导出数据,在建一张与原表一样的表构造,把必须实行的ddl语句在无数据的新表实行,随后把老表中的数据导到新表中,把新表改为老表的姓名
根据第三方专用工具业内中的法国×××percona-toolkit中的指令,pt-online-schema-change开展线上实际操作
针对新版本的mysql(5.7)能够 立即线上onlineddl
Qusetion10:
为何要为innodb表设定自增列做主键?
1.应用自增列做主键,写入顺序是自增的,和B+数叶子节点瓦解顺序一致
2.表不指定自增列做主键,同时也没有能够 被选为主键的唯一索引,InnoDB就会选择内置的rowid做为主键,写入顺序和rowid增长顺序一致
因此 InnoDB表的数据写入顺序能和B+树索引的叶子节点顺序一致的