mysql-01

把最简单的事情做的最漂亮,最专业。

不要怕成功的门很拥挤,因为很多人在半路就已经放弃了.

----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) 启动脚本

第二章节 体系结构及基础管理

  1. C/S 工作模型
    TCP/IP
mysql -uroot -p123 -h 10.0.0.51 -P3306

Socket

mysql -uroot -p123 -S /tmp/mysql.sock   
  1. 实例
    公司: Boss + 总经理 + 员工 + 办公室
    实例: mysqld + master thread + workers线程 + 预分配的内存
[root@db01 ~]# ps -ef |grep mysqld
[root@db01 ~]# top -H -p 3530
[root@db01 ~]# ps -T -p 3530
  1. 什么是SQL ?
    MySQL 管理和使用专用的命令 相当于 Linux Bash Shell中自带的命令
DDL 数据定义语言
DCL 数据控制语言
DML 数据操作语言
DQL 数据查询语言

select user,host from mysql.user;

  1. 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空间
一个表(非分区表)就是一个段,会有一个或多个区构成
  1. 小结
    8.1 CS模型
    8.2 实例
    8.3 mysqld程序结构
    8.4 逻辑结构
    8.5 物理结构
    8.6 段\区\页

  2. 基础管理
    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.%';

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容

  • 1,MySQL权限体系 mysql 的权限体系大致分为5个层级: 全局层级: 全局权限适用于一个给定服务器中的所有...
    不排版阅读 945评论 0 4
  • 什么是数据库? 数据库是存储数据的集合的单独的应用程序。每个数据库具有一个或多个不同的API,用于创建,访问,管理...
    chen_000阅读 4,035评论 0 19
  • 1.A simple master-to-slave replication is currently being...
    Kevin关大大阅读 5,966评论 0 3
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,307评论 0 9
  • 保安这个职业对于整个社会来说是不可缺少的,它的存在有利于社会的稳定和谐,保安保卫着每个单位的财产安全和生命安全。但...
    张德卫zdw阅读 2,028评论 2 2