| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> MySQL夺命10问,你能坚持到第几问? -> 正文阅读 |
|
[大数据]MySQL夺命10问,你能坚持到第几问? |
MySQL在面试中经常被问到,本文总结了面试中的经典问题。 1.数据库三大范式是什么? 第一范式:每个列都不可以再拆分。 第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。 第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。 在设计数据库结构的时候,要尽量遵守三范式,如果不遵守,必须有足够的理由。 比如性能。事实上我们经常会为了性能而妥协数据库的设计。 2.mysql有关权限的表都有哪几个? MySQL服务器通过权限表来控制用户对数据库的访问,权限表存放在mysql数据库里,由mysql_install_db脚本初始化。 这些权限表分别是user,db,table_priv,columns_priv和host。 user权限表:记录允许连接到服务器的用户帐号信息,里面的权限是全局级的。 db权限表:记录各个帐号在各个数据库上的操作权限。 table_priv权限表:记录数据表级的操作权限。 columns_priv权限表:记录数据列级的操作权限。 host权限表:配合db权限表对给定主机上的数据库级操作权限作更细致的控制。这个权限表不受GRANT和REVOKE语句的影响。 3.SQL语句主要分为哪几类? ·数据定义语言DDL(Data Ddefinition Language)CREATE,DROP,ALTER 主要为以上操作,即对逻辑结构等有操作的,其中包括表结构,视图和索引。 ·数据查询语言DQL(Data Query Language)SELECT 这个较为好理解,即查询操作,以select关键字。 各种简单查询,连接查询等都属于DQL。 ·数据操纵语言DML(Data Manipulation Language)INSERT,UPDATE,DELETE 主要为以上操作,即对数据进行操作的,对应上面所说的查询操作DQL与DML共同构建了多数初级程序员常用的增删改查操作。查询是较为特殊的一种,被划分到DQL中。 ·数据控制功能DCL(Data Control Language)GRANT,REVOKE,COMMIT,ROLLBACK 主要为以上操作,即对数据库安全性完整性等有操作的,可以简单的理解为权限控制等。 4.什么是死锁?怎么解决? 死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现象。 常见的解决死锁的方法: 如果不同程序会并发存取多个表,尽量约定以相同的顺序访问表,可以大大降低死锁机会; 在同一个事务中,尽可能做到一次锁定所需要的所有资源,减少死锁产生概率; 对于非常容易产生死锁的业务部分,可以尝试使用升级锁定颗粒度,通过表级锁定来减少死锁产生的概率; 如果业务处理不好可以用分布式事务锁或者使用乐观锁。 5.什么是脏读?幻读?不可重复读? 脏读(Drity Read):某个事务已更新一份数据,另一个事务在此时读取了同一份数据,由于某些原因,前一个RollBack了操作,则后一个事务所读取的数据就会是不正确的。 不可重复读(Non-repeatable read):在一个事务的两次查询之中数据不一致,这可能是两次查询过程中间插入了一个事务更新了原有的数据。 幻读(Phantom Read):在一个事务的两次查询中,数据笔数不一致,例如有一个事务查询了几列(Row)数据,而另一个事务却在此时插入了新的几列数据,先前的事务在接下来的查询中,就会发现有几列数据是它先前所没有的。 6.SQL的生命周期? ①应用服务器与数据库服务器建立一个连接 ②数据库进程拿到请求sql ③解析并生成执行计划,执行 ④读取数据到内存并进行逻辑处理 ⑤通过步骤一的连接,发送结果到客户端 ⑥关掉连接,释放资源 7.MySQL数据库cpu飙升到100%的话怎么处理? 当cpu飙升到100%时,先用操作系统命令top命令观察是不是mysqld占用导致的。 如果不是,找出占用高的进程,并进行相关处理。 如果是mysqld造成的,show processlist,看看里面跑的session情况,是不是有消耗资源的sql在运行。找出消耗高的sql,看看执行计划是否准确,index是否缺失,或者实在是数据量太大造成。 一般来说,肯定要kill掉这些线程(同时观察cpu使用率是否下降),等进行相应的调整(比如说加索引、改sql、改内存参数)之后,再重新跑这些SQL。 也有可能是每个sql消耗资源并不多,但是突然之间,有大量的session连进来导致cpu飙升,这种情况就需要跟应用一起来分析为何连接数会激增,再做出相应的调整,比如说限制连接数等。 8.MySQL主从复制解决了哪些问题? 主从复制的作用是: 主数据库出现问题,可以切换到从数据库。可以进行数据库层面的读写分离。可以在从数据库上进行日常备份。 数据分布:随意开始或停止复制,并在不同地理位置分布数据备份 负载均衡:降低单个服务器的压力 高可用和故障切换:帮助应用程序避免单点失败 升级测试:可以用更高版本的MySQL作为从库 9.MySQL常用的备份工具有哪些? 常用备份工具mysql复制: 逻辑备份(mysqldump,mydumper) 物理备份(copy,xtrabackup) 备份工具差异对比: ·mysql复制相对于其他的备份来说,得到的备份数据比较实时。 ·逻辑备份:分表比较容易。mysqldump备份数据时是将所有sql语句整合在同一个文件中;mydumper备份数据时是将SQL语句按照表拆分成单个的sql文件, 每个sql文件对应一个完整的表。 ·物理备份:拷贝即可用,速度快。 copy:直接拷贝文件到数据目录下,可能引起表损坏或者数据不一致。 xtrabackup对于innodb表是不需要锁表的,对于myisam表仍然需要锁表。 10.MySQL备份计划如何制定? 视库的大小来定。一般来说100G内的库,可以考虑使用mysqldump来做,因为mysqldump更加轻巧灵活,备份时间选在业务低峰期,可以每天进行都进行全量备份(mysqldump备份出来的文件比较小,压缩之后更小)。 100G以上的库,可以考虑用xtranbackup来做,备份速度明显要比mysqldump要快。 一般是选择一周一个全备,其余每天进行增量备份,备份时间为业务低峰期。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 16:54:54- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |