mysql系列01
第一章节 数据库介绍
- 什么是数据?
在一个网站中,哪些可以被称之为数据?
咱们认为的数据:
文字、数字、符号、表格、图片、视频。。。。。
计算机认为的数据:
二进制(机器语言)
用来登录的数据有哪些?
用户 、密码 和 评论类 的数据有什么不一样吗?
用户 、密码该怎么存?
txt
excel
word
...
1亿用户信息该怎么存?
如果用以上方式会遇到什么问题?
不安全、查找不方便、管理、限制。
- 数据库管理系统(软件:DBMS)
2.1 数据库的发展历程
第一时代架构 : RDBMS时代
什么是RDBMS?
关系型数据库关系系统:Oracle 、 MSSQL 、 IBM DB2
第二时代架构: RDBMS(MySQL、PG、云数据库) + NoSQL(Not ONLY SQL)时代
数据量、业务量随着互联网的发展,变的越来越大。所以传统的RDBMS已经不能承载所有业务需求了。
NoSQL :MongoDB 、ES 、Redis
第三时代架构:
NewSQL 分布式数据库时代
Aliyun: PolarDB
Pincap: TiDB
2.2 了解实时数据库行业动态
问大家一个问题: 怎么去了解运维行业动态?
<1. 相关站点 : itpub 、 简书、csdn、51cto。
<2. 看招聘需求 :boss 、 拉钩。
❤️. 跟着软件版本走,关注比较活跃的软件。
<4. 加入一些社群和圈子。
数据库行业动态?
<1.
https://db-engines.com/en/ranking
面试题:
请你介绍以下你熟悉的数据库产品?
RDBMS : 关系型 Oracle 、MySQL、MSSQL、PG、DB2
NoSQL : 非关系型 MongoDB 、ES 、Redis
云产品: RDS 、 TDSQL
NewSQL: polarDB 、TiDB
你们公司都用了什么数据库产品?
注意: 一般用了云产品的话,很少自建数据库。
我们建议:
RDBMS : 关系型 Oracle 、MySQL、MSSQL、PG、DB2 (最多两种)
NoSQL : 非关系型 MongoDB 、ES 、Redis (一般互联网公司都有)
❤️. 亲自去参加数据库大会。
第二章节 MySQL介绍和安装
-
MySQL 产品线
1.1 分支
Oracle
MariaDB
Percona -
MySQL 企业版本选择
2.1 分支
E : 企业版 (收费),可以下载30天试用
C : 社区版 (开源)
2.2 社区版选择
免费服务期限: 1-5年
扩展服务期限: 6-10年
5.7 :一般建议升级到最新版本,5.7.18-5.7.30 最好是双数版。
5.6 :一般建议选用GA6-12月区间,5.6.34-max,最好是双数版本。
8.0 :一般建议使用8.0.18+
2.3 获取数据库软件
https://downloads.mysql.com/archives/community/
- 手撕 安装 MySQL 5.7.28 二进制版本
3.1 克隆虚拟机
IP: 10.0.0.51/24
hostname: db01
防火墙关闭
selinux关闭
3.2 清理历史环境
yum remove -y mariadb-libs
\rm -rf /etc/my.cnf*
3.2 创建用户
useradd mysql
3.3 创建相关目录并授权
mkdir -p /data/app /data/3306/data /data/3306/logs
chown -R mysql.mysql /data
3.4 上传 5.7.28 软件至/data/app,并解压、软连接
[root@db01 ~]# cd /data/app
[root@db01 app]# tar xf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
[root@db01 app]# ln -s mysql-5.7.28-linux-glibc2.12-x86_64 mysql
3.5 设置环境变量
vim /etc/profile
添加最后一行
export PATH=/data/app/mysql/bin:$PATH
生效配置:
source /etc/profile
3.6 安装关键依赖软件包
yum install -y libaio-devel
3.7 初始化数据(建库)
/data/app/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/data/app/mysql --datadir=/data/3306/data
命令作用:
将数据启动所需要的系统数据(/data/3306/data)
参数介绍:
--initialize-insecure 初始化核心参数(必加)
--user=mysql 初始化用户和组
--basedir=/data/app/mysql 软件安装目录
--datadir=/data/3306/data 数据存放位置
彩蛋1:
5.7 版本初始化参数介绍:
初始化 不安全
--initialize-insecure
说明:
初始化完成后是无密码的。
--initialize : 安全的初始化方式
说明:
1. 自动生成临时密码,第一次使用时需要修改此密码
2. 4种密码复杂度,12位。
彩蛋2:
5.7 初始化命令:
/data/app/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/data/app/mysql --datadir=/data/3306/data
5.6初始化区别()
/data/app/mysql56/scripts/mysql_install_db --user=mysql --basedir=/data/app/mysql --datadir=/data/3306/data
3.8 准备启动脚本
[root@db01 data]# cp /data/app/mysql/support-files/mysql.server /etc/init.d/mysqld
3.9 准备配置文件
[root@db01 data]# vim /etc/my.cnf
[mysqld]
user=mysql
basedir=/data/app/mysql
datadir=/data/3306/data
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock
3.10 启动数据库
[root@db01 data]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!
[root@db01 data]# service mysqld restart
Shutting down MySQL.. SUCCESS!
Starting MySQL. SUCCESS!
3.11 使用systemd管理mysql
[root@db01 data]# chkconfig --add mysqld
[root@db01 data]# /etc/init.d/mysqld stop
Shutting down MySQL.. SUCCESS!
[root@db01 data]# systemctl start mysqld
[root@db01 data]# mysql
[root@db01 data]# ps -ef |grep mysqld
root 17275 1 0 16:00 ? 00:00:00 /bin/sh /data/app/mysql/bin/mysqld_safe --datadir=/data/3306/data --pid-file=/data/3306/data/db01.pid
mysql 17416 17275 4 16:00 ? 00:00:00 /data/app/mysql/bin/mysqld --basedir=/data/app/mysql --datadir=/data/3306/data --plugin-dir=/data/app/mysql/lib/plugin --user=mysql --log-error=db01.err --pid-file=/data/3306/data/db01.pid --socket=/tmp/mysql.sock
root 17448 16288 0 16:00 pts/1 00:00:00 grep --color=auto mysqld
[root@db01 data]#
[root@db01 data]# netstat -tulnp |grep 3306
tcp6 0 0 :::3306 ::😗 LISTEN 17416/mysqld
[root@db01 data]# systemctl stop mysqld
[root@db01 data]# netstat -tulnp |grep 3306
3.12 基于initialize模式,修改临时密码
[root@db01 data]# mysqladmin -uroot -p password 123
Enter password:
=========================
彩蛋: 如果启动报错,如何排查?
[root@db01 data]# /etc/init.d/mysqld start
Starting MySQL.Logging to '/data/3306/data/db01.err'.
. ERROR! The server quit without updating PID file (/data/3306/data/db01.pid).
vim /data/3306/data/db01.err
---》 从后往前排查 [ERROR]信息。
2020-06-29T07:32:32.533458Z 0 [ERROR] InnoDB: The innodb_system data file 'ibdata1' must be writable
2020-06-29T07:32:32.533512Z 0 [ERROR] InnoDB: The innodb_system data file 'ibdata1' must be writable
2020-06-29T07:32:32.533523Z 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error
2020-06-29T07:32:33.139530Z 0 [ERROR] Plugin 'InnoDB' init function returned error.
2020-06-29T07:32:33.139840Z 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2020-06-29T07:32:33.140017Z 0 [ERROR] Failed to initialize builtin plugins.
2020-06-29T07:32:33.140055Z 0 [ERROR] Aborting
---》 得到结果: 权限问题
============================
第三章 上部:MySQL 基础管理
- 用户管理
1.1 作用
Linux :
登录系统
管理操作系统对象(文件)
MySQL :
登录数据库
管理数据库对象(表)
1.2 用户的定义方式(长成啥样子?)
Linux :
用户名: 字母、数字、特殊符号等组合
MySQL :
用户名@'白名单'
白名单?
一个或者多个IP的列表。作用是,在列表中存在的IP才能连接数据库。
oldguo@'localhost'
oldguo@'10.0.0.52'
oldguo@'10.0.0.%'
oldguo@'10.0.0.5%'
oldguo@'10.0.0.0/255.255.254.0'
oldguo@'%'
1.3 用户的管理
1.3.1 查询:
mysql> select user,host from mysql.user;
+---------------+-----------+
| user | host |
+---------------+-----------+
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+-----------+
mysql> select user,host,authentication_string ,plugin from mysql.user;
+---------------+-----------+-------------------------------------------+-----------------------+
| user | host | authentication_string | plugin |
+---------------+-----------+-------------------------------------------+-----------------------+
| root | localhost | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | mysql_native_password |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password |
| mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password |
+---------------+-----------+-------------------------------------------+-----------------------+
3 rows in set (0.00 sec)
如果记不住以上单词,可以执行以下命令获得
mysql> desc mysql.user;
1.3.2 创建:
需求: 通过 oldguo 用户,密码123 ,从10网段任意地址登陆MySQL
mysql> create user oldguo@'10.0.0.%' identified by '123';
mysql> select user,host,authentication_string ,plugin from mysql.user;
+---------------+-----------+-------------------------------------------+-----------------------+
| user | host | authentication_string | plugin |
+---------------+-----------+-------------------------------------------+-----------------------+
| root | localhost | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | mysql_native_password |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password |
| mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password |
| oldguo | 10.0.0.% | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | mysql_native_password |
+---------------+-----------+-------------------------------------------+-----------------------+
1.3.3 修改用户
mysql> alter user oldguo@'10.0.0.%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host,authentication_string ,plugin from mysql.user;
+---------------+-----------+-------------------------------------------+-----------------------+
| user | host | authentication_string | plugin |
+---------------+-----------+-------------------------------------------+-----------------------+
| root | localhost | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | mysql_native_password |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password |
| mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password |
| oldguo | 10.0.0.% | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | mysql_native_password |
+---------------+-----------+-------------------------------------------+-----------------------+
4 rows in set (0.00 sec)
1.3.4 删除用户
mysql> drop user oldguo@'10.0.0.%';
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host,authentication_string ,plugin from mysql.user;
+---------------+-----------+-------------------------------------------+-----------------------+
| user | host | authentication_string | plugin |
+---------------+-----------+-------------------------------------------+-----------------------+
| root | localhost | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | mysql_native_password |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password |
| mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password |
+---------------+-----------+-------------------------------------------+-----------------------+
3 rows in set (0.00 sec)
- 权限管理
2.1 作用
控制用户,能够对数据库对象,做哪些操作.
2.2 定义方式
Linux 权限: r w x
MySQL 权限: 命令即权限。
mysql> show privileges; ---》 查看MySQL中的权限列表
Alter
Alter routine
Create
Create routine
Create temporary tables
Create view
Create user
Delete
Drop
Event
Execute
File
Grant option
Index
Insert
Lock tables
Process
Proxy
References
Reload
Replication client
Replication slave
Select
Show databases
Show view
Shutdown
Super
Trigger
Create tablespace
Update
Usage
说明:
特殊的权限ALL:代表了以上所有权限结合,除了Grant option(给别人授权的功能)。
一般管理员用户会具备ALL,其他普通用户按需提供相应权限,一般DROP种类的权限不会给普通用户。
2.3 权限的管理
2.3.1 权限查询
MySQL中权限是属于用户的属性。
mysql> show grants for root@'localhost';
GRANT ALL PRIVILEGES ON . TO 'root'@'localhost' WITH GRANT OPTION
2.3.2 授权
GRANT 权限 ON 作用范围 TO 用户 IDENTIFIED BY '密码';
作用范围 ?
. : 全局范围 chmod -R /
wordpress.* : 单库范围 chmod -R /wordpress
wordpress.t1:单表范围 chmod -R /wordpress/a.txt
管理员用户授权:
mysql> grant all on . to oldboy@'10.0.0.%' identified by '123';
普通用户授权:
mysql> grant select,update,delete,insert on test.* to test@'10.0.0.%' idenfied by '123';
2.3.3 回收
注意: 不能通过重复授权修改权限,因为授权都是相加的关系。
mysql> revoke delete on test.* from 'test'@'10.0.0.%';
===================================
2.3.4 彩蛋 8.0 版本之后在 用户、权限管理方面的变化
<1. 必须先建好用户,再授权,grant 命令不再支持自动建用户,不支持设置密码。
<2. 建用户,密码加密插件发生变化,改为 :caching_sha2_password,有很多场景,修改修改为: mysql_native_password
比如: 第三方工具、主从、高可用、备份软件等。。。
mysql> alter user oldboy@'10.0.0.%' identified with mysql_native_password by '123';
❤️. 8.0 加入了role(角色)的概念。就是权限的组合。
- MySQL 连接管理
3.1 自带客户端命令
mysql 命令的使用
-u 用户名
-p 密码
-S Socket文件
-h IP地址
-P 端口号
-e 免交互执行命令
< 导入SQL脚本
IP地址连接串 (tcpip连接方法)
IP Port user passwd
mysql -u用户 -p密码 -h地址 -P端口
前提:
1. IP和端口正确的。
2. 提前创建好可以远程登录的用户
[root@db01 data]# mysql -uoldboy -p123 -h10.0.0.51 -P3306
[root@db01 data]# mysql -uoldboy -p123 -h10.0.0.51
本地Socket文件
前提:
1、 设置正确的Socket文件位置
2、 提前创建好localhost相关用户
3、 只提供给数据库本地连接的特殊方法
[root@db01 data]# mysql -uroot -p -S /tmp/mysql.sock
3.2 开发工具
sqlyog
navicat
workbench
3.3 应用连接