第一部分: 了解 DBA 体系
一, 初级 DBA 应该掌握哪些技能?(运维人员必会知识)
1.MySQL 安装部署
2. 基本参数配置
3. 备份策略设计与实现
二, 中级 DBA 应该掌握哪些技能?
1. 故障处理能力(备份或者其他手段)
2.MySQL 监控能力
3. 基本优化能力(索引, 执行计划, 慢日志分析); 有一定的 SQL 分析能力
4. 主从复制的基本管理, 应用, 故障处理
三, 高级 DBA 应该掌握哪些技能?
1.MySQL 性能调优: 对整体架构,"业务","用户行为" 深入了解, 要有很扎实的 SQL 能力
2. 高性能, 高可用架构: 对整体架构,"业务","用户行为" 深入了解
四, 对数据的理解
对现实对象, 事件的抽象显示或存储方式
数据库适合存储什么数据?
重要数据
非二进制的, 文本形式的更适合于存放到数据库中
有关系, 有复杂逻辑的数据
数据管理复杂的
第二部分: DBMS 数据库管理系统
一, 作用:
1, 更有条理的存储和查询数据
2, 提供更高级的数据管理方式(备份, 恢复, 优化, 安全等等)
二, 分类:
1. 关系型
二维表
典型产品 Oracle 传统企业, MySQL 是互联网企业
数据存取是通过 SQL
最大特点, 数据安全性方面强(ACID)
2. 非关系型(NoSQL)
非关系型数据库(Not only SQL)
不是否定关系型数据库, 做关系型数据库的的补充
3. 数据库版本
oracle 数据库版本介绍(目前仍位居第一)
(8.1.7,9.2.0.8 ,10.2.0.4 10.2.0.5,11.2.0.3 11.2.0.4,12.2)
MySQL 数据库版本介绍(开源免费)
(5.6.36 ,5.6.38 ,5.6.34 ,5.7.18,5.7.20)
面试问题总结: 询问你公司用的 mysql 版本, 为什么用?
行业规范, 选择主流大版本, 发布六个月以上 GA 版本, 我们公司选择这款数据库是基于公司业务特点决定的, 开发阶段也是用的 5.6 的版本.(根据自己业务公司情况来说)
三, 补充:
mariadb(mysql 的一个主要分支)存储引擎 TokuDB 特点:
1.insert 操作比 innodb 性能高 3-4 倍
2. 数据压缩比 8 倍以上
3. 查询性能比 innodb 好
企业应用场景:
zabbix(爬虫类)应用业务类型:(原因如下)
1.insert 插入多
2. 数据量大, 需要存储大量数据
perconaDB(了解, 有精力可研究)研究它的工具:
xtrabackup (用于优化 SQL)
第三部分: MySQL 体系结构
一, mysqld 构成
(1). 连接层
说明:
提供通信协议
TCP/IP --- 所有系统通用
socket ---linux 特有
提供链接线程; 随着客户端请求派生出专门的响应线程; 作用是和客户端进行交互
查看当前数据库的连接线程数: show full processlist
过程:接收客户端发来的 SQL得到查询结果之后返回给客户端结果向下层 (SQL 层) 传输接收到的 SQL后端处理完成的结果负责接收, 转给客户端.
(2)SQL 层
SQL 线程接收上层线程发送过来的 SQL 语句
检查语法是否正确, 有误抛出错误提示, 还有授权检测
检查语义, 语句的类型(DDL,DCL,DML,DQL)
会将语句交给不同解析进行解析
解析器开始解析, 生成执行计划
优化器, 判断所有生成的执行计划, 找到成本最低的执行计划, 转给执行器
执行器, 执行这个执行计划, 得出去哪个盘找哪个文件的哪页哪行数据
有专门的线程将结果发送给下层 (存储引擎层) 继续处理
下层传过来的数据结构化成表的形式, 转给上层连接层专门线程
将上层执行过的 SQL 语句进行 hash, 生成一个 hash 结果 (SQL_ID) 和获取数据结果缓存下来(QUERY_CACHE).
补充:
企业里现在主流解决方案关闭 QUERY_CACHE, 用 redis 或 memcache 代替
(3)存储引擎层
接收上层传过来的数据位置, 找到相应的页上的行
找到行之后, 发送给 SQL 层
二, 页, 区, 段定义
(1)页(默认 16k):mysql 的最小物理存储分配单元.
用来存放数据库中表中的行
(2)区: mysql 认为对于一行数据来讲, 如果需要多个页情况, 我们尽量给他连续的才更高效, 所有有了区的概念.
(3)多个区构成, 我们认为, 连续的区组成段
MySQL 数据库从入门到实战(一)
来源: http://www.bubuko.com/infodetail-2548764.html