5.1 什么是数据?
人类认为的数据: 抽象出来的,图片,视频,文字,表格,数字.
计算机: 2进制,16机制.
5.2 DBMS 数据库管理系统
RDBMS: 关系型数据库管理系统
特点: 二维表结构,提供很丰富的查询功能.高一致性.性能相比较差.
NoSQL:
特点: 无结构化存储数据,性能较高
NewSQL:
PinCAP TiDB
Aliyun PolarDB + OB
Tencent TDSQL
5.3 面试题
(1) 笔试: 介绍你了解过的数据库产品?
RDBMS: MySQL , Oracle ,MSSQL,PG
NOSQL: Redis, Memcached, MongoDB,ES
NewSQL: TiDB , PolarDB ,TDSQL
(2) 面试: 你们公司都用了哪些数据库产品?
运维:
MySQL 或者 RDS
DBA:
MySQL , Redis ,MongoDB, ES,Oracle
- MySQL 企业版本选择
6.1 Oracle MySQL产品线
E : 企业版 , 收费的.
C : 社区版 , 开源的.
6.2 社区版 版本类型
DMR,RC : 测试开发版.
GA : 稳定发布版.
6.3 企业版本选择
5.5 : 7-8%
5.6 : 50% : 5.6.3x : 5.6.34 -5.6.42 尽量选择双数版
5.7 : 40% : 5.7.2x : 5.7.20 -5.7.26
8.0 : 2-3% : 8.0.11+, 8.0.17以上更好.
5.6.38 5.7.20 2017-9-13
6.4 MySQL软件获取
https://downloads.mysql.com/archives/community/
一般,6-12之间的.
预言: 8.0 ,至少未来10年,都是主流版本.
--- oldguo
MGR / InnoDB cluster
6.5 同源产品
Oracle MySQL : 5.0 5.1 5.5 5.6 5.7 8.0 9.0
MariaDB : 5.0 5.1 5.5 10.x ....
Percona : 5.0 5.1 5.5 5.6 5.7 8.0
- MySQL 5.7.26版本二进制版本部署
7.1 系统的准备
(1) 网络配置
ip,hostname,iptables,Selinux
(2) 规划目录
上传软件至:/usr/local
[root@db01 local]# tar xf mysql-8.0.16-linux-glibc2.12-x86_64.tar.xz
[root@db01 local]# ln -s mysql-8.0.16-linux-glibc2.12-x86_64 mysql8
[root@db01 ~]# mkdir -p /data/mysql/data_3306 #数据路径
[root@db01 ~]# mkdir -p /data/mysql/binlog_3306 #binlog日志路径(日志章节说明)
(3) 用户创建
[root@db01 ~]# useradd mysql
(4) 授权
[root@db01 local]# chown -R mysql.mysql /usr/local/mysql8 /data
(5) 环境变量
vim /etc/profile
#添加:
export PATH=/usr/local/mysql8/bin:$PATH
[root@db01 local]# source /etc/profile
(6)残留处理
[root@db01 bin]# rpm -qa |grep mariadb
mariadb-libs-5.5.60-1.el7_5.x86_64
[root@db01 bin]# yum remove mariadb-libs -y
(7) 依赖包安装
[root@db01 bin]# rpm -qa |grep libaio-devel
[root@db01 bin]# yum install -y libaio-devel
7.2 数据初始化 (建系统库)
[root@db01 data_3306]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql8 --datadir=/data/mysql/data_3306
7.3 配置文件准备
cat > /etc/my.cnf <
7.4 准备启动脚本
[root@db01 support-files]# cd /usr/local/mysql8/support-files
[root@db01 support-files]# cp mysql.server /etc/init.d/mysqld
[root@db01 ~]# chkconfig --add mysqld
[root@db01 ~]# systemctl start mysqld
[root@db01 ~]# mysql
[root@db01 ~]# systemctl restart mysqld
===========
清空8.0环境,部署MySQL5.7
pkill mysqld
rm -rf /data/mysql/data_3306/*
chkconfig --del mysqld
[root@db01 local]# tar xf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
[root@db01 local]# ln -s mysql-5.7.26-linux-glibc2.12-x86_64 mysql57
vim /etc/profile
export PATH=/usr/local/mysql57/bin:$PATH
[root@db01 local]# source /etc/profile
[root@db01 local]# chown -R mysql.mysql /usr/local/mysql57
[root@db01 local]# chown -R mysql.mysql /data
[root@db01 data_3306]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql57 --datadir=/data/mysql/data_3306
此处 --initialize-insecure 参数为初始化时不生成初始化密码(不安全的初始化)
[root@db01 local]# cd /usr/local/mysql57/support-files/
[root@db01 support-files]# ll
total 24
-rw-r--r-- 1 7161 31415 773 Apr 13 2019 magic
-rwxr-xr-x 1 7161 31415 1061 Apr 13 2019 mysqld_multi.server
-rwxr-xr-x 1 7161 31415 894 Apr 13 2019 mysql-log-rotate
-rwxr-xr-x 1 7161 31415 10576 Apr 13 2019 mysql.server
[root@db01 support-files]# cp mysql.server /etc/init.d/mysqld
cp: overwrite ‘/etc/init.d/mysqld’? y
[root@db01 support-files]# chkconfig --add mysqld
[root@db01 support-files]# systemctl start mysqld
[root@db01 support-files]#
第二章 体系结构与基础管理
- MySQL的工作模型
C/S : 客户端/服务端模型
1.1 服务端程序
mysqld
1.2 客户端程序
mysql
mysqldump
mysqladmin
...
1.3 连接协议(Linux)
网络套接字: TCP/IP网络连接串 ----> mysql -uroot -p123 -h10.0.0.51 -P3306
本地套接字: socket本地连接串 ----> mysql -uroot -p123 -S /tmp/mysql.sock
- MySQL的实例
实例 = mysqld + Master Thread + worker Threads + 专用内存
公司 = Boss + Manager + worker + 办公室
- mysqld 程序结构
3.1 SQL是什么?
结构化查询语言.关系型数据库中的专用命令.
3.2 SQL种类
DDL : 数据定义
DCL : 数据控制
DML : 数据操作
DQL : 数据查询
3.3 一条SQL语句的执行逻辑
略.
- MySQL对象逻辑结构
库 : database / schema
库名
属性
表 : table
表名
表属性
字段(列)
数据行(记录)
(1) 数据库种类
RDBMS : MySQL
NoSQL : Redis,MongoDB,ES
NEWSQL
(2) MySQL版本选择
小版本 GA
(3) 安装
5.7+版本
初始化数据:
mysqld --initialize --user=mysql --basedir=/usr/local/mysql57 --datadir=/data/mysql/data_3306
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql57 --datadir=/data/mysql/data_3306
5.7 以前版本:
/usr/local/mysql56/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql56 --datadir=/data/mysql/data_3306
(4) 体系结构
一条SQL语句的执行过程
连接层
连接协议: TCP,Socket
验证
native
sha2
- 连接线程
接受SQL
返回结构
show processlist;
SQL层
语法
语义
权限
解析 ---> 执行计划
预处理 ---> 代价计算(cost)
优化器 ---> 选择代价低的
执行器 ---> 结果----> 段--->区---->页
查询QC(query_cache)
案例: 5.7.23 , 16C_64G , 版本 按月分区表 , 做压力测试
开启QC之前:
select * from a where aa=xxx;
QPS 3000+
开启之后:
select * from a where aa=xxx;
QPS 600+
热点数据,可以用redis缓存数据库承当.
- 日志记录(按需开启)
binlog
general_log
存储引擎层
去系统找需要的数据页.返回到SQL,结构化数据成表.
MySQL 物理存储结构
段 : 一个表就是一个段.由1个或多个区构成.
区 : 连续的64个page,默认是1M,最小的存储分配单元.
页 : 连续4个OS block,默认16KB,最小的IO单元.