一、数据库介绍
1.什么是数据?
咱们认为的数据:
文字、数字、符号、表格、图片、视频…
计算机认为的数据:
二进制(机器语言)
2.数据库管理系统(软件DBMS)
- 数据库的发展历程
-
第一时代架构 : RDBMS时代
什么是RDBMS?
关系型数据库关系系统:Oracle 、 MSSQL 、 IBM DB2 -
第二时代架构: RDBMS(MySQL、PG、云数据库) + NoSQL(Not ONLY SQL)时代
数据量、业务量随着互联网的发展,变的越来越大。所以传统的RDBMS已经不能承载所有业务需求了。
NoSQL :MongoDB 、ES 、Redis -
第三时代架构:
NewSQL 分布式数据库时代
Aliyun: PolarDB
Pincap: TiDB
-
面试题
请你介绍以下你熟悉的数据库产品?
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介绍和安装
1. MySQL产品线
- 分支
Oracle
MariaDB
Percona
2.MySQL企业版本选择
-
分支
E : 企业版 (收费),可以下载30天试用
C : 社区版 (开源) -
社区版选择
免费服务期限: 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+
- 获取数据库软件
https://downloads.mysql.com/archives/community/
3.安装MySQL 5.7.28二进制版本
-
克隆虚拟机
IP: 10.0.0.51/24
hostname: db01
防火墙关闭
selinux关闭 -
清理历史环境
yum remove -y mariadb-libs
\rm -rf /etc/my.cnf*
- 创建用户
useradd mysql
- 创建相关目录并授权
mkdir -p /data/app /data/3306/data /data/3306/logs
chown -R mysql.mysql /data
- 上传 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
- 设置环境变量
vim /etc/profile
#添加最后一行
export PATH=/data/app/mysql/bin:$PATH
#生效配置:
source /etc/profile
- 安装关键依赖软件包
yum install -y libaio-devel
- 初始化数据(建库)
/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 数据存放位置
- 准备启动脚本
[root@db01 data]# cp /data/app/mysql/support-files/mysql.server /etc/init.d/mysqld
- 准备配置文件
[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
- 启动数据库
[root@db01 data]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!
[root@db01 data]# service mysqld restart
Shutting down MySQL.. SUCCESS!
Starting MySQL. SUCCESS!
- 使用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]# netstat -tulnp |grep 3306
tcp6 0 0 :::3306 :::* LISTEN 17416/mysqld
[root@db01 data]# systemctl stop mysqld
[root@db01 data]# netstat -tulnp |grep 3306
- 基于initialize模式,修改临时密码
[root@db01 data]# mysqladmin -uroot -p password 123
Enter password:
三、MySQL基础管理
1.用户的管理
- 查询
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;
- 创建
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)
- 删除用户
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.权限管理
-
作用
控制用户,能够对数据库对象做哪些操作 -
定义方式
命令即权限
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种类的权限不会给普通用户。
- 权限管理
MySQL中权限是属于用户的属性。
#权限查询
mysql> show grants for root@'localhost';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION
-
授权
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';
- 回收
注意: 不能通过重复授权修改权限,因为授权都是相加的关系。
mysql> revoke delete on test.* from 'test'@'10.0.0.%';
3.MySQL链接管理
-
自带客户端命令
#mysql 命令的使用 -u 用户名 -p 密码 -S Socket文件 -h IP地址 -P 端口号 -e 免交互执行命令 < 导入SQL脚本
-
IP地址连接串 (tcpip连接方法)
IP Port user passwd
mysql -u用户 -p密码 -h地址 -P端口
前提:- IP和端口正确的。
- 提前创建好可以远程登录的用户
[root@db01 data]# mysql -uoldboy -p123 -h10.0.0.51 -P3306
[root@db01 data]# mysql -uoldboy -p123 -h10.0.0.51