把最简单的事情做的最漂亮,最专业。
不要怕成功的门很拥挤,因为很多人在半路就已经放弃了.
----oldguo
mysql掌握程度 | 星级 |
---|---|
(1) MySQL 简介及安装升级 | ***** |
(2) MySQL 体系结构和管理 | *** |
(3) SQL的基础应用和元数据获取 Select | *** |
(4) 索引和执行计划管理 | **** |
(5) 存储引擎 | *** |
(6) 日志管理 | **** |
(7) 备份恢复和迁移 | ****** |
(8) 主从复制 | ***** |
(9) 高可用和读写分离 | **** |
(10) 分布式架构 | ** |
(11) 全面优化 | ** |
(12) NoSQL-Redis | **** |
(13) NoSQL-MongoDB | ** |
(14) ES ----> ELK | ***** |
第一章 MySQL 介绍和安装
什么是数据?
我们认知的数据: 图片,视频,文字,表格,音频,数字,符号
在计算机中数据: 2进制,16进制
DBMS | 数据库管理系统 |
---|---|
RDBMS | 关系型数据库 |
NoSQL | 非关系型数据库 |
NewSQL | 分布式(云)数据库架构 |
RDBMS: 关系型数据库管理系统
比较适合于,安全级别要求高的数据以及关系较复杂的数据
NoSQL:非关系型数据库管理系统
适合于高性能存取数据,一般是配合RDBMS进行使用的
针对大数据处理分析,分布式架构更加擅长
https://db-engines.com/en/ranking
笔试: 列举你熟悉的数据库产品?
数据库类型 | 数据库名称 |
---|---|
RDBMS | Oracle MySQL MSSQL PG DB2 |
NoSQL | Redis MongoDB ES Memcahced HBASE |
NewSQL | TiDB PolarDB |
面试: 你们公司都用了哪些数据库产品
MySQL Redis MongoDB ES , 自学 Oracle PG HBASE
MySQL | 产品分支 |
---|---|
MySQL | 5.6 5.7 8.0 |
MariaDB | 10.x |
Percona | 5.6 5.7 .... |
MySQL 版本选择
企业主流版本
大版本 | 小版本 |
---|---|
5.6 | 5.6.34 5.6.36 5.6.38 5.6.40 |
5.7 | 5.7.18 5.7.20 5.7.22 |
8.0 | 8.0.14 |
1.一般选择官方主流版本:5.6,5.7
2.GA(稳定发布版)
3.6-12月的产品版本
===========================
5.6.38 5.7.20 20170913
你们公司用什么MySQL版本?
我们现在公司8014版本,你能胜任吗?
======================
MySQL 5.7.26 二进制版本安装
1 创建关键目录
mkdir -p /data/
2 添加存储磁盘,并挂载到/data ,设置自动挂载
[root@db01 ~]# mkfs.xfs /dev/sdb
[root@db01 ~]# mount /dev/sdb /data
[root@db01 ~]# blkid /dev/sdb
/dev/sdb: UUID="85571a33-73e0-4f5e-af92-ec5bc8d510e8" TYPE="xfs"
[root@db01 ~]# vim /etc/fstab
UUID=85571a33-73e0-4f5e-af92-ec5bc8d510e8 /data xfs defaults 0 0
3 创建数据目录和日志目录
[root@db01 ~]# mkdir -p /data/mysql/data /data/binlog
4 上传并处理软件包
[root@db01 /usr/local]# tar xf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
[root@db01 /usr/local]# mv mysql-5.7.26-linux-glibc2.12-x86_64 mysql
5 创建用户并授权
[root@db01 /usr/local]# useradd mysql
[root@db01 /usr/local]# chown -R mysql. /data /usr/local/mysql
5.5.6 设置环境变量
vim /etc/profile
export PATH=/usr/local/mysql/bin:$PATH
[root@db01 ~]# source /etc/profile
[root@db01 ~]# mysql -V
mysql Ver 14.14 Distrib 5.7.26, for linux-glibc2.12 (x86_64) using EditLine wrapper
7 数据初始化
[root@db01 ~]# rpm -qa |grep mariadb
mariadb-libs-5.5.56-2.el7.x86_64
[root@db01 ~]# yum remove mariadb-libs -y
[root@db01 ~]# yum install -y libaio-devel
[root@db01 ~]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data
--- 初始化参数介绍:
--initialize-insecure 初始化参数(不安全)
--initialize 初始化参数(安全)
(1) 生成随机12位的初始密码(大写,小写,数字,符号)
(2) 要求所有密码都具备复杂度要求
(3) 密码过期时间180天
8 生成配置文件
[root@db01 ~]# vim /etc/my.cnf
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql/data
socket=/tmp/mysql.sock
server_id=51
[mysql]
socket=/tmp/mysql.sock
9 准备启动脚本
(1) sys-V启动方式:
[root@db01 ~]# cd /usr/local/mysql/support-files/
[root@db01 /usr/local/mysql/support-files]# cp mysql.server /etc/init.d/mysqld
[root@db01 ~]# service mysqld start
(2) systemd管理
vim /etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
说明:
先使用sysv关闭,在启动
[root@db01 ~]# /etc/init.d/mysqld stop
[root@db01 ~]# systemctl start mysqld
第一章小结
(1) 数据库类型
RDBMS : Oracle MySQL MSSQL PG DB2
NoSQL : Redis MongoDB ES memcached Hbase
NewSQL : TiDB PolarDB
(2) MySQL的版本
5.6 34 36 38 40
5.7 18 20 22 24
8.0 14
GA 20170913
(3) MySQL 安装方式
二进制
源码 : 二次开发 定制化功能. ----> rpm
RPM : 官方, 定制
(4) 安装
(1) 建目录
(2) 建用户
(3) 授权
(4) 初始化数据: mysql_install_db(5.6) ,mysqld --initialize-insecure(5.7,8.0)
(5) 配置文件
(6) 启动脚本
第二章节 体系结构及基础管理
- C/S 工作模型
TCP/IP
mysql -uroot -p123 -h 10.0.0.51 -P3306
Socket
mysql -uroot -p123 -S /tmp/mysql.sock
- 实例
公司: Boss + 总经理 + 员工 + 办公室
实例: mysqld + master thread + workers线程 + 预分配的内存
[root@db01 ~]# ps -ef |grep mysqld
[root@db01 ~]# top -H -p 3530
[root@db01 ~]# ps -T -p 3530
- 什么是SQL ?
MySQL 管理和使用专用的命令 相当于 Linux Bash Shell中自带的命令
DDL | 数据定义语言 |
---|---|
DCL | 数据控制语言 |
DML | 数据操作语言 |
DQL | 数据查询语言 |
select user,host from mysql.user;
- mysqld 程序结构(SQL执行过程)
4.1 连接层
组成 | 模块 |
---|---|
提供连接协议 | TCP/IP SOCKET [root@db01 ~]# netstat -lnp|grep mysqld |
验证模块 | 验证用户密码 |
提供连接线程(show processlist;) | 接收SQL 返回结果 |
4.2 SQL层
语法检测模块 | 检查语法 |
---|---|
SQL_MODE检测模块 | |
语义检查模块,权限检查 | |
预处理 | 解析器: 解析树: 执行计划 优化器: 根据代价,选择一个代价最低的执行计划 代价: IO CPU |
执行器 | 按照选出来的执行计划,执行SQL语句,得出一个结果?(结果: 在磁盘的xxxxxx 位置之上,将结果交给存储引擎层继续处理) |
query_cache | redis 缓存数据 Tair |
记录操作日志 | binlog |
4.3 存储引擎层
相当于Linux中的文件系统.
根据SQL层给出的结果,去磁盘中将数据取出来.取出16进制的数据,返回给SQL,结构化成表,经过连接层返回给用户
5. MySQL 逻辑结构
5.1
库database(schema) | 相当于 Linux中的目录 |
---|---|
库名 | 目录名 |
属性 | 目录属性 |
5.2
表 table | 相当于Linux中的文件 |
---|---|
表名 | 文件名 |
表内容(记录,row) | 文件内容 |
表属性 | 文件属性 |
列
6. MySQL 物理结构基础引入
库 : 存储到数据目录下同名目录
表 :
MyISAM 引擎 :
user.frm | 列定义信息 |
---|---|
user.MYD | 数据行 |
user.MYI | 索引 |
InnoDB 引擎 :
time_zone.frm | 列定义信息 |
---|---|
time_zone.ibd | 数据行和索引 |
7. 页,区,段 *****
页 | 默认16KB,是最小的IO单元 |
---|---|
区 | 连续的64个默认大小page,总共1M空间 |
段 | 一个表(非分区表)就是一个段,会有一个或多个区构成 |
小结
8.1 CS模型
8.2 实例
8.3 mysqld程序结构
8.4 逻辑结构
8.5 物理结构
8.6 段\区\页基础管理
9.1 用户管理
9.1.1 作用
登录MySQL
管理MySQL对象
9.1.2 长啥样?
用户名@'白名单'
白名单 :
oldguo@'10.0.0.51'
oldguo@'10.0.0.%'
oldguo@'10.0.0.5%'
oldguo@'10.0.0.0/255.255.254.0'
oldguo@'%'
9.1.3 用户的操作
创建用户:
mysql> create user oldguo@'10.0.0.%';
查看用户:
mysql> select user,host from mysql.user;
修改用户:
mysql> alter user oldguo@'10.0.0.%' identified by '123';
删除用户:
drop user oldguo@'10.0.0.%';
说明:
8.0 以前可以用以下命令授权并建用户
grant all on . to wordpress@'%' identified by '1322';
9.2 权限管理
9.2.1 语法介绍
grant all on *.* to wordpress@'%' identified by '1322';
GRANT 权限 ON 范围 TO 用户 IDENTIFIED BY 密码 ;
(1) 权限 :
ALL:
SELECT,INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE
Mysql 数据库层面(db表)权限
权限 | 说明 |
---|---|
SELECT | 查询 |
INSERT | 插入 |
UPDATE | 更新 |
DELETE | 删除 |
CREATE | 创建表或者索引 |
DROP | 删除库、表 |
GRANT | 赋予权限选项 |
INDEX | 索引 |
ALTER | 更改表 |
CREATE_TMP_TABLE | 创建临时表 |
LOCK_TABLES | 锁表 |
SHOW_VIEW | 查看视图 |
CREATE_VIEW | 创建视图 |
CREATE_ROUTION | 创建存储过程 |
ALTER_ROUTION | 更改存储过程 |
EXECUTE | 执行存储过程 |
EVENT | 创建时间调度器 |
TRIGGER | 创建触发器 |
with grant option;
(2) 范围:
*.* | -R / |
---|---|
wordpress.* | -R /wordpress |
wordpress.t1 | -R /wordpress/t1 |
9.2.2 授权操作
(1) 授权管理员用户admin,能够通过10网段中所有地址管理数据库
mysql> grant all on . to admin@'10.0.0.%' identified by '123';
(2) 授权一个应用用户app,可用通过10网段,连接并使用wordpress库的数据
mysql> grant select,update,delete,insert on wordpress.* to app@'10.0.0.%' identified by '123';
注意:
1. 不要将公司内容任何账号,给非本公司人员
2. 不要流程范围外,授予非业务部门业务系统用户密码信息
3. 所有核心文档在通过互联传输时,都要脱敏处理.
9.2.3 查看用户权限
show grants for admin@'10.0.0.%';
9.2.4 回收权限
mysql> grant all on . to test@'10.0.0.%' identified by '123' with grant option;
mysql> revoke grant option on . from 'test'@'10.0.0.%';