上集回顾
数据库种类
RDBMS:MYSQL
NoSQL:Redis,MongoDB,ES
NEWSQL
初始化数据
5.7+版本
mysqld --initialize --user=mysql --basedir=/usr/local/mysql57 --datadir=/data/mysql/data_3306
5.7以前版本
/usr/local/mysql56/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql56 --datadir=/data/mysql/data_3306
连接层
1.连接协议:TCP,Socket
2.验证:native,sha2
3.连接线程:接收SQL,返回结构 show processlist;查看线程状态
SQL层
1. 语法
2. 语义
3. 权限
4. 解析 ---> 执行计划
5. 预处理 ---> 代价计算(cost)
6. 优化器 ---> 选择代价低的
7. 执行器 ---> 结果----> 段--->区---->页
8.查询QC,当数据库读写量大时,会影响数据功能,可以用redis缓存数据库承当
9.日志记录(按需开启)binlog general_log
存储引擎层
去系统找需要的数据页.返回到SQL,结构化数据成表.
MySQL 物理存储结构
段 : 一个表就是一个段.由1个或多个区构成.
区 : 连续的64个page,默认是1M,最小的存储分配单元.
页 : 连续4个OS block,默认16KB,最小的IO单元
MySQL基础管理
1.用户白名单
用户名@'白名单'
grant all on *.* to wordpress@'%' identified '123';
user@'10.0.0.56'
user@'%'
常用的
user@'10.0.0.%' 255.255.255.0 24位
user@'10.0.0.0/255.255.254.0' 23位
user@'10.0.0.5%' 50-59
user@'localhost' 本地
2.用户管理
创建用户:
mysql > CREATE USER oldyan@'10.0.0.%' IDENTIFIED BY '123';
查询用户:
mysql > select user,host from mysql.user; 查询用户主机
mysql > select user,host,authentication_string from mysql.user; 查询用户主机密码
修改用户:
mysql > alter user oldyan@'10.0.0.%' identified by '123456';
删除用户:
mysql > drop user oldyan@'10.0.0.%';
说明:
8.0+ 版本: 必须先创建用户再授权.
8.0以前: 可以grant 授权时自动创建用户.
3.权限管理
MySQL权限列表
mysql> show privileges;
授权和回收权限
GRANT 权限 ON 权限作用范围 TO 用户 IDENTIFIED BY '123' with grant option;
权限作用范围 :
*.* ====> 一般是管理员会设置的方法
oldguo.* ====> 一般是业务用户会设置的方法
oldguo.t1 ====> 一般是业务用户户设置的方法
企业授权案例
(1)授权一个管理员用户oldguo,可以从10网段任意地址登录管理数据库
grant all on *.* to oldyan@'10.0.0.%' identified by '123' with grant option;
(2)授权一个业务用户app,可以从10网段地址访问app库的所有表
grant select,update,insert,delete on app.* to app@'10.0.0.%' identified by '123';
root管理员密码忘记或被篡改如何处理?
(1)关闭数据库,启动到“单用户”模式
systemctl stop mysqld
mysql_safe --skip-grant-tables --skip-networking &
(2)无密码登录MySQL
mysql
mysql > alter user root@'localhost' identified by '123456';
mysql > flush privileges;
mysql > alter user root@'localhost' identified by '123456';
(3)重启数据库到正常模式
systemctl restart mysqld
查询用户权限
mysql > show grants for app@'10.0.0.%';
回收权限
mysql > revoke delete,drop on app.* from 'app'@'10.0.0.%';