主要概述

  1. 数据库服务概述介绍

  2. 数据库服务安装部署

  3. 数据库服务初始化介绍

  4. 数据库服务用户管理

  5. 数据库服务授权管理

  6. 数据库服务授权表介绍

  7. 数据库服务密码重置

  8. 数据库服务连接管理

  9. 数据库服务应用配置

  10. 数据库服务多实例构建

1. 数据库服务概述介绍

1.1 企业中为什么需要数据库

数据:图片 文字 视频 用户名 密码......... 地址 人类识别 --- 保存

数据:二进制信息 ------保存-----磁盘中

1.2 数据库服务作用

  • 可以实现数据的稳定存储

  • 可以分析管理数据的信息

1.3 数据库服务分类

  1. 关系型数据库:二维表数据库==excel

代表产品:Mysql Oracle Mariadb SQLserver PostgreSQL(越来越火了)

  1. 非关系型数据库:提高数据存储和读取的效率 辅助关系型数据库,解决高并发访问问题

key value 键值对

代表产品:redis mongodb memache ES(日志存储)

  1. 新型数据库 分布式

代表产品:OceanBase PolarDB

数据参考:

https://www.modb.pro/dbRank

数据参考:

https://db-engines.com/en/ranking

2. 数据库安装部署

2.1 数据库版本应用

  1. 数据库版本应用

官网地址:MySQL :: MySQL Downloads

C版: 社区版==免费版

E版: 企业版==收费版

Cluster 集群版==收费版

作者比较熟悉8.0.26数据库版本,所以后续该版本为例讲解

2.2 数据库软件的安装方式

  1. 利用yum源安装 ---只下载最新版

更新yum源:MySQL :: MySQL Community Downloads

  1. 利用rpm安装

离线安装 ---依赖问题

  1. 源码安装

编译安装 -----时间问题

  1. 二进制安装

解压即用

依赖需要解决

二进制安装步骤:

  1. 系统环境准备:

虚拟主机环境:2核 4G 100G

系统配置说明:

网络地址:10.0.0.51

主机名称:db01

安装依赖包:

针对centos8的操作系统:

yum install -y libaio-devel

yum install -y ncurses-compat-libs

针对Ubuntu操作系统:

apt-get install libncurses5

apt-get install libaio1


  1. 上传压缩包

## 解压
tar xf mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz

mv mysql-8.0.26-linux-glibc2.12-x86_64 /usr/local/

## 软连接
ln -s /usr/local/mysql-8.0.26-linux-glibc2.12-x86_64 /usr/local/mysql

## 环境变量
vim /etc/profile
export PATH="/usr/local/mysql/bin:$PATH"
source /etc/profile

## 验证
mysql -V
## 出现版本信息表示配置成功

  1. 初始化数据库

## 创建数据目录
mkdir -p /data/3306/data

## 创建用户
useradd mysql

## 授权
chown -R mysql. /data/3306/data/

## 初始化
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306/data

## 编写配置文件
vim /etc/my.cnf
[mysql]
socket=/tmp/mysql.sock
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3306/data
socket=/tmp/mysql.sock

##编写systemd自启动文件
vim /etc/systemd/system/mysqld.service
[Unit]
Description=MySQL server
After=network.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE=5000
Restart=on-failure
[Install]
WantedBy=multi-user.target

## 重新加载
systemctl  daemon-reload 
## 开机自启
systemctl  enable   mysqld.service
## 启动数据库
systemctl  start mysqld.service 

3. 数据库初始化介绍

8.0 5.7 数据库初始化操作:

安全模式话初始化

mysqld --initialize ................ ----可以利用随机密码登录

说明:临时密码只能用于临时登录密码,使用数据库的话还是需要重置密码的。

非安全模式初始化

mysqld --initialize-insecure............... -----可以免密码登录

非安全模式下设置密码

方法一:在命令行中设置

mysqladmin password '123456'

mysql -uroot -p password '123456'

## 修改密码
mysqladmin -uroot -p123456 password '123'

方法二:在数据库中设置

## 设置密码和修改密码一样
alter user root@'localhost' identified by '123456'

4. 数据库服务的用户管理

  1. 创建用户

创建用户的格式:'用户名称信息'@'白名单信息'

用户名称信息:创建用户的名称

白名单信息:主机域信息

本地——localhost/127.0.0.1

只允许本地登录


网段——10.0.0.0/24

-- 允许某个网段都可以登录

地址——192.168.0.5

-- 只允许某个主机登录

域名——xingzhibang.com

域名:xingzhibang.com

-- 只允许某个主机登录

允许远程登陆


解决数据库加密问题:客户端-----服务端

方法一:升级客户端 客户端加密方式升级

方法二:降级服务端 服务端加密方式降级

查看8.0 数据库加密方式

show variables like '%auth%';

早期默认的加密方式:mysql_native_password

目前最新的加密方式:caching_sha2_password

降级方式一:创建用户时指定加密方式

create user xingzhibang@'%' identified with mysql_native_password by '123';

降级方式二:修改加密方式

alter user xingzhibang@'%' identified with mysql_native_password by '123';

降级方式三:修改配置文件

vim /etc/my.cnf
[mysqld]
default_authentication_plugin=mysql_native_password 
## 重启数据库
  1. 删除用户

## 方式一:drop
drop user xingzhibang@'10.0.0.%';

## 方式二:delete
delete from mysql.user where user='xingzhibang' and host='10.0.0.%';

在企业中:尽量不要删除,锁定用户=禁用

## 锁定xinghzibang这个用户
alter user xingzhibang@'localhost' account lock;
## 解锁xingzhibang这个用户
alter user xingzhibang@'localhost' account unlock;
  1. 修改用户

修改用户的密码:

alter user xingzhibang@'localhost' identified with mysql_native_password by '123';
## 其中mysql_native_password为密码的插件,看情况添加

补充:8.0版本和之前数据库版本的区别 用户管理区别

  • 区别一:

数据库密码的加密方式不同:

8.0及以后----------------caching_sha2_password

之前版本-----------------mysql_native_password

  • 区别二:新版数据库不能在授权时创建用户

之前版本:

grant all on *.* to xingzhibang@'localhost' identified '123';
##一条命完成授权和创建用户的动作

5. 数据库服务的授权管理

数据库有什么权限:

show Privileges; -------查看权限

第一列:Privileges -----所有权限

第二列:Context ------权限操作对象

第三列:Comment ------权限解释说明

说明:赋予用户所有权限,all=all privileges 表示所有权限,但是Grant_priv 的权限不会赋予。

当创建一个用户时,如果没有授权,也会有一个默认权限只允许用户登录数据库

如何授权?

grant all on 库信息.表信息   to  权限赋予用户信息
grant all on *.*  to xingzhibang@'localhost';

如何回收权限?

revoke delete on *.* from xingzhibang@'localhost';
## 回收删除权限

如何查看用户的权限?

show grants for root@'localhost';
## 查看root的权限

6. 数据库授权表介绍

授权表的作用:可以用户的身份和权限。

查看授权表:

use mysql;
show tables;

user:主要存储用户、主机域、密码、加密插等信息,同时还存储了*.*级别的权限(全局权限)。

db:主要用于存储用户、主机域、等信息,同时还存储了单库级别的权限(局部权限)。

tables_priv:主要用于存储用户、主机域信息,同时还存储了单表级别的权限(局部权限)。

补充:8.0版本新的权限管理功能 权限角色功能

之前的版本:在设置权限信息时,只能针对用户设置权限

设置角色功能实践:

  1. 创建管理数据库信息

## 创建名为xingzhibang的数据库
create database xingzhibang;
  1. 创建角色组信息

## 创建两个角色组信息分别是读写和只读权限
create role work_rw,work_r;
  1. 设置角色的权限

grant select,update,insert,delete  on xingzhibang.* to work_rw;
grant select on xingzhibang.* to work_r;
  1. 创建用户信息

## 管理员用户
create user admin@'%' identified by '123';
## 游客用户
create user guest@'%' identified by '123';
  1. 实现用户和角色关联

grant work_rw to admin@'%';
grant work_r to guest@'%';
  1. 激活角色功能(不激活无效)

set global activate_all_roles_on_login=on;
## 这里表示临时激活,也可以把activate_all_roles_on_login=on 参数放到my.cnf的配置文件里面

7. 数据库服务密码重置

这里的密码重置是数据库root的密码重置,如果是用户密码忘记了直接用root登录一下改一下就行了呀。

  • 关闭数据库服务

systemctl  status  mysqld 
ps -ef |gre
  • 跳过授权表登录数据库

mysqld_safe --skip-grant-tables --skip-networking  &
## --skip-grant-tables 跳过授权表
##  --skip-networking 跳过网络
  • 进入数据库重置密码

## 直接进入数据库,无需密码
mysql
## 加载授权表到内存中
flush privileges;
## 修改密码
alter user root@'localhost' identified by '123';
  • 退出数据库并关闭服务

## 在数据库中关闭数据库,类似于init 0
shutdwon;
## 重新启动数据库
systemctl  start mysqld
  • 测试密码信息

## 测试登录
mysql -uroot -p123

8. 数据库服务的连接管理

  1. 连接管理方式

  • 本地连接:unix 套接字 配置文件中:socket=/tmp/mysql.sock

ps:利用套接字文件,可以实现在一个系统中,不同的程序可以建立连接

  • 远程连接:socket(网络开发)---------> TCP/IP------->IP地址 端口信息

  1. 连接管理方法

  • 利用数据库自带的客户端命令实现连接

本地连接:mysql -uroot -p123 -S /tmp/mysql.socket

远程连接:mysql -uroot -p123 -h10.0.0.51 -P3306

  • 利用第三方数据库管理工具实现连接

远程连接:可以使用的远程工具(sqlyog navicat workbench dbserver)

9. 数据库服务的应用配置

  1. 服务进行配置有什么作用?

  • 实现服务运行启动

  • 实现某些功能作用

  1. 应用配置的三种方式

  • 利用编译安装过程实现配置

  • 编写配置文件信息

默认的配置文件:/etc/my.cnf、

配置文件的内容:

[mysql]
socket=/tmp/mysql.sock
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3306/data
socket=/tmp/mysql.sock
##  有[]的部分表示对客户端和服务端配置区域
##  没有[]部分表示具体的配置参数 mysql --help 查看

有[]的部分表示对客户端和服务端配置区域

客户端:[mysql] [mysqldump] -- [client]

服务端:[mysqld] [mysqld_safe]

没有[]的部分表示具体的配置参数 mysql --help查看

  • 利用启动命令参数实现配置功能

mysqld_safe --skip-grant-tables --skip-networking  &

启动数据库服务程序有两个进程:

mysqld_safe:父进程,接受任务信息

mysqd:子进程,处理任务信息 //. 数据库服务多实例构建

10. 数据库服务多实例构建

多实例:多个服务同时启动 跑不同的业务 互相独立

多实例作用:充分利用硬件资源

构建多实例实践:

  1. 多实例部署环境规划

实例信息编号

实例服务端口

实例存储路径

实例配置文件

套接字文件

mysql-01

3307

/data/3307/data

/data/3307/data/my.cnf

/tmp/mysql3307.sock

mysql-02

3308

/data/3308/data

/data/3308/data/my.cnf

/tmp/mysql3308.sock

mysql-03

3309

/data/3309/data

/data/3309/data/my.cnf

/tmp/mysql3309.sock

  1. 多实例部署环境

mkdir -p /data/330{7..9}/data
chown -R mysql:mysql /data/
  1. 进行不同实力的初始化

mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3307/data
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3308/data
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3309/data

## 把默认的配置文件移走,避免加载之前的配置文件 
mv /etc/my.cnf /etc/my.cnf.bak
  1. 编写配置文件

## 3307 配置文件 
vim /data/3307/data/my.cnf
[mysql]
socket=/tmp/mysql3307.sock
[mysqld]
user=mysql
port=3307
basedir=/usr/local/mysql
datadir=/data/3307/data
socket=/tmp/mysql3307.sock

## 3308 配置文件 
vim /data/33088/data/my.cnf
[mysql]
socket=/tmp/mysql3308.sock
[mysqld]
user=mysql
port=3308
basedir=/usr/local/mysql
datadir=/data/3308/data
socket=/tmp/mysql3308.sock

## 3309 配置文件 
vim /data/3309/data/my.cnf
[mysql]
socket=/tmp/mysql3309.sock
[mysqld]
user=mysql
port=3309
basedir=/usr/local/mysql
datadir=/data/3309/data
socket=/tmp/mysql3309.sock
  1. 多实例服务运行启动

mysqld_safe --defaults-file=/data/3307/data/my.cnf &
mysqld_safe --defaults-file=/data/3308/data/my.cnf &
mysqld_safe --defaults-file=/data/3309/data/my.cnf &

## 检查端口或者进程是否启动成功
  1. 进入多实例构建的数据库中

## 以3307为例,一定要-S指定套接字文件
mysql -S /tmp/mysql3307.sock
## 在3307中查看端口
select  @@port;