DBA-70-day01

学习DBA得大纲


课程大纲

第一章节 数据库介绍


1. 什么是数据?

在一个网站中,哪些可以被称之为数据?

咱们认为的数据:

文字、数字、符号、表格、图片、视频。。。。。

计算机认为的数据:

二进制(机器语言)

用来登录的数据有哪些?

用户 、密码 和 评论类 的数据有什么不一样吗?

用户 、密码该怎么存?

txt

excel

word

...

1亿用户信息该怎么存?

如果用以上方式会遇到什么问题?

不安全、查找不方便、管理、限制。

2. 数据库管理系统(软件: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  、 拉钩。

<3. 跟着软件版本走,关注比较活跃的软件。

<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 (一般互联网公司都有)

<2.

http://www.itdks.com/

<3. 亲自去参加数据库大会。

3. 数据库行业-岗位

3.1 方向

(1) 中级运维DBA

(2) 数据库技术支持(云厂商)

开发DBA :

1-2 开发语言 ,了解业务、 高级开发能力(建模、存储过程、函数、触发器、事件、视图。。。)

数据库架构师

解决方案工程师

....

参考:

https://www.jianshu.com/p/e5f65344227b

3.2 职业素养和岗位要求

人品 : 三观要正。

不要出现恶意删库事件。

严谨: 

理论支撑

实践检验

反复斟酌

收起你的好奇心!!!

提前登录号,用户、地址、端口脱敏。

细心(态度):

把最简单的事情做的最漂亮、最专业的。

分享心:

写文章、写博客、录视频发布到互联网。

熟悉Linux操作系统 :

基础命令(目录文件、用户权限、磁盘、性能指标命令)

服务管理(LNMPT 、Ansible、zabbix监控)

shell 、Python(以后扩展)、JAVA(以后扩展)、C++(以后扩展)

云计算(Docker、K8s)

数据库知识: 思维导图。

熟悉行业 : 把控行业实时动态

熟悉业务:产品功能+用户行为。

拥抱 开源、源码。

第二章节 MySQL介绍和安装

1. MySQL 产品线

1.1 分支

Oracle

MariaDB

Percona

2.  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/

3. 手动 安装 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.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. 权限管理

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';

<3. 8.0 加入了role(角色)的概念。就是权限的组合。

3. 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 应用连接

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352