MySQL理论
1. 数据库
- 数据:
- 数据就是一种符号,记录人类认为有价值的东西,例如图片、视频、文字、表格等
- 从计算机角度来看,就是二进制、16进制的文件
- 数据库的分类:
- RDBMS:关系型数据库管理系统
- 二维表结构,有清楚的行列结构,提供丰富的查询功能,高一致性,性能较差
- 适用数据安全要求较高的场景
- NOSQL:无结构化存储
- key volume键值存储或jeon格式,性能较高
- 适用于性能要求较高,安全性要求不是太高的场景,可配合RDBMS使用
- NewSQL:新式的关系型数据库管理系统,就是RDBMS+NOSQL的组合
- RDBMS:关系型数据库管理系统
2. 数据库产品
RDBMS | NOSQL | NEWSQL |
---|---|---|
MySQL(Oracle) | Redis | PinCAP产品: TiDB |
Oracle | MongoDB | Ali使用:PolarDB + OB |
MSSQL | Memcached | Tencent使用:TDSQL |
PG | ES |
3. MySQL版本选用
- mysql社区版本类型
- MR|RC:测试开发版
- GA:稳定发布版
- MySQL:尽量使用双数版
- 5.6.34 - 5.6.42
- 5.6.36:2017-3.18 GA
- 5.7.20 - 5.7.26
- 5.7.20:2017-9-13 GA
- 5.6.34 - 5.6.42
- 产品线
- MySQL:
- E:企业版
- C:社区版
- 5.0 5.1 5.5 5.6 5.7 8.0 9.0
- mariadb:
- 5.0 5.1 5.5 10.x
- percona:和MySQL很相似
- 5.0 5.1 5.5 5.6 5.7 8.0
- MySQL:
4. Oracle MySQL 5.7.26版本二进制部署
系统的准备
#1. 网络配置
ip,hostname,iptables,Selinux
#2. 规划目录
上传软件至:/usr/local
tar xf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
ln -s mysql-5.7.26-linux-glibc2.12-x86_64/ mysql57
mkdir -p /data/mysql/data_3306 #数据路径
mkdir -p /data/mysql/binlog_3306 #binlog日志路径日志章节说明.
#3. 用户创建
useradd mysql -s /sbin/nologin -M
#4. 授权
chown -R mysql.mysql /usr/local/mysql57 /data
#5. 环境变量
vim /etc/profile
添加:
echo "export PATH=/usr/local/mysql57/bin:$PATH" >> /etc/profile
source /etc/profile
mysql -V
#6. 卸载残留 安装依赖
yum remove -y mariadb-libs
yum install -y libaio-devel
#7. 初始化数据库
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql57 --datadir=/data/mysql/data_3306
#8. 配置文件
cat > /etc/my.cnf <
5. MySQL体系结构
5.1 SQL种类:
- DDL:数据定义
- DCL:数据控制
- DML:数据操作
- DQL:数据查询
5.2 MySQL工作模型
-
CS结构,客户端服务端模型
- 服务端程序:mysqld
- 客户端程序:
- mysql
- mysqldump
- mysqladmin
-
实例:
- MySQL运行结构
- mysqld --调用--> master thread --调用--> worker threads
- MySQL内存区域
- MySQL启动后会分配一个固定的专用内存区域
实例 = mysqld + master thread + worker threads + 内存区域
数据库管理系统 = 实例 + 数据
- MySQL运行结构
5.3 MySQL程序模型
- 连接层
- TCP/IP 或 socket 连接方式
- 验证用户账号密码
- 连接线程,接收SQL语句,返回执行结果
- SQL层
- 语法检查
- 权限检测
- 语义检查,识别SQL语句的类型
- 解析器预处理,分析执行SQL语句的各种执行方式,生成解析树(执行计划)
- 优化器,基于执行计划,挑选最小代价的方式
- 执行器,基于优化器的选择执行SQL语句,发送给引擎进行操作
- 存储引擎层
- 根据SQL层执行结果,落实到磁盘中
5.4 MySQL逻辑结构
- 库(database|schema):
- 库名称
- 库属性
- 表(table)
- 表名称
- 表属性
- 字段(列)
- 数据行(记录)
5.5 MySQL物理结构
- 库:磁盘上的一个目录
- 表:使用多个文件存储表的信息
- MyISAM引擎:
- .frm:表结构
- .MYD:数据行
- .MYI:索引
- InnoDB引擎:
- frm:表结构
- ibd:数据行 + 索引
- MyISAM引擎:
5.6 MySQL的段区页
- 段:一个表就是一个段,我们进行数据分配时,MySQL会在表段中至少分配一个区,也就是1M空间
- 区:连续的64个默认大小的页构成一个区
- 页:MySQL默认最小IO单元为页(默认16k,可调整),由连续的4个OSblock组成
- OSblock,xfs格式默认4k,也就是磁盘上连续的8个扇区
- 扇区:每个扇区512字节大小