1.数据库产品介绍
数据库管理系统 (DBMS) databases management service
关系型数据库 RDBMS
Oracle
MySQL
MssSQL
PG
非关系型数据库 NoSQL
MongoDB
Redis
ES
memcached
NewSQL 分布式
RDS DRDS
polarDB
PinCAP
2.MySQL企业版选择
5.6.38
5.7.20
GA时间都是2017-0913
下载地址https://downloads.mysql.com/archives/community/
3.MySQL 5.7.26 二进制版本安装
3.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 二进制版本
3.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
3.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
3.4创建用户并授权
[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
3.5初始化数据(建库)********
环境变量设置:
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
3.6准备配置文件
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
3.7启动关闭数据库
[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
把mysqld移动到/etc/init.d目录下,更方便
centos7下实现system管理数据库启动关闭
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
3.8一条SQL语句在MySQL中是如何处理的?
SQL语句 :结构化查询语言
SQL分类 : DDL(数据定义语言),DCL(数据控制语言),DML(数据操作语言)...
- SQL语句执行过程
![7JZ4GIE{D$LTR2OSJNM%FG.png
连接层:
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层,结构化成表,通过连接线程返回结果.
3.9物理存储结构
宏观:
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.
3.10MySQL逻辑结构
库 ------> 目录
表 ------> 表文件
列 : 列名 + 列属性(约束,数据类型,其他属性)
行 : 记录
属性: 数据行,权限等...
4.MySQL基础管理
4.1MySQL用户管理
4.1.1 作用?
登录MySQL
管理MySQL
4.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'
4.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.%';
4.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.%';
上文中类似5.7+/-表示的是这个版本之前或者之后的MySQL版本