MySQL-01-基础

第一章 数据库介绍

1. 什么是数据库?

业务中,敏感,安全和一致性要求高的.

2. 数据库种类

RDBMS : Oracle MySQL PG MSSQL NoSQL : MongoDB Redis ES NewSQL: TiDB
PolarXDB TDSQL

第二章 MySQL的介绍和安装

1. MySQL 分支

Oracle Percona Mariadb RDS TX

2. MySQL 企业版本选择

5.7 : 5.7.28+
8.0 : 8.0.18+

GA 6-12月版本,GA15-20版本以上的.

3. 获取软件

https://downloads.mysql.com/archives/community/

4. 安装MySQL 8.0.20

4.1 准备操作系统环境

准备一台全新的虚拟机

4.2 上传和解压

[root@db01 opt]# tar xf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz 	
[root@db01 opt]# ln -s /opt/mysql-8.0.20-linux-glibc2.12-x86_64 /usr/local/mysql
[root@db01 mysql]# vim /etc/profile
export PATH=/usr/local/mysql/bin:$PATH
[root@db01 mysql]# source /etc/profile
[root@db01 mysql]# mysql -V
mysql  Ver 8.0.20 for Linux on x86_64 (MySQL Community Server - GPL)

4.3 卸载无用软件

[root@db01 ~]# yum remove -y mariadb-libs 

4.4 创建用户

[root@db01 ~]# useradd mysql

4.5 创建目录并授权

[root@db01 ~]# mkdir -p /data/3306/data
[root@db01 ~]# chown -R mysql. /data

4.6 准备配置文件

[root@db01 ~]# vim /etc/my.cnf
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3306/data
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock

4.7 初始化MySQL系统数据

[root@db01 mysql]# yum install -y libaio-devel 
[root@db01 mysql]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306/data 

++++++++++++++++++++++++
mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
2020-12-14T10:25:50.587761Z 0 [ERROR] [MY-010457] [Server] --initialize specified but the data directory has files in it. Aborting.
++++++++++++++++++++++++

正确的输出: 
[root@db01 mysql]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306/data 
2020-12-14T10:27:26.083747Z 0 [System] [MY-013169] [Server] /opt/mysql-8.0.20-linux-glibc2.12-x86_64/bin/mysqld (mysqld 8.0.20) initializing of server in progress as process 2205
2020-12-14T10:27:26.176690Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2020-12-14T10:27:31.329930Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2020-12-14T10:27:34.098237Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
[root@db01 mysql]# 

4.8 准备启动脚本

[root@db01 support-files]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld


sys-v : 
[root@db01 support-files]# service mysqld restart
Shutting down MySQL.. SUCCESS! 
Starting MySQL... SUCCESS! 
[root@db01 support-files]# 


systemd: 
[root@db01 support-files]# systemctl enable mysqld
mysqld.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig mysqld on
[root@db01 support-files]# 

[root@db01 support-files]# systemctl restart  mysqld
[root@db01 support-files]# systemctl stop mysqld

第三章 MySQL 体系结构及基础管理

1. 体系结构

1.1 MySQL C/S工作模型

Server : mysqld  
Client : mysql ,mysqldump ,开发工具(sqlyog  navicat workbench),API

1.2 MySQL 实例

公司: boss + 经理 + 员工 + 办公区
实例: mysqld + master thread + 工作线程 + 预分配的内存 

在这里插入图片描述

1.3 mysqld程序结构

Server层 : 连接层  SQL层 
engine层 : FS

1.4 SQL语句的执行过程

在这里插入图片描述

1.5 MySQL物理存储结构认识

1.5.1 宏观认识
库---> 目录
表---> xxx.ibd
1.5.2 微观认识
引入:  Linux 文件系统如何应用的?

/dev/sdb ---> mkfs.xfs /dev/sdb ----> mount /dev/sdb /data   

extent:区(),连续的64个pages,默认1M.
page  :页,默认16KB,连续4个OS block 
block :块.默认4KB,连续的8个512字节

2. MySQL 基础管理

2.1 用户管理

2.1.1 作用?
登录数据库
管理数据库对象
2.1.2 定义
用户名@'白名单'

白名单? 
允许登录的IP地址列表.

oldguo@'localhost'   允许本地登录
oldguo@'10.0.0.%'    允许10.0.0.0/255.255.255.0
oldguo@'10.0.0.0/255.255.254.0'  
oldguo@'10.0.0.5%'    
2.1.3 用户的管理
a. 查询用户 
mysql> select user,host,plugin,authentication_string from mysql.user;

b. 创建用户
mysql> create user oldboy@'localhost';
mysql> create user oldguo@'localhost' identified by '123';
mysql> create user oldxu@'localhost' identified with mysql_native_password by '123';
注意: 

1. 
8.0之后,不再支持grant一次性创建用户授权了.必须先建用户后授权.
2. 
8.0之后,密码插件改为caching_sha2_password,早期版本是mysql_native_password


c. 修改用户
mysql> alter user oldguo@'localhost' identified by '123';
mysql> alter user oldguo@'localhost' identified with mysql_native_password by '123';
mysql> alter user oldboy@'localhost' account lock;
mysql>  alter user oldboy@'localhost' account unlock;


d. 删除用户 
mysql> drop user oldboy@'localhost';

2.2 权限管理

2.2.1 作用
限制用户能够对数据库对象干些什么事.
2.2.2 权限定义
命令.
mysql> show privileges;
ALL?  所有? 真的是所有吗?
不包含Grant option.
一般管理员才会拥有ALL权限.

应用用户一般具备以下权限即可.
select,update ,delete ,insert 
2.2.3 存哪?
授权表
user          : 全局级别
db            : 单库级别
tables_priv   : 单表级别

columns_priv
procs_priv
proxies_priv


Grant ALL on *.* to ......
    
*.*                 chmod -R 777 /
oldboy.*            chmod -R 777 /oldboy
oldboy.t1           chmod -R 777 /oldboy/t1
2.2.4 权限管理
a. 授权 grant

例子1:给oldguo@'localhost'授权为本地管理员.
解:
Grant ALL on *.* to oldguo@'localhost';

例子2: 给oldxu@'localhost' 授权为oldxu业务的应用用户
grant select,update,delete ,insert on oldxu.* to oldxu@'localhost' ;


b. 查询权限
mysql> show grants for oldxu@'localhost';
mysql> select * from mysql.db\G


c. 回收 revoke
select   ----> update
mysql> revoke delete on oldxu.* from oldxu@'localhost';

2.3 连接管理

2.3.1 自带客户端程序
a. socket 本地套接字文件
在哪? 
socket=/tmp/mysql.sock
应用: 
[root@db01 ~]# mysql -uoldguo -p123 -S /tmp/mysql.sock
前提: 
需要提前创建oldguo@'localhost'

b. TCP/IP 
前提: 
需要提前创建remote@'10.0.0.%'
mysql> create user remote@'10.0.0.%' identified by '123';
Query OK, 0 rows affected (0.02 sec)
mysql> grant all on *.* to  remote@'10.0.0.%';

应用:  
[root@db01 ~]# mysql -uremote -p123 -h10.0.0.51 -P3306

在这里插入图片描述

2.4 启动关闭

2.4.1 启动
mysqld &  
mysqld_safe  &  

[root@db01 data]# mysqld_safe --port=3333 &


面试题案例: 管理员root@'locahost' 丢失,怎么处理.
--skip-grant-tables 
--skip-networking 

a. 关闭数据库实例 
/etc/init.d/mysqld stop 

b. 特殊模式启动
mysqld_safe --skip-grant-tables  --skip-networking  &

c. 登录刷新授权表
[root@db01 data]# mysql
mysql> flush privilges;
d. 改密码 
mysql> alter user root@'localhost' identified by '123';

e. 重启到正常模式 
[root@db01 data]# /etc/init.d/mysqld restart
2.4.2 通用关闭方式
service mysqld stop   
/etc/init.d/mysqld stop     
mysql --> shutdown 
mysqladmin shutdown 

2.5 配置文件管理

2.5.1 配置文件的默认读取位置

[root@db01~]# mysqld --help --verbose | grep my.cnf
在这里插入图片描述

[root@db01~]# mysqld_safe --defaults-file=/opt/my.cnf &
2.5.2配置文件结构
[root@db01~]# cat /etc/my.cnf
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3306/data
socket=/tmp/mysql.sock
port=3306
[mysql]
socket=/tmp/mysql.sock
标签

【标签】
分类不同程序的参数
服务标签:【mysqld】【mysqld_safe】【server】
客户端标签:【mysql】【mysqldump】【client】

mysqld_safe 比 mysqld 参数更加丰富
说明:
在生产中,多实例情况下。初始化数据库,需要加载配置文件进行
例如

mysqld --defaluts-file=/opt/mysql.cnf --initialize-insecure

2.6 多实例

2.6.1应用场景

测试环境
大型架构
单实列节点配置8核16g

2.6.2测试环境
单节点多实例同版本

共用同一套软件启动三次mysqld
在这里插入图片描述

安装配置
①准备授权目录
[root@db01 ~]# mkdir -p /data/330{7..9}/data
[root@db01 ~]# chown -R  mysql. /data
② 配置文件编写
cat > /data/3307/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/usr/local/mysql 
datadir=/data/3307/data 
socket=/tmp/mysql3307.sock
port=3307
EOF

cat > /data/3308/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/usr/local/mysql 
datadir=/data/3308/data 
socket=/tmp/mysql3308.sock
port=3308
EOF


cat > /data/3309/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/usr/local/mysql 
datadir=/data/3309/data 
socket=/tmp/mysql3309.sock
port=3309
EOF
③初始化三份数据
mysqld --defaults-file=/data/3307/my.cnf --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3307/data
mysqld --defaults-file=/data/3308/my.cnf --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3308/data
mysqld --defaults-file=/data/3309/my.cnf --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3309/data
④启动
mysqld_safe --defaults-file=/data/3307/my.cnf  &
mysqld_safe --defaults-file=/data/3308/my.cnf  &
mysqld_safe --defaults-file=/data/3309/my.cnf  &

⑤测试
socket方式连接数据库
mysql -S /tmp/mysql3307.sock
mysql -S /tmp/mysql3307.sock
mysql -S /tmp/mysql3307.sock
netstat -lntup 检测端口
会发现启动了多个mysqld进程

在这里插入图片描述

单节点多实例多版本

多个不同版本软件启动mysqld
在这里插入图片描述

安装配置
①上传软件包到/opt下

在这里插入图片描述
在这里插入图片描述

② 准备授权目录
[root@db01 ~]# mkdir -p /data/335{6..7}/data
[root@db01 ~]# chown -R  mysql. /data
③软连接
ln -s /opt/mysql-5.6.46-linux-glibc2.12-x86_64 /usr/local/mysql56
ln -s /opt/mysql-5.7.30-linux-glibc2.12-x86_64 /usr/local/mysql57
④配置文件
cat >/data/3356/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/usr/local/mysql56
datadir=/data/3356/data
socket=/tmp/mysql3356.sock
port=3356
[mysql]
socket=/tmp/mysql3356.sock
EOF

cat >/data/3357/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/usr/local/mysql57
datadir=/data/3357/data
socket=/tmp/mysql3357.sock
port=3357
[mysql]
socket=/tmp/mysql3357.sock
EOF
⑤初始化
/usr/local/mysql57/bin/mysqld --defaults-file=/data/3357/my.cnf --initialize-insecure
/usr/local/mysql56/scripts/mysql_install_db --defaults-file=/data/3356/my.cnf --user=mysql --basedir=/usr/local/mysql56 --datadir=/data/3356/data
⑥启动
/usr/local/mysql57/bin/mysqld_safe --defaults-file=/data/3357/my.cnf  &
/usr/local/mysql56/bin/mysqld_safe --defaults-file=/data/3356/my.cnf  &
2.7 数据类型

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值