课程知识内容概述:
01 数据库服务概述介绍
02 数据库服务安装部署
03 数据库服务初始化介绍
04 数据库服务用户管理
05 数据库服务授权管理
06 数据库服务授权表介绍 * 三个授权表
07 数据库服务密码重置实践 **** 关闭数据库
08 数据库服务连接管理
09 数据库服务应用配置
10 数据库服务多实例构建
01 数据库服务概述介绍
1)企业中为什么需要数据库?
数据:图片 文字 视频 用户名 密码 代码信息(html php jar) 地址 人类识别 — 保存
数据:二进制信息 — 保存 — 磁盘
人类可识别信息 – DBMS(数据库管理系统) – 二进制 — 磁盘(颗粒-正负极)
DBMS分类:
RDBMS(关系型数据库软件):主流核心使用数据软件
NoSQL(非关系数据库软件):辅助数据库软件程序
DDBMS(分布式数据库软件):解决海量数据存储与管理 (NewSQL)
2)数据库服务作用:
01 可以实现数据稳定存储(安全性)
02 可以分析管理数据信息(数据分析查询) 注册 — 数据库识别 — 二进制 — 磁盘
3)数据库服务分类:
第一代数据库产品:实现数据整合
01 关系型数据库:二维表结构数据库 == execl
DBMS(管理系统)
库
表
字段/记录
代表产品:MySQL Oracle Mariadb SQLserver(国企 校园)PostgreSQL(PGSQL)海量数据存储场景–金融行业
第二代数据库产品:实现数据拆分 解决并发压力
02 非关系型数据库:提高数据存储和读取效率(内存存储数据) 辅助关系型数据库,解决高并发访问问题
key value 键值对 抖音/B站 — 点赞:1000 收藏数量 100
代表产品:redis mongodb(文档型数据库==关系型数据库?)ES(日志信息存储)
第三代数据库产品:实现业务整合
03 新型数据库:业务整合 分布式(垂直分布式 水平分布式)
代表产品:OceanBase TiDB PolarDB
02 数据库服务安装部署
1)数据库版本应用:
面试题目:你之前用的数据库服务是什么 用的是什么版本?
MySQL数据库产品:Oracle MySQL Mariadb MySQL 5.5+ 10的版本 Percona MySQL (工具 辅助管理数据库)
MySQL数据库版本:
大版本
5.5 5.5 (GA最新版本) 5.5.62 18年发布
5.6 5.6 (GA最新版本) 双数版本 5.6.26 38 40
5.7 5.7 (GA最新版本) 5.7.30 5.7.32
PS:以上三个版本,都已停止更新维护
8.0 8.0.32
C版: 社区版 — 免费版
E版: 企业版 — 盈利版
Cluster:集群版 — 收费版
PS:主要讲解8.0.26 mysql
2)数据库服务程序下载
官网下载:https://www.mysql.com/
查看系统C语言库版本
getconf GNU_LIBC_VERSION
ldd –version
3)数据库软件安装方式:
方式一:利用yum进行安装 更新yum源 https://dev.mysql.com/downloads/ 最新版本 网络 最新
方式二:利用rpm进行安装 离线安装 rpm -ivh xxx.rpm 依赖
方式三:源码安装 编译安装 cmake — make && make install 用于数据库二次开发 30~1小时
方式四:二进制安装 解压完了 依赖需要解决 (主推)
二进制安装步骤:
01 系统环境准备:
虚拟主机环境:1核 2G 100G
系统配置说明:
网络地址:10.0.0.51
主机名称:db01
域名解析:10.0.0.51 db01
关闭防火墙:
关闭selinux:
卸载系统mariadb程序:yum remove rpm -qa|grep mariadb
解决软件依赖:yum install -y libaio-devel
02 上传部署软件:
cd /usr/local
rz -y
— 上传数据库程序压缩包
tar xf mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz
ll mysql-8.0.26-linux-glibc2.12-x86_64 -d
drwxr-xr-x 9 root root 129 Apr 26 12:01 mysql-8.0.26-linux-glibc2.12-x86_64
— 解压软件程序
ln -s mysql-8.0.26-linux-glibc2.12-x86_64 mysql
— 创建软链接
vim /etc/profile
export PATH=”/usr/local/mysql/bin:$PATH”
source /etc/profile
mysql -V
mysql Ver 8.0.26 for Linux on x86_64 (MySQL Community Server – GPL)
— 编辑环境变量
03 初始化数据库
mkdir -p /data/3306/data
useradd mysql
chown -R mysql. /data/3306/data
ll /data/3306/data -d
drwxr-xr-x 2 mysql mysql 6 Apr 26 12:07 /data/3306/data
— 环境准备
mysqld –initialize-insecure –user=mysql –basedir=/usr/local/mysql –datadir=/data/3306/data
核心程序命令 初始化核心参数(不安全初始化) 数据库管理用户 核心程序目录 数据存储目录
— 初始化过程
PS:只要初始化没有报错就没问题
vim /etc/my.cnf
[mysql]
socket=/tmp/mysql.sock
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3306/data
socket=/tmp/mysql.sock
— 编写配置文件
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
ll /etc/init.d/mysqld
-rwxr-xr-x 1 root root 10576 Apr 26 12:22 /etc/init.d/mysqld
/etc/init.d/mysqld start
— 启动运行数据库服务
chkconfig –add mysqld
— 实现数据库启动脚本开机自动运行
[root@db01 local 12:23]# ps -ef|grep mysql
root 8559 1 0 12:23 pts/0 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe –datadir=/data/3306/data –pid-file=/data/3306/data/db01.pid
mysql 8698 8559 15 12:23 pts/0 00:00:04 /usr/local/mysql/bin/mysqld –basedir=/usr/local/mysql –datadir=/data/3306/data –plugin-dir=/usr/local/mysql/lib/plugin –user=mysql –log-error=db01.err –pid-file=/data/3306/data/db01.pid –socket=/tmp/mysql.sock
root 8753 8161 0 12:23 pts/0 00:00:00 grep –color=auto mysql
[root@db01 local 12:23]# netstat -lntup|grep mysql
tcp6 0 0 :::33060 :::* LISTEN 8698/mysqld
tcp6 0 0 :::3306 :::* LISTEN 8698/mysqld
PS:The X Plugin can be disabled at startup by either setting mysqlx=0 in your MySQL configuration file
数据库初始化过程完毕
systemctl enable mysqld
systemctl start mysqld
— 利用systemctl间接管理mysql服务
03 数据库服务初始化介绍
8.0 5.7 数据库初始化操作:
安全模式初始化:
mysqld –initialize — 可以利用随机密码登录(临时密码 具有4种复杂度 12位)
说明:临时密码只能用户临时登录数据库,登录完毕需要重置密码,才能对数据库进行管理
alter user root@’localhost’ identified by ‘123456’;
— 修改临时密码
非安全模式初始化:
mysqld –initialize-insecure …. — 可以免密登录
5.5 5.6 数据库初始化操作:
./mysql56/scripts/mysql_install_db –user=mysql –basedir=/usr/local/mysql56 –datadir=/data/3356/data
ps:确认是否会显示两个ok 表示初始化成功
初始化学生问题汇总:
问题一:安全模式初始化完毕 临时密码无法登录
问题现象:
[root@db01 ~]# mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES)
问题分析:
1)初始化数据库时,需要将数据库服务停止
2)初始化的命令参数,要书写完整
mysqld –initialize –user=mysql –basedir=/usr/local/mysql –datadir=/data/3306/data
问题二:遇到systemctl启动数据库服务,无法显示进程和端口信息
问题现象:
systemctl start mysqld –> 没有进程信息
问题分析:
systemctl 识别服务已经启动,无法反复启动
可以关闭数据库服务,再次启动
问题三:数据库服务无法启动
问题现象:
/etc/init.d/mysqld start — 启动报错信息
问题分析:
查看错误日志:
/data/3306/data/db01.err
发现数据目录里面数据信息不完整 — 重新删除 — 重新初始化 — 重新创建出完整的数据目录
知识点补充:非安全模式设置管理员密码
设置密码方法一:没有密码设置密码
在命令行设置:
mysqladmin password ‘oldboy123’
or
mysqladmin -uroot -p password ‘oldboy123’
在数据库中设置密码:SQL语句
alter user root@’localhost’ identified by ‘oldboy123’;
设置密码方法二:修改密码信息
mysqladmin -uroot -poldboy123 password ‘123456’
在数据库中设置密码:SQL语句
alter user root@’localhost’ identified by ‘oldboy123’;
— 8.0 利用SQL语句设置用户密码
update mysql.user set authentication_string=PASSWORD(‘oldboy123′) where user=’root’ and host=’localhost’;
— 5.7 利用SQL语句设置用户密码
set password for ‘oldboy’@’localhost’=PASSWORD(‘oldboy123’);
— 5.6 利用SQL语句设置用户密码
设置密码方法三:忘记密码进行密码重置
???
04 数据库服务用户管理
学习数据库用户管理知识原因
- 用户登录数据库服务系统中(实现数据库服务登录)
- 用户管理数据库服务中对象(实现数据库对象管理) 1)创建用户 useradd = create
创建用户格式:’用户名称信息’@’白名单信息’
用户名称: 创建用户名字
白名单信息:主机域信息
本地-localhost/127.0.0.1
— 只允许本地连接登录数据库
网段-10.0.0.0/24 10.% 172.16.% 192.168.10.%
— 允许某个网段中的多个主机,均可远程登录
地址-192.168.10.13
— 允许某个主机可以远程登录
域名-oldboyedu
— 允许某个主机可以远程登录(域名解析)
— 允许远程登录数据库 create user oldbaby@’10.0.0.%’ identified by ‘123’; 方式一:书写方法(企业常用) root@’192.168.30.0/24′
root@’192.168.30.0/255.255.255.0′
— 授权一个网段主机均可远程登录数据库服务,表示这个网段中192.168.30.1~192.168.30.254均可访问
— 在数据库中识别默认掩码就是/24,其他掩码信息需要具体写明,需要注意特殊VLSM子网掩码需要长格式指明,不能简写*** 方式二:书写方法(企业常用) root@’192.168.30.%’
— 授权一个网段主机均可远程登录数据库服务,表示这个网段中192.168.30.1~192.168.30.254均可访问 方式三:书写方法 root@’172.16.%’
— 授权一个更大网段主机均可远程登录数据库服务,表示这个网段中192.168.0.1~192.168.255.254均可访问 方式四:书写方法 root@’%’
— 授权任意主机都可以远程登录数据库服务 方式五:书写方法 root@’192.168.30.51′
— 授权一个具体的主机可以远程登录数据库服务,表示这个主机192.168.30.51可以访问
root@’192.168.30.5%’
— 授权多个具体的主机可以远程登录数据库服务,表示多个主机192.168.30.50~192.168.30.59均可以访问 解决数据库加密问题:客户端 — 服务端
方法一:升级客户端 客户端加密方式升级
方法二:降级服务端 服务端加密方式降级
查看8.0数据库 密码加密方式
show variables like ‘%auth%’;
早起默认加密方式:mysql_native_password
目前最新加密方式:caching_sha2_password 降级方式一:
create user oldgirl@’10.0.0.%’ identified with mysql_native_password by ‘123’;
降级方式二:
alter user oldboy@’10.0.0.%’ identified with mysql_native_password by ‘123’;
降级方式三:全局修改 vim /etc/my.cnf [mysqld]
default_authentication_plugin=mysql_native_password
重启数据库服务,使配置生效
检查确认
mysql> show variables like ‘%auth%’;
+——————————-+———————–+
| Variable_name | Value |
+——————————-+———————–+
| default_authentication_plugin | mysql_native_password |
+——————————-+———————–+
查看数据库用户密码信息:
select user,host,authentication_string,plugin from mysql.user; 2)查看用户 id = select
查看数据库所有用户信息
select user,host from mysql.user;
查看当前登录数据库用户信息:
select user(); 3)删除用户 userdel = drop
方式一:drop
drop user oldbaby@’10.0.0.%’;
方式二:delete 危险–有可能将全部用户删除
delete from mysql.user where user=’oldboy’ and host=’10.0.0.%’; 企业里:尽量不要删除用户,锁定用户=禁用
alter user oldgirl@’10.0.0.%’ account lock; 锁定
alter user oldgirl@’10.0.0.%’ account unlock; 解锁 4)修改用户 usermod = alter
修改用户密码
alter user oldboy@’10.0.0.%’ identified with mysql_native_password by ‘123’; 补充:8.0版本与之前数据库版本 用户管理区别:
区别一:数据库密码加密方式不同
8.0 caching_sha2_password
之前版本 mysql_native_password 区别二:新版数据库不能在授权时创建用户
之前数据库版本:
grant all on . to oldgirl@’localhost’ identified by ‘123’;
— 一条命令,完成了创建用户,并授权操作
show grants for oldgirl@’localhost’;
select * from mysql.user\G 目前数据库版本:
create user oldboy@’localhost’ identified by ‘123’;
grant all on . to oldboy@’localhost’;
05 数据库服务授权管理
授权管理作用:安全 区别用户能力
数据库中有什么权限:
show privileges; — 查看所有权限信息
第一列:Privilege — 所有权限信息
第二列:Context — 权限操作对象
第三列:Comment — 权限解释说明
常用权限信息:参考截图
PS:赋予用户所有权限,all=all privileges表示所有权限,但一个权限不会赋予Grant_priv
To give to other users those privileges you possess 不允许给其他用户授权
皇帝 — 年羹尧(荣耀)– 授权能力 玉玺
当创建出一个用户时,如果没有授权,也会有一个默认权限
mysql> create user oldbaby@’10.0.0.%’ identified by ‘123’;
Query OK, 0 rows affected (0.01 sec)
mysql> show grants for oldbaby@’10.0.0.%’ ;
+——————————————–+
| Grants for oldbaby@10.0.0.% |
+——————————————–+
| GRANT USAGE ON . TO oldbaby
@10.0.0.%
|
+——————————————–+
1 row in set (0.00 sec)
USAGE:No privileges – allow connect only — 创建用户之后,默认权限只允许用户登录数据库
如何设置权限:授权
MySQL> grant all on 授权对象范围 to 权限赋予用户信息
MySQL> grant all on * . * to blog@’192.168.30.%’;
授权 权限 库信息 表信息 用户 主机域
一般程序中,需要授权程序连接用户有:select insert update delete 博文–uri–数据库 blog.oldboy.com/xxx&id=02
如何回收权限:取消权限
MySQL> revoke delete on . from oldbaby@’192.168.30.%’;
回收权限 权限 拿走
mysql> show grants for oldbaby@’10.0.0.%’ ;
+———————————————————————+
| Grants for oldbaby@10.0.0.% |
+———————————————————————+
| GRANT SELECT, INSERT, UPDATE, DELETE ON . TO oldbaby
@10.0.0.%
|
+———————————————————————+
1 row in set (0.00 sec)
mysql> revoke delete on . from oldbaby@’10.0.0.%’;
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for oldbaby@’10.0.0.%’ ;
+————————————————————-+
| Grants for oldbaby@10.0.0.% |
+————————————————————-+
| GRANT SELECT, INSERT, UPDATE ON . TO oldbaby
@10.0.0.%
|
+————————————————————-+
1 row in set (0.00 sec)
06 数据库服务授权表介绍
授权表有什么用:可以核实用户身份(做验证) 可以核实用户权限 随便登录
user : 主要用于存储用户、主机域、密码、加密插件等信息,同时还存储了. 级别的权限(全局权限)
db: 主要用于存储用户、主机域等信息,同时还存储了单库级别的权限(局部权限)
tables_priv : 主要用于存储用户、主机域等信息,同时还存储了单表级别的权限(局部权限)
知识点补充:8.0版本新的权限管理功能 权限角色管理 == 将相同权限的用户整合为一个组 == 系统用户组
之前的版本,在设置权限信息时,是能针对用户设置权限
www数据库 oldboy-增删改查.其他管理权限 oldgirl-增删改查.其他管理权限 oldbaby-增删改查.其他管理权限
创建角色信息:
CREATE ROLE ‘admin’, ‘developer’;
CREATE ROLE ‘webapp’@’localhost’;
设置角色功能实践:
00 创建管理数据库信息
create database oldboy;
01 创建出角色组信息
create role oldboy_rw,oldboy_r;
02 设置角色的权限
grant select on oldboy.* to oldboy_r;
grant select,update,insert,delete on oldboy.* to oldboy_rw;
03 创建用户信息
create user user01@’%’ identified by ‘123’;
create user user02@’%’ identified by ‘123’;
04 实现用户与角色关联
grant oldboy_r to user01@’%’;
grant oldboy_rw to user02@’%’;
05 激活角色功能
方式一:手动激活角色
set default role all to user01@’%’;
set default role all to user02@’%’;
— 用管理员登录数据库,激活角色功能
select current_role()
— 相应用户登录数据库,查看确认角色功能是否激活(有角色信息)
方式二:自动激活角色
set global activate_all_roles_on_login=on;
— 临时配置,也可以将配置参数写入到配置文件中实现永久配置
07 数据库服务密码重置实践
忘记密码如何登录数据库:(root用户密码忘记)
1)关闭数据库服务
systemctl stop mysqld
2)采用跳过授权表登录数据库
mysqld_safe –skip-grant-tables –skip-networking &
— skip-grant-tables 表示忽略授权表启动
— skip-networking 忽略网络通讯方式启动
3)进入数据库修改重置密码
flush privileges; 可以实现将内存信息同步到磁盘 实现磁盘数据加载到内存
— 将授权表加载到内存中
alter user root@’localhost’ identified by ‘123’;
4)退出数据库并关闭服务
mysql> shutdown;
systemctl start mysql
5)测试密码信息
mysql -uroot -p123
08 数据库服务连接管理 延后
09 数据库服务应用配置 延后
10 数据库服务多实例构建 延后
作业:
01 如何编写mysql的systemctl启动文件;
02 安装好 5.6 5.7 数据库 — 数据库升级