avatar

1.数据库介绍和MySQL安装

数据库介绍和MySQL安装

第1章 数据库管理系统(DBMS)

1.1 关系型数据库(RDBMS)

关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织

代表:ORACLEMySQLMSSQLPG

优点:

1、易于维护:都是使用表结构,格式一致;

2、使用方便:SQL语言通用,可用于复杂查询;

3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。

缺点:

1、读写性能比较差,尤其是海量数据的高效率读写;

2、固定的表结构,灵活度稍欠;

3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。

1.2 非关系型数据库(NoSQL)

非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等。五结构化 KV(Redis,memcache,Tair) 、 json(MongoDB,ES)

代表:RedisMongoDBESHBASEHadoop

优点:

1、格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。

2、速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘;

3、高扩展性;

4、成本低:nosql数据库部署简单,基本都是开源软件。

缺点:

1、不提供sql支持,学习和使用成本较高;

2、无事务处理;

3、数据结构相对复杂,复杂查询方面稍欠。

1.3 非关系型数据库的分类和比较:

1、文档型

2、key-value型

3、列式数据库

4、图形数据库

第2章 数据库架构演变

数据库架构演变:

第一代: RDBMS

第二代: RDBMS+NoSQL +分布式

第三代: NewSQL(分布式)

AliSQL(网站) + OB(蚂蚁金服)+ openstack+ Docker + K8s
RDS + PolarDB 

第3章 MySQL简介及产品线

3.1 MySQL行业主流版本

5.6 : 5.6.34,5.6.36,5.6.38,5.6.40

5.7 : 5.7.18,5.7.20,5.7.21,5.7.22,5.7.24 ,5.7.26
5.6.38,5.7.20 ====> 2017-09-13

8.0 :(现在开始研究新特性)
8.0.11 ,8.0.12 …..8.0.17

3.2 企业版本选择(MySQL分支版本),笔试题

Oracle:
MySQL官方版

红帽 :
MariaDB: 5.5 ,10.X

Percona:
PerconaDB

3.3 版本选择建议要上新环境

  1. 一般选择官方主流版本:5.6,5.7
  2. GA(稳定发布版)
  3. 6-12月的产品版本

面试题:

你们公司用什么版本数据库? 具体什么小版本号?

5.6.20 5.6.34 5.6.36 5.6.38 5.6.40
5.7.18 5.7.20 5.7.22

第4章 MySQL二进制安装

4.1 下载并上传解压MySQL软件

官网下载地址 https://dev.mysql.com/downloads/

1
2
3
cd /usr/local
tar xf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz #解压软件
mv mysql-5.7.26-linux-glibc2.12-x86_64 mysql

4.2 修改环境变量

1
2
3
4
vim /etc/profile
export PATH=/usr/local/mysql/bin:$PATH #添加到最后一行
source /etc/profile
mysql -V #检验环境变量生效

4.3 创建用户

1
2
yum remove mariadb-libs -y
useradd -s /sbin/nologin mysql

4.4 创建相关目录并授权

1
2
3
mkdir -p /data/mysql/data   #存放数据
mkdir -p /data/binlog #存放二进制日志
chown -R mysql.mysql /data /usr/local/mysql

4.5 数据初始化(建库)

(1)5.7+版本

1
2
yum -y install libaio-devel
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data

说明:

(1) –initialize

密码长度,至少12位.

密码复杂度4种 

密码过期时间180天 

自动生成一个临时密码

(2) –initialize-insecure

没有限制

(2)5.6+版本

1
/usr/local/mysql/scripts/mysql_install_db  --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data

4.6 准备启动脚本和配置文件

(0) 配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cat > /etc/my.cnf <<EOF
[mysqld]
basedir=/usr/local/mysql/
datadir=/data/mysql/data
socket=/tmp/mysql.sock
server_id=51
port=3306
secure-file-priv=/tmp
autocommit=0
log_bin=/data/binlog/mysql-bin
binlog_format=row
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
[mysql]
prompt=db01 [\\d]>
EOF

(1) sys-v (centos6)

1
2
3
4
5
6
7
8
9
10
11
12
cd /usr/local/mysql/support-files
cp mysql.server /etc/init.d/mysqld
[root@db01 ~]# cat /etc/my.cnf #配置文件
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql/data
server_id=51
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock
[root@db01 ~]# service mysqld start #启动服务

(2) 使用systemd管理mysql

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@db01 ~]# cat /etc/systemd/system/mysqld.service 
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000

注意:将原来模式启动mysqld先关闭,然后再用systemd管理。
[root@db01 ~]# systemctl start/stop/restart/status mysqld #启动服务

如何确实MySQL数据库是否启动(至少两种)?

1
2
3
4
5
mysql直接登录
mysqladmin ping
netstat -lntup|grep mysqld
ps -ef|grep mysqld
ss

4.7 设置管理员初始密码

1
2
3
4
5
6
7
[root@db01 ~]# mysqladmin -uroot -p password 123   #创建初始密码
[root@db01 ~]# mysqladmin -uroot -p123 password abcd #修改密码

mysql> alter user root@localhost identified by '456'; #登录到数据库改密码
mysql> desc mysql.user; #查看列信息
mysql> select user,host ,authentication_string from mysql.user; #查询用户信息
mysql> select user,host ,password from mysql.user; #(5.6以前的)

4.8 本地管理员密码忘记处理

(1) 关闭数据库

1
[root@db01 ~]# systemctl stop mysqld

(2) 启动到”安全模式”

1
[root@db01 ~]# mysqld --skip-grant-tables --skip-networking &

(3) 刷新授权表,改密码

1
2
mysql> flush privileges;
mysql> alter user root@'localhost' identified by '123456';

(4) 正常启动数据

1
2
[root@db01 ~]# pkill mysqld
[root@db01 ~]# systemctl start mysqld

第5章 MySQL基础管理

5.1 用户管理

5.1.1 用户的定义

1
2
3
4
5
6
7
8
9
10
Linux: 用户名字表示用户,例如oldguo等
MySQL: 用户名@'白名单',例如:root@'localhost'
白名单: 在白名单出现的IP,网段,主机名域名,才能登录数据库
例子:
oldguo@'localhost' #本机
oldguo@'%' #所有主机
oldguo@'10.0.1.51' #独立IP
oldguo@'10.0.1.%' #10.0.1.x/24 网段
oldguo@'10.0.1.0/255.255.254.0' #10.0.1.0/255.255.254.0网段
oldguo@'10.0.1.5%' #10.0.1.50-59

5.1.2 用户的作用

Linux :

登录系统
管理系统对象(文件,目录.....)

MySQL :

登录数据库
数据库对象(库,表,.....)

5.1.3 用户的管理命令

(1) 创建用户

1
2
mysql> create user oldguo@'10.0.1.%';
mysql> create user oldboy@'10.0.1.%' identified by '123';

(2) 查询用户

1
mysql> select user,host,authentication_string from mysql.user;

(3) 修改用户

1
mysql> alter user oldguo@'10.0.1.%' identified by '123';

(5) 删除用户

1
2
mysql> drop user oldboy@'10.0.1.%';
mysql> drop user oldguo@'10.0.1.%';

5.2 权限管理

5.2.1 权限的定义

1
2
3
4
5
6
7
8
9
10
11
12
Linux :  R   W   X
MySQL :
ALL
SELECT,INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE,
REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES,
LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT,
CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER,
EVENT, TRIGGER, CREATE TABLESPACE
with grant option

说明:
8.0新特性加入了role功能

5.2.2 权限的作用

权限的作用 : 控制用户,能够对数据库对象做哪些操作.

5.2.3 授权

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#格式
grant 权限 on 对象 to 用户 identified by '密码';
grant all on *.* to wordpress@'%' identified by '123';

说明:
以上命令只能8.0以前使用.
如果用户不存在,会自动被创建出来,并且能够自动设置密码.
8.0+版本,必须先见用户再授权.修改密码功能取消.
8.0的用户,密码,权限的新特性,自己了解一下.

*.* /
wordpress.* /wordpress/*
wordpress.t1 /wordpress/t1

例子:
(1) 创建和授权一个管理员用户admin,能够通过10.0.1.%网段管理数据库
mysql> grant all on *.* to admin@'10.0.1.%' identified by '123' with grant option;
(2) 授权一个业务用户oldboy,能够通过10.0.1%网段访问oldguo库下的所有表
mysql> grant select,update,insert,delete on oldguo.* to oldboy@'10.0.1.%' identified by '123';

5.2.4 查询权限

1
2
mysql> show grants for oldboy@'10.0.1.%';
mysql> show grants for admin@'10.0.1.%';

5.2.5 回收权限

1
mysql> revoke grant option on *.* from admin@'10.0.1.%';
文章作者: Wu Fei
文章链接: http://linuxwf.com/2020/04/15/1-%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BB%8B%E7%BB%8D%E5%92%8CMySQL%E5%AE%89%E8%A3%85/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WF's Blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论