数据库 1

第一章 数据库产品介绍

  1. 数据库管理系统(DBMS) database management service ***
    RDBMS 关系型数据库
    Oracle
    MySQL
    MSSQL
    PG

NoSQL 非关系型
MongoDB
Redis
ES
Memcached

NewSQL 分布式
淘宝:
RDS , DRDS -----> AliSQL TDDL
PolarDB -----> OB
PinCAP : TiDB

  1. MySQL 产品分支 *
    Oracle MySQL
    MariaDB 5.5 ----> 10.0
    Percona MySQL
    RDS , TDSQL 云数据库

  2. MySQL 企业版本选择
    5.6 5.6.34 5.6.36 5.6.38
    5.7 5.7.18 5.7.20 5.7.22 5.7.24
    8.0 8.0.11

GA时间: 5.6.38 5.7.20 20170913 oldguo入职

下载地址:
https://downloads.mysql.com/archives/community/

  1. MySQL 5.7.26 二进制版本手撕安装
    5.1 规划:
    OS: Centos 7.6
    磁盘: 20G(system)+50G(/data)
    IP: 10.0.0.51
    hostname: db01
    /etc/hosts : 10.0.0.51 db01
    iptables: OFF
    SELINUX: disabled
    MySQL vervion : 5.7.26 二进制版本
    5.2 数据目录规划
    [root@db01 ~]# mkfs.xfs /dev/sdb
    [root@db01 ~]# blkid
    /dev/sda1: UUID="fd2e0ca7-32be-425f-86a2-85c02b9ec5ea" TYPE="xfs"
    /dev/sda2: UUID="79a3924b-739e-48dc-ab0c-0444b9ac6591" TYPE="swap"
    /dev/sda3: UUID="3a3a295f-88f8-456d-94dc-1a3eeb517c02" TYPE="xfs"
    /dev/sdb: UUID="8c6d28bb-4c6e-4ea3-a59d-5a256b3b56fc" TYPE="xfs"
    [root@db01 ~]# vim /etc/fstab
    添加:
    UUID="8c6d28bb-4c6e-4ea3-a59d-5a256b3b56fc" /data xfs defaults 0 0

[root@db01 ~]# mkdir /data
[root@db01 ~]# mount -a
[root@db01 ~]# df -h
[root@db01 ~]# mkdir /data/mysql/data -p

5.3 软件上传解压
[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.5 原始环境检查
[root@db01 ~]# rpm -qa |grep mariadb
[root@db01 ~]# yum remove mariadb-libs -y

5.6 用户权限准备
[root@db01 /etc]# useradd -s /sbin/nologin -M mysql
[root@db01 /etc]# chown -R mysql.mysql /data
[root@db01 /etc]# chown -R mysql.mysql /usr/local/mysql

5.7 初始化数据(建库) *****
环境变量设置:
vim /etc/profile
添加:
export PATH=/usr/local/mysql/bin:$PATH
生效:
source /etc/profile

5.7+ :
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data

报错:
mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
解决:
[root@db01 ~]# yum install -y libaio-devel
说明:
--initialize 使用一种安全的模式初始化数据.
特点: 1. 初始密码 2. 密码复杂度 3. 密码过期时间??

--initialize-insecure 使用一种不安全的模式初始化数据.

  1. 无密码 2. 无密码复杂度

5.7-:
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data

5.8 配置文件准备
[root@db01 ~]# vim /etc/my.cnf
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql/data
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock

5.9 启动关闭数据库 (SysV)
[root@db01 ~]# cd /usr/local/mysql/support-files/
[root@db01 /usr/local/mysql/support-files]# ./mysql.server start
[root@db01 /usr/local/mysql/support-files]# cp mysql.server /etc/init.d/mysqld
[root@db01 /usr/local/mysql/support-files]# service mysqld start /stop / restart

小作业:

实现 systemd 模式管理mysql启动关闭(systemd):
systemctl start/stop/restart mysqld
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=/app/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000

或者:
chkconfig --add mysqld
systemctl start/stop/restart mysqld

  1. MySQL的体系结构

6.1 MySQL C/S结构 **
server端: mysqld
clint 端: mysql ,mysqldump , 第三方程序(开发)

6.2 实例 **
公司: BoSS + 经理 + 员工 + 办公区
实例: mysqld + Mater Thread + 干活Thread + 专用内存

6.3 mysqld核心程序结构 *****
6.3.0 面试: 1条SQL语句在MySQL中是如何处理的?
6.3.1 SQL语句 :结构化查询语言
6.3.2 SQL分类 : DDL(数据定义语言),DCL(数据控制语言),DML(数据操作语言)...
6.3.3 一条SQL : select user,host, authentication_string from mysql.user;
6.3.5 SQL语句的执行过程
连接层:
mysql -uroot -p123 -h10.0.0.51 -P3306
(1) 提供连接协议
TCP/IP: 网络Scoket=IP+Port
Socket: scoket文件
(2) 验证用户名密码,ip
(3) 提供连接线程
负责: SQL接收和结果的反馈
show processlist;
SQL层 *****
(1) 语法检查
(2) 语义检查
(3) 权限检查
(5) 解析: 生成多种执行计划树.
(6) 优化器: 判断哪一种执行计划,代价最低.
资源代价: CPU,IO,MEM
(7) 执行器:执行优化器选择后的执行计划执行.
得到需要查询数据的存储位置.
存储引擎层(文件系统)
和"磁盘"打交道的层次.
转回给SQL层,结构化成表,通过连接线程返回结果.

6.3 物理存储结构
宏观:
MyISAM存储引擎表:(5.5-)
user.frm : 表结构
user.MYD : 表数据
user.MYI : 索引

InnoDB 存储引擎表(5.5+):
time_zone.frm : 表结构
time_zone.ibd : 数据+索引(IOT)

微观: *****
segment(段) : 一个(非分区表)表就是一个段 ,由一个或者多个区构成.
extent(区) : <连续>的64个page,默认1M.
page(页) : MySQL的最小物理IO单元,默认16KB,<连续>的4个OS block.

6.5 MySQL逻辑结构 **
库 ------> 目录
表 ------> 表文件
列 : 列名 + 列属性(约束,数据类型,其他属性)
行 : 记录
属性: 数据行,权限等...

  1. MySQL基础管理
    7.1 MySQL的用户管理
    7.1.1 作用?
    登录MySQL
    管理MySQL
    7.1.2 用户的定义
    用户名@'白名单'
    白名单?
    允许用户登录的"范围"
    IP段
    =========================
    oldguo@'10.0.0.5%'
    oldguo@'10.0.0.%'
    oldguo@'10.0.0.0/255.255.254.0'
    =========================
    oldguo@'10.0.0.254'
    oldguooldguo@'%'
    oldguo@'%'
    oldguo@'localhost'
    oldguo@'oldguo.com'

7.1.3 用户的管理命令
(1) 查
5.7+
mysql> select user,host ,authentication_string from mysql.user;
5.7-
mysql> select user,host ,password from mysql.user;
(2) 增
mysql> create user oldguo@'10.0.0.%';
(3) 改
mysql> alter user oldguo@'10.0.0.%' identified by '123';
(5) 删
drop user oldguo@'10.0.0.%';

7.2 权限管理
7.2.1 权限定义
新特性:
8.0- : 命令即权限
ALL
SELECT, INSERT, UPDATE, DELETE, CREATE, 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,DROP
with grant option

8.0+ :支持角色功能,自由打包需要的权限.
7.2.2 权限定义方法
GRANT 权限 ON 权限作用范围 TO 用户 IDENTIFIED BY '密码';
GRANT SELECT, INSERT, UPDATE, DELETE ON oldguo.* TO oldguo@'10.0.0.%' IDENTIFIED BY '123'

权限作用范围 :
. -R /
oldguo.* -R /oldguo
oldguo.t1 /oldguo/t1

7.2.3 权限管理
(1) 授权
GRANT SELECT, INSERT, UPDATE, DELETE ON oldguo.* TO oldguo@'10.0.0.%' IDENTIFIED BY '123';

例子1: 创建并授权超级管理员用户root,能够通过10网段任意地址管理数据库.
mysql> grant all on . to root@'10.0.0.%' identified by '123' with grant option;

(2) 查询用户权限
mysql> show grants for root@'10.0.0.%';

例子2: 创建一个应用用户app,能够通过10网段访问(SELECT, INSERT, UPDATE, DELETE)app库的所有表
grant SELECT,INSERT,UPDATE,DELETE on app.* to app@'10.0.0.%' identified by '123';

(3) 回收
说明:
多次授权是叠加关系,修改权限只能回收.
grant SELECT,INSERT,UPDATE,DELETE on app.* to app@'10.0.0.%' identified by '123';
mysql> revoke delete on app.* from app@'10.0.0.%';

你可能感兴趣的:(数据库 1)