文章目录
- [0. 老男孩思想-老男孩名言警句](#0. 老男孩思想-老男孩名言警句)
- [1. 数据库服务安装部署](#1. 数据库服务安装部署)
-
- [1.1 下载安装包](#1.1 下载安装包)
- [1.2 系统环境准备](#1.2 系统环境准备)
-
- [1.2.1 关闭防火墙](#1.2.1 关闭防火墙)
- [1.2.2 关闭selinux](#1.2.2 关闭selinux)
- [1.2.3 安装依赖软件](#1.2.3 安装依赖软件)
- [1.2.4 卸载冲突软件](#1.2.4 卸载冲突软件)
- [1.3 安装程序](#1.3 安装程序)
-
- [1.3.1 上传软件包](#1.3.1 上传软件包)
- [1.3.2 配置环境变量](#1.3.2 配置环境变量)
- [1.3.3 创建数据库存储数据目录](#1.3.3 创建数据库存储数据目录)
- [1.3.4 创建数据库程序管理用户](#1.3.4 创建数据库程序管理用户)
- [1.3.5 初始化数据库](#1.3.5 初始化数据库)
- [1.4 编写服务配置文件](#1.4 编写服务配置文件)
- [1.5 启动数据库服务](#1.5 启动数据库服务)
- [2. 数据库服务密码管理](#2. 数据库服务密码管理)
-
- [2.1 设置密码](#2.1 设置密码)
- [2.2 修改密码](#2.2 修改密码)
-
- [2.2.1 命令,需原密码](#2.2.1 命令,需原密码)
- [2.2.2 sql语句,无需原密码](#2.2.2 sql语句,无需原密码)
- [2.3 重置密码(忘记密码的情况)](#2.3 重置密码(忘记密码的情况))
-
- [2.3.1 步骤一:备份数据库数据](#2.3.1 步骤一:备份数据库数据)
- [2.3.2 步骤二:关闭数据库服务程序](#2.3.2 步骤二:关闭数据库服务程序)
- [2.3.3 步骤三:采用免密方式启动数据库](#2.3.3 步骤三:采用免密方式启动数据库)
- [2.3.4 步骤四:重置密码](#2.3.4 步骤四:重置密码)
- [2.3.5 步骤五:重新启动数据库](#2.3.5 步骤五:重新启动数据库)
- [3. 数据库服务用户管理](#3. 数据库服务用户管理)
-
- [3.1 创建用户](#3.1 创建用户)
-
- [3.1.1 白名单](#3.1.1 白名单)
- [3.1.2 密码插件](#3.1.2 密码插件)
- [3.2 查看用户信息](#3.2 查看用户信息)
- [3.3 删除用户信息](#3.3 删除用户信息)
-
- [3.3.1 drop-删除单个用户](#3.3.1 drop-删除单个用户)
- [3.3.2 delete-批量删除用户](#3.3.2 delete-批量删除用户)
- [4. 数据库服务权限管理](#4. 数据库服务权限管理)
-
- [4.1 查看MySQL数据库的所有权限](#4.1 查看MySQL数据库的所有权限)
- [4.2 基础权限](#4.2 基础权限)
- [4.3 设置用户权限](#4.3 设置用户权限)
- [4.4 查看用户权限](#4.4 查看用户权限)
- [4.5 回收用户权限](#4.5 回收用户权限)
- [5. 数据库服务配置管理](#5. 数据库服务配置管理)
-
- [5.1 加载数据库配置文件](#5.1 加载数据库配置文件)
-
- [5.1.1 采用默认方式加载](#5.1.1 采用默认方式加载)
- [5.1.2 自定义加载配置文件](#5.1.2 自定义加载配置文件)
- [5.2 编写配置文件](#5.2 编写配置文件)
- [6. 数据库服务连接管理](#6. 数据库服务连接管理)
-
- 6.1数据库连接方式
- [6.2 数据库连接方法](#6.2 数据库连接方法)
-
- [6.2.1 数据库客户端命令](#6.2.1 数据库客户端命令)
- [6.2.2 数据库客户端工具-MySQL Workbench](#6.2.2 数据库客户端工具-MySQL Workbench)
- [7. 数据库服务实例创建](#7. 数据库服务实例创建)
-
- [7.1 为什么在系统中要运行服务的多实例?](#7.1 为什么在系统中要运行服务的多实例?)
- [7.2 相同版本数据库实现多实例部署](#7.2 相同版本数据库实现多实例部署)
-
- [7.2.1 步骤一:安装数据库程序(8.0.36)](#7.2.1 步骤一:安装数据库程序(8.0.36))
- [7.2.2 步骤二:编写配置文件](#7.2.2 步骤二:编写配置文件)
- [7.2.3 步骤三:初始化不同数据库](#7.2.3 步骤三:初始化不同数据库)
- [7.2.4 步骤四:启动多实例数据库进程](#7.2.4 步骤四:启动多实例数据库进程)
- [8. 思维导图](#8. 思维导图)
0. 老男孩思想-老男孩名言警句
- 技术的提升仅是量的积累,思想的提升才是质的飞跃
- 成功绝非偶然,而是正确选择和持续努力后的必然
- 成功最有效的途径就是不断的和有经验的、成功的人学习
- 学习成功人士的思维和习惯,是成功的捷径
- 要做别人不敢做、做不到的事,才能从竞争者胜出
- 自己最不想改变的,往往是自己最需要改变的;要多接收、多学习他人的思维或习惯
- 找一个能让自己快速成长的企业,比多1-2千工资更重要
- 身份影响认知,气度主导格局,性格决定命运
- 超越自我,就是做自己不想做的事
- 永远不要试图改变一个人,只能去包容他
- 如果自己不能成为大佬,可以先成为大佬的赞美者

1. 数据库服务安装部署
- 博客:
MySQL数据库服务安装部署 - aiweiwei24 - 博客园](https://www.cnblogs.com/oldboy-heqing/articles/19024691)
[CentOS7.9使用yum方式安装mysql8.0.27(2022最新版) - 老男孩老师 - 博客园](https://www.cnblogs.com/oldboy666/p/15559963.html)
00章节-MySQL数据库服务安装部署.pdf 链接: https://pan.baidu.com/s/19QqQnCOkcrL-ao2Iu9L05A?pwd=k3m5 提取码: k3m5
01章节-MySQL数据库存储服务概述.pdf 链接: https://pan.baidu.com/s/19aXuUnqNMt57AlHCOb7ywA?pwd=ip8t 提取码: ip8t
1.1 下载安装包
官网:MySQL


- 下载历史版本:
[MySQL :: Download MySQL Community Server (Archived Versions)](https://downloads.mysql.com/archives/community/)

- 软件包:
mysql-8.0.36-linux-glibc2.12-x86_64.tar.xz 链接: https://pan.baidu.com/s/1lnrLcEVtlj_SriZzm1SScw?pwd=5m74 提取码: 5m74
1.2 系统环境准备
- 系统:kylin v10
shell
[root@db01 ~]# uname -r
4.19.90-52.22.v2207.ky10.x86_64
[root@db01 ~]# cat /etc/os-release
NAME="Kylin Linux Advanced Server"
VERSION="V10 (Lance)"
ID="kylin"
VERSION_ID="V10"
PRETTY_NAME="Kylin Linux Advanced Server V10 (Lance)"
ANSI_COLOR="0;31"
1.2.1 关闭防火墙
shell
[root@db01 ~]# systemctl stop firewalld.service
[root@db01 ~]# systemctl disable firewalld.service
[root@db01 ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
1.2.2 关闭selinux
shell
# 临时关闭
[root@db01 ~]# setenforce 0
setenforce: SELinux is disabled
# 永久关闭
[root@db01 ~]# vim /etc/selinux/config

shell
# 查看selinux状态
[root@db01 ~]# getenforce
Disabled
1.2.3 安装依赖软件
yum install -y libaio-devel

1.2.4 卸载冲突软件
- yum remove `rpm -qa |grep mysql`
- yum remove `rpm -qa |grep mariadb`

1.3 安装程序
- 安装路径:
/usr/local/
1.3.1 上传软件包


shell
# 解压
[root@db01 /usr/local]# tar xf mysql-8.0.36-linux-glibc2.12-x86_64.tar.xz
# 创建软链接
[root@db01 /usr/local]# ln -s mysql-8.0.36-linux-glibc2.12-x86_64 mysql
1.3.2 配置环境变量
export PATH="$PATH:/usr/local/mysql/bin"

shell
[root@db01 /usr/local]# vim /etc/profile
[root@db01 /usr/local]# source /etc/profile
# 查看当前数据库版本
[root@db01 /usr/local]# mysql -V
mysql Ver 8.0.36 for Linux on x86_64 (MySQL Community Server - GPL)
1.3.3 创建数据库存储数据目录
shell
[root@db01 /usr/local]# mkdir -p /data/3306/data/
1.3.4 创建数据库程序管理用户
shell
[root@db01 /usr/local]# useradd mysql -M -s /sbin/nologin
useradd:用户"mysql"已存在
[root@db01 /usr/local]# chown -R mysql:mysql /data/3306/data/
1.3.5 初始化数据库
- 生成数据库的默认数据
- 查看帮助手册:
mysqld --help --verbose

- 命令:
mysqld --initialize-insecure --datadir=/data/3306/data--user=mysql --basedir=/usr/local/mysql


- 数据库初始化不同版本差异
版本信息 | 命令信息 | 初始化操作参数 | 备注说明 |
---|---|---|---|
5.5 5.6 | mysql_install_db | 初始化的命令不一致,参数相同(无管理员密码) | |
5.7 8.0 | mysqld | --initialize-insecure | 表示不安全方式初始化(无管理员密码) |
--initialize | 表示安全方式初始化(有随机默认管理员密码) |
1.4 编写服务配置文件
shell
[root@db01 ~]# vim /etc/my.cnf
[root@db01 ~]# cat /etc/my.cnf
[mysql]
socket=/tmp/mysql.sock
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3306/data
socket=/tmp/mysql.sock
1.5 启动数据库服务
- 早先的Linux系统的各种服务不是通过systemctl管理的,而是通过脚本控制的,这些脚本一般放在/etc/init.d/目录下
shell
# mysql启动管理脚本文件
[root@db01 ~]# file /usr/local/mysql/support-files/mysql.server
/usr/local/mysql/support-files/mysql.server: POSIX shell script, ASCII text executable
[root@db01 ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
# 启动mysql服务
[root@db01 ~]# /etc/init.d/mysqld start
Starting MySQL.. SUCCESS!
[root@db01 ~]# /etc/init.d/mysqld status
SUCCESS! MySQL running (8311)
# 检查
[root@db01 ~]# ps -ef |grep [m]ysql
root 8160 1 0 21:22 pts/1 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/3306/data --pid-file=/data/3306/data/db01.pid
mysql 8311 8160 5 21:22 pts/1 00:00:01 /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@db01 ~]# ss -lntup |grep [m]ysql
tcp LISTEN 0 70 *:33060 *:* users:(("mysqld",pid=8311,fd=22))
tcp LISTEN 0 128 *:3306 *:* users:(("mysqld",pid=8311,fd=24))

- 设置MySQL服务开机自启动:
chkconfig --add mysqld
2. 数据库服务密码管理
2.1 设置密码
- 命令:
mysqladmin -uroot password '密码'

2.2 修改密码
2.2.1 命令,需原密码
mysqladmin -uroot -p旧命令 password "新密码"

2.2.2 sql语句,无需原密码
alter user root@'localhost' identified by "新密码";

2.3 重置密码(忘记密码的情况)
- 无法进入数据库,且不知道原密码
2.3.1 步骤一:备份数据库数据
2.3.2 步骤二:关闭数据库服务程序
shell
[root@db01 ~]# /etc/init.d/mysqld stop
Shutting down MySQL. SUCCESS!
[root@db01 ~]# /etc/init.d/mysqld status
ERROR! MySQL is not running
2.3.3 步骤三:采用免密方式启动数据库
- 类似于Linux系统的救援模式
- 命令:
mysqld --skip-grant-tables &
- --skip-grant-tables: 跳过授权表(忽略数据库验证机制)

2.3.4 步骤四:重置密码
- 当前已关闭授权表验证机制,在修改密码之前还需加载授权表
- 重新加载权限表:
FLUSH PRIVILEGES;

2.3.5 步骤五:重新启动数据库

3. 数据库服务用户管理
3.1 创建用户
语法:create user 用户名@'白名单' identified with 密码插件 by '密码';
3.1.1 白名单
- 作用一:用于指定用户登录数据库的方式
- 本地登录:localhost
- 远程登录:10.0.0.10、10.0.0.%、%
- 作用二:限制指定的用户才能登录数据库
- 限制某个主机地址:10.0.0.100
- 限制C类网络地址:192.168.1.%
- 限制B类网络地址:172.16.%
- 限制A类网络地址:10.%
- 不做限制:%

3.1.2 密码插件
作用:增加数据库密码的安全性
- 查看用户的密码信息:
select user,host,authentication_string,plugin from mysql.user;

- 密码插件设置方式:
mysql_native_password
:8.0版本前默认密码加密方式caching_sha2_password
:8.0版本后默认密码加密方式
3.2 查看用户信息
- 语句:
select user,host,authentication_string,plugin from mysql.user;
select * from mysql.user\G
:分行显示数据
3.3 删除用户信息
3.3.1 drop-删除单个用户
- sql语句:
drop user 用户名@'白名单';

3.3.2 delete-批量删除用户
- sql语句:
delete from mysql.user where user='用户名';

4. 数据库服务权限管理
4.1 查看MySQL数据库的所有权限
- 命令:
show privileges;

4.2 基础权限
Privilege(权限) | Context(管理对象) | Comment(解释) |
---|---|---|
Alter | Tables | 管理表的字段、索引 |
Create | Databases,Tables,Indexes | 可以创建数据库、表、索引 |
Create user | Server Admin(管理员) | 可以创建新用户 |
Drop | Databases,Tables | 可以删除数据库、表、视图 |
Delete | Tables | 可以删除表中数据行 |
Insert | Tables | 可以向表中添加数据 |
Update | Tables | 可以修改表中数据 |
Select | Tables | 可以查询表中数据 |
Usage | Server Admin | No privileges(没有任何操作能力)- allow connect only 使用此权限可以连接数据库 |
4.3 设置用户权限
语法:grant 权限信息 on 对象信息(数据库和表) to 用户名@'白名单';
各个权限用','隔开,表示所有权限可使用'all'关键字;
数据库和表可以使用通配符:'*'
- 对于用户:skx@'localhost',设置该用户对blog数据库有创建、删除的权限,以及对数据库中表有增删改查的权限。
- sql语句:
grant Create,Drop,Delete,Insert,Update,Select on blog.* to skx@'localhost';

4.4 查看用户权限
语法:show grants for 用户名@'白名单';

4.5 回收用户权限
- 添加权限直接使用权限设置语句即可。
回收权限语法:revoke 权限信息 on 对象信息 from 用户名@'白名单';
- 对于skx@'localhost'用户,回收Drop权限
- sql语句:
revoke Drop on blog.* from skx@'localhost';

5. 数据库服务配置管理
5.1 加载数据库配置文件
- 配置文件:my.cnf
5.1.1 采用默认方式加载
- 官方定义配置文件可以放置的路径

5.1.2 自定义加载配置文件
- 关闭mysql服务,并自定义配置文件
shell
[root@db01 ~]# /etc/init.d/mysqld stop
Shutting down MySQL.. SUCCESS!
[root@db01 ~]# mv /etc/my.cnf /data/3306/mysql.conf
- 启动mysql服务,指定配置文件位置:
mysqld --defaults-file=/data/3306/mysql.conf &

5.2 编写配置文件

6. 数据库服务连接管理
6.1数据库连接方式
- 本地连接:必须设置好socket(套接字文件 确认客户端使用套接字文件和服务端创建的套接字文件一致即可)
mysql -uroot -pxiaoQ123 -S /tmp/mysql3306.sock
- 远程连接:设置好TCP、IP信息
mysql -uroot -pxiaoQ123 -h10.0.0.51 -P3306
6.2 数据库连接方法
6.2.1 数据库客户端命令
mysql -uroot -pxiaoQ123 -S /tmp/mysql3306.sock -- 本地连接
mysql -uroot -pxiaoQ123 -h10.0.0.51 -P3306 -- 远程连接
弊端:无法实现命令提示或补全功能
6.2.2 数据库客户端工具-MySQL Workbench
- 优点:可以图形化操作管理数据库,操作管理简便
- 官网地址:
[MySQL :: Download MySQL Workbench](https://dev.mysql.com/downloads/workbench/)


- 软件包:
mysql-workbench-community-8.0.43-winx64.msi 链接: https://pan.baidu.com/s/1I7dpk6_GdISOa3mobRmvpw 提取码: 5ki8
- 创建root远程连接用户

- 使用客户都工具连接数据库

- 查看某张表

7. 数据库服务实例创建
数据库实例就是数据库服务的进程
- 数据库服务系统环境中,可以有多个数据库实例,称为数据库多实例
7.1 为什么在系统中要运行服务的多实例?
- 类似于虚拟化、docker,更充分的使用系统硬件资源
- 可以将数据库资源进行隔离,不同的业务数据存放在不同的数据库中
7.2 相同版本数据库实现多实例部署
- 注意事项:
- 配置文件不同
- socket套接字文件不同
- 端口不同
- 启动的进程不同
7.2.1 步骤一:安装数据库程序(8.0.36)
7.2.2 步骤二:编写配置文件
shell
# 创建不同实例的数据存储目录
mkdir -p /data/{3307..3309}/data
# 配置文件
cat >> /data/3307/mysql.conf <<EOF
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3307/data
socket=/tmp/mysql3307.sock
port=3307
mysqlx=0
EOF
cat >> /data/3308/mysql.conf <<EOF
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3308/data
socket=/tmp/mysql3308.sock
port=3308
mysqlx=0
EOF
cat >> /data/3309/mysql.conf <<EOF
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3309/data
socket=/tmp/mysql3309.sock
port=3309
mysqlx=0
EOF
7.2.3 步骤三:初始化不同数据库
shell
mv /etc/my.cnf /etc/my.cnf.bak
mysqld --initialize-insecure --datadir=/data/3307/data --user=mysql --basedir=/usr/local/mysql
mysqld --initialize-insecure --datadir=/data/3308/data --user=mysql --basedir=/usr/local/mysql
mysqld --initialize-insecure --datadir=/data/3309/data --user=mysql --basedir=/usr/local/mysql
7.2.4 步骤四:启动多实例数据库进程
shell
mysqld --defaults-file=/data/3307/mysql.conf &
mysqld --defaults-file=/data/3308/mysql.conf &
mysqld --defaults-file=/data/3309/mysql.conf &

shell
# 登录数据库
mysql -S /tmp/mysql3307.sock
mysql -S /tmp/mysql3308.sock
mysql -S /tmp/mysql3309.sock
8. 思维导图
https://kdocs.cn/join/gpuxq6r?f=101\\r\\n邀请你加入共享群「老男孩教育Linux运维99期-孙克旭」一起进行文档协作
Linux系统运维班课程-Day01-数据库课程知识梳理.xmind 链接: https://pan.baidu.com/s/1BTKZu-cBNeAHjkvL9FCZYw?pwd=s7ec 提取码: s7ec