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.%';

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

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

友情链接更多精彩内容