第一章 MySQL 大纲介绍

1、官方定义的MySQL DBA工作内容

(1)运维DBA
初级:各版本、各平台安装搭建、升级
中级:体系结构原理、基础管理(启动关闭、初始化配置文件管理、多实例管理、用户权限管理、基本SQL(增删改查))、
     日志管理、备份与恢复、主从复制(构建、状态监控) 
高级:高可用(MGR、InnoDB Cluster)、高性能(优化)
(2)开发DBA
懂至少一门开发语言 :JAVA、Python
基本SQL语句深入学习(增删改查)、数据库结构设计(建模)
高级SQL:存储过程、函数、触发器、视图、事件

2、MySQL课程-2019-03月-中级DBA要求(80%以上)

1)MySQL 5.7 安装部署(二进制)*****
    编译自己扩展
(2)MySQL升级步骤扩展 ***
(3)MySQL5.7 体系结构原理 *****
(4)MySQL基础管理  *****
(5)基础SQL语句使用 *****
(6)SQL高级应用  ***
(7)Information_schema获取元数据 ***
(8)索引、执行计划管理(基础优化)*****
(9)存储引擎  *****
(10)日志管理 *****
(11)备份与恢复 ******
(12)主从复制及架构演变 ******
(13)传统的高可用及读写分离(MHA&Atlas)****
(14)传统分布式架构设计与实现-扩展(Mycat--->DBLE,DRDS)**
(15)MySQL 5.7 高可用及分布式架构-扩展(MGR,InnoDB Cluster)***
(16)MySQL优化(安全、性能) ****
(17)MySQL 监控(zabbix、Open-falcon)    ****
 (18) RDS(阿里云课程)    *****

额外要会的:
    Redis
    mongodb     
了解: 
    PG
    Oracle  

3、DBA职业素养


3.1、人品

责任-----权利

3.2

3.2.1、严谨

磁带库----->备份软件-----17楼
数据库修改\删除类的命令时 再三考虑,而且要有理论或者实践的支撑

3.2.2 请收起你的好奇心!!!!!

注意规范:
脱库? 华住网(ip root 密码),“脱敏”!!!!!。
学会保护自己!!!

3.3、细心

把最简单的事情做的最漂亮,最专业。
不要怕成功的门很拥挤,因为很多人在半路就已经放弃了.
                                           ----oldguo                     

3.4、心态

别惹事,出事别怕事

3.5、熟悉操作系统(精通)

3.6、熟悉公司业务

业务?
    产品的功能
    用户的行为(热功能,热数据)      

3.7、熟悉行业

熟悉行业发展趋势
版本
数据库产品类型
https://db-engines.com/en/ranking

3.8、喜欢数据库

体验很重要

第二章: MySQL 介绍和安装

1、什么是数据?

数据:文字、图片、视频。。。人类认知的数据表现方式
计算机:二进制、16进制的机器语言
基于数据的重要性和复杂性的不同,我们可能有不同的管理方式。

哪些数据是适合存储到数据库的呢?
重要性比较高的
关系较复杂的数据

2、什么是数据库管理系统(DBMS)?

RDBMS: 关系型数据库管理系统
比较适合于,安全级别要求高的数据以及关系较复杂的数据

NoSQL:非关系型数据库管理系统
适合于高性能存取数据,一般是配合RDBMS进行使用的
针对大数据处理分析,分布式架构更加擅长

3、数据库管理系统种类

RDBMS  :
MySQL 、Oracle、MSSQL(SQL Server)、PG

NoSQL:Not Only SQL
键-值(key-value):Redis, memcached
文档(document):Mongodb

4-数据库产品时代演变

第一代数据库架构:
    RDBMS 关系型数据库时代 : 合的时代
    代表产品 :Oracle 、MSSQL 、MySQL

第二代数据库架构:拆的时代
    NoSQL  : Not Only SQL 时代
    代表产品: Redis 、MongoDB、ES 

第三代数据库架构: 合的时代 
    NewSQL  :新型数据库架构时代
    代表产品:
            阿里系列: OB 、PolarDB
            Pincap  : TiDB
            google  : spanner

5、MySQL简介及产品线

5.1 MySQL行业主流版本:

    5.6  
    5.7    
    8.0(现在开始研究新特性)

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

Oracle:
      MySQL官方版
红帽  :
      MariaDB
Percona:
      PerconaDB

 面试题 
    1. 请你介绍你熟悉的数据库产品?   你们公司用了哪些数据库产品?
    RDBMS : MySQL  、Oracle  、PG、 MSSQL
    NoSQL :  Redis  、MongoDB 、ES 、Memcached
    云数据库:RDS
    2. 你喜欢MySQL数据库吗? 平常如何学习的? MySQL需要具备哪些技能?
    热爱。
    官档 、源码、看书、视频、参加一些数据库大会。
    技能: 大纲

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

5.34MySQL 产品分支

3. 
Oracle MySQL  :C版 、 E版 、Cluster版
Percona MySQL :最接近于Oracle MySQL 
MariaDB       :从5.5+ 以后,10.x +版本
阿里:  RDS for MySQL 
腾讯:  TDSQL 
1.一般选择官方主流版本:5.6,5.7 
2.GA(稳定发布版)
3.6-12月的产品版本
--------------------------
4. MySQL的企业版本选择
5.7  : 一般选择最新GA版本  5.7.26   5.7.28 
5.6  : GA 6-12月之间的版本 
8.0  : 一般选择最新GA版本  8.0.17+


5.6 版本 2020 10月  常规、扩展服务全部停止
5.7 版本 2021 1月   常规服务停止.

5.4 课程版本:

5.7.20  二进制安装,其他安装方式自己扩展

5.5 如何获取MySQL软件

企业版:Enterprise  , 互联网行业一般不选择.
社区版本:选择
源码包:source code    .tar.gz   
通用二进制   
面试题:
你们公司用什么版本数据库? 具体什么小版本号?
5.6.20 5.6.34 5.6.36  5.6.38  5.6.40    
5.7.18  5.7.20  5.7.22

获取软件

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

[root@db01 app]# md5sum  mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
1daa30a32b99a92062f481bd3ef8694c  mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
[root@db01 app]# MD5: 1daa30a32b99a92062f481bd3ef8694c

diff a  b  

5、==MySQL二进==制安装

5.1.创建软件目录:

6.2.5 清理遗留环境 
# 检查是否有mariadb相关软件
[root@db01 ~]# rpm -qa|grep mariadb

# 如果有,清理掉 
yum remove mariadb-libs -y 

# 删掉/etc/my.cnf 已有的配置文件 
rm -rf /etc/my.cnf 
6.2.6 安装依赖包 
[root@db01 ~]# yum install -y libaio-devel 
[root@db01 ~]# mkdir -p  /data/app 
上传软件到此目录

5.2. 解压并改名为mysql

[root@db01 app]# mv mysql-5.7.20-linux-glibc2.12-x86_64 mysql
[root@China /data/app] # ln -s /data/app/mysql-5.6.46/  /data/app/mysql
[root@db01 app]# ls -l /app/mysql/
total 36
drwxr-xr-x  2 root root   4096 Mar  4 14:55 bin
-rw-r--r--  1 7161 31415 17987 Sep 13  2017 COPYING
drwxr-xr-x  2 root root     55 Mar  4 14:55 docs
drwxr-xr-x  3 root root   4096 Mar  4 14:55 include
drwxr-xr-x  5 root root    229 Mar  4 14:55 lib
drwxr-xr-x  4 root root     30 Mar  4 14:55 man
-rw-r--r--  1 7161 31415  2478 Sep 13  2017 README
drwxr-xr-x 28 root root   4096 Mar  4 14:55 share
drwxr-xr-x  2 root root     90 Mar  4 14:55 support-files

修改环境变量:

vim /etc/profile
[root@China /data/app/mysql] # export  PATH=/data/app/mysql/bin:$PATH
[root@db01 bin]# source /etc/profile

5.3. 建立mysql用户和组(如果已有可忽略)

 useradd mysql 

5.4. 创建相关目录并修改权限

[root@db01 ~]# mkdir -p /data/3306/data  #数据目录
[root@db01 ~]# useradd  mysql -M -s /sbin/nologin 
[root@db01 ~]# chown -R mysql.mysql /data

5.5 初始化数据(建库)

方法一:

初始化数据,初始化管理员的临时密码
mysqld --initialize  --user=mysql --basedir=/app/mysql --datadir=/data/mysql

   -----------------------------------------------
6.2.8 初始化数据
# 5.7+ 版本初始化 :
mysqld       --initialize-insecure      --user=mysql      --basedir=/data/app/mysql        --datadir=/data/3306/data 

有可能的报错: 
    1. libaio-devel 
    2.  [ERROR] --initialize specified but the data directory has files in it. Aborting.
    rm -rf /data/3306/data/*

img

image.png

报错原因: Linux系统中缺少libaio-devel 软件包
解决:
yum install -y libaio-devel

img

image.png

报错原因:/data/mysql 存在文件
解决:
\rm -rf /data/mysql/*

新特性重要说明:
5.7开始,MySQL加入了全新的 密码的安全机制:
1.初始化完成后,会生成临时密码(显示到屏幕上,并且会往日志中记一份)
2.密码复杂度:长度:超过12位? 复杂度:字符混乱组合
3.密码过期时间180天

方法二 :
初始化数据,初始化管理员的密码为空

[root@China /data/app] # rm -rf /data/3306/data/*

[root@db01 ~]# mysqld --initialize-insecure  --user=mysql --basedir=/app/mysql --datadir=/data/mysql

2019-04-18T03:37:44.042348Z 1 [Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
[root@db01 ~]# 

[root@db01 ~]# cd /data/mysql/

注释:5.6初始化的区别

[root@China /data/app] # /data/app/mysql/scripts/mysql_install_db   --user=mysql --basedir=/data/app/mysql --datadir=/data/3306/data 

5.6 书写默认配置文件

vim /etc/my.cnf
[mysqld]
user=mysql
basedir=/app/mysql
datadir=/data/mysql
server_id=6
port=3306
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock
prompt=3306 [\\d]>


------------------------------

              [mysqld]
user=mysql
basedir=/data/app/mysql
datadir=/data/3306/data
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock

5.7 配置启动脚本:

[root@db01 mysql]# cd /app/mysql/support-files
[root@db01 support-files]# ./mysql.server start
Starting MySQL.Logging to '/data/mysql/db01.err'.
 SUCCESS! 
cp mysql.server    /etc/init.d/mysqld

  ---------------------------------------------------- 
   6.2.10 准备启动脚本,启动数据库
[root@db01 data]# cp /data/app/mysql/support-files/mysql.server  /etc/init.d/mysqld 
[root@db01 data]# chkconfig --add mysqld
[root@db01 data]# systemctl start mysqld

5.8 使用systemd管理mysql

vim /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=/app/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000

注意:将原来模式启动mysqld先关闭,然后再用systemd管理。

systemctl  start/stop/restart/status   mysqld

6. 安装后的简单管理

[root@db01 ~]# mysqladmin -uroot -p password 123
Enter password: 
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.

5.6版本:
select user,password,host from mysql.user;
5.7 中用户基本信息
select user,authentication_string,host from mysql.user;
desc  mysql.user;

小结:
1.版本 (主流版本的GA时间了解一下)

5.6 5.7 
5.6.38   5.7.20 
20170913 
(1) 初始化方式变了
mysql_install_db   
mysqld  --initialize-insecure
(2) 用户安全
12180
4种复杂度

(3)密码字段
authentication_strings

2.安装方法:

二进制
源码
yum 

3.建库(初始化数据库)

mysqld --intialize-insecure --user=mysql --basedir=/app/mysql --datadir=/data/mysql 

4.简易的配制文件/etc/my.cnf

user 
basedir
datadir 
server_id
port
socket 
  1. 管理员密码
mysqladmin -uroot -p password xx

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

1. MySQL 的C/S模型工作结构
Client: 
    自带命令
    第三方工具
    API
Server : 
    TCP/IP
    Unix Socket

2. MySQL 的实例结构
实例: mysqld进程 + Master thread + worker thread(IO\SQL\Purge...)+ 预分配内存结构
公司: BOSS + 经理 + 员工 + 办公区域   

3. mysqld 核心程序工作原理
3.1  server 层      ----> Linux  OS
3.1.1 连接器 
3.1.2 SQL层
3.2  engine 层      ----> 文件系统

终结篇

第一章节 MySQL 的介绍及规划实施

1. 数据库产品时代演变
第一代数据库架构:
    RDBMS 关系型数据库时代 : 合的时代
    代表产品 :Oracle 、MSSQL 、MySQL

第二代数据库架构:拆的时代
    NoSQL  : Not Only SQL 时代
    代表产品: Redis 、MongoDB、ES 

第三代数据库架构: 合的时代 
    NewSQL  :新型数据库架构时代
    代表产品:
            阿里系列: OB 、PolarDB
            Pincap  : TiDB
            google  : spanner

2. 熟悉数据库行业 
定期参加数据库大会
db-engines.com 
http://www.itdks.com/


休息20分钟:10:50继续

彩蛋: 面试题 
    1. 请你介绍你熟悉的数据库产品?   你们公司用了哪些数据库产品?
    RDBMS : MySQL  、Oracle  、PG、 MSSQL
    NoSQL :  Redis  、MongoDB 、ES 、Memcached
    云数据库:RDS
    2. 你喜欢MySQL数据库吗? 平常如何学习的? MySQL需要具备哪些技能?
    热爱。
    官档 、源码、看书、视频、参加一些数据库大会。
    技能: 大纲


3. MySQL 产品分支
Oracle MySQL  :C版 、 E版 、Cluster版
Percona MySQL :最接近于Oracle MySQL 
MariaDB       :从5.5+ 以后,10.x +版本
阿里:  RDS for MySQL 
腾讯:  TDSQL 
....

4. MySQL的企业版本选择
5.7  : 一般选择最新GA版本  5.7.26   5.7.28 
5.6  : GA 6-12月之间的版本 
8.0  : 一般选择最新GA版本  8.0.17+


5.6 版本 2020 10月  常规、扩展服务全部停止
5.7 版本 2021 1月   常规服务停止.


5. 获取软件
https://downloads.mysql.com/archives/

[root@db01 app]# md5sum  mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
1daa30a32b99a92062f481bd3ef8694c  mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
[root@db01 app]# MD5: 1daa30a32b99a92062f481bd3ef8694c

diff a  b  


6. 手撕 MySQL 5728 二进制版本规划和实施

6.1 准备Linux服务器 

克隆:Centos 7.6  1核  2G  100G 虚拟机环境
IP: 10.0.0.51/24 
hostname : db01 
防火墙: 关闭 
selinux : 关闭 

6.2 上传软件到指定目录
6.2.1 创建指定目录
mkdir -p  /data/app 

6.2.2 上传软件
mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz

6.2.3 解压制作软连接
[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

6.2.4 修改环境变量
echo "export PATH=$PATH:/opt/src/mysql/bin" >>/etc/profile

# 生效配置 
source /etc/profile  

# 验证
[root@db01 bin]# mysql -V
mysql  Ver 14.14 Distrib 5.7.28, for linux-glibc2.12 (x86_64) using  EditLine wrapper


6.2.5 清理遗留环境 
# 检查是否有mariadb相关软件
[root@db01 ~]# rpm -qa|grep mariadb

# 如果有,清理掉 
yum remove mariadb-libs -y 

# 删掉/etc/my.cnf 已有的配置文件 
rm -rf /etc/my.cnf 

6.2.6 安装依赖包 
[root@db01 ~]# yum install -y libaio-devel 

6.2.7 创建相关目录、用户,并做授权
[root@db01 ~]# mkdir -p /data/3306/data 
[root@db01 ~]# useradd mysql 
[root@db01 ~]# chown -R mysql.mysql /data

6.2.8 初始化数据
# 5.7+ 版本初始化 :
mysqld       --initialize-insecure      --user=mysql      --basedir=/data/app/mysql        --datadir=/data/3306/data 

有可能的报错: 
    1. libaio-devel 
    2.  [ERROR] --initialize specified but the data directory has files in it. Aborting.
    rm -rf /data/3306/data/*


6.2.9 准备配置文件 
vim /etc/my.cnf 

[mysqld]
user=mysql
basedir=/data/app/mysql
datadir=/data/3306/data
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock

6.2.10 准备启动脚本,启动数据库
[root@db01 data]# cp /data/app/mysql/support-files/mysql.server  /etc/init.d/mysqld 
[root@db01 data]# chkconfig --add mysqld
[root@db01 data]# systemctl start mysqld


彩蛋:   
    1. 5.6 和 5.7 在初始化方面的不同?
    5.6 版本:  
        /data/app/mysql56/scripts/mysql_install_db   --user=mysql --basedir=/data/app/mysql --datadir=/data/3306/data 
    初始化完成之后,启动数据库,无密码登陆
    5.7 版本:  
        mysqld   --initialize-insecure   --user=mysql   --basedir=/data/app/mysql  --datadir=/data/3306/data
    初始化完成之后,启动数据库,无密码登陆
    2. 5.7+ 两种初始化方式 
    (1) --initialize-insecure (不安全)
     mysqld   --initialize-insecure   --user=mysql   --basedir=/data/app/mysql  --datadir=/data/3306/data
     结果: 初始化完成之后,启动数据库,无密码登陆
    (2) --initialize (安全)
     mysqld   --initialize    --user=mysql   --basedir=/data/app/mysql  --datadir=/data/3306/data
     结果: 初始化完成之后,生成临时密码(4种复杂度、12位),不能用作管理数据库,需要第一次使用之前改掉这个密码。
     mysql -uroot -p
     Enter password: 此处填写临时密码:
     2020-04-21T06:49:15.881987Z 1 [Note] A temporary password is generated for root@localhost: +fCQiY1x:rH-
     mysql> alter user root@'localhost' identified by '123';
    [root@db01 data]# mysql -uroot -p123
    3. 设置管理员初始密码
    [root@db01 data]# mysqladmin     -uroot     -p   password      123

    4. 编译安装:源码包
       cmake 
       make  
       make install 
       什么时候用? 
       测试、调试。
       二次开发---》 编译安装 
       定制---》源码包或者配置文件。
       定制rpm包---》源码包

第一章节作业:  
    1. 部署5.6版本
    2. 部署8.0版本


第二章节 MySQL体系结构及基础管理
1. MySQL 的C/S模型工作结构
Client: 
    自带命令
    第三方工具
    API
Server : 
    TCP/IP
    Unix Socket

2. MySQL 的实例结构
实例: mysqld进程 + Master thread + worker thread(IO\SQL\Purge...)+ 预分配内存结构
公司: BOSS + 经理 + 员工 + 办公区域   

3. mysqld 核心程序工作原理
3.1  server 层      ----> Linux  OS
3.1.1 连接器 
3.1.2 SQL层
3.2  engine 层      ----> 文件系统


image-20200423083500092


   转载规则


《第一章 MySQL 大纲介绍》 小明 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
小明同学为了战斗而生 小明同学为了战斗而生
本文整理并总结了十大经典的排序算法(冒泡排序、选择排序、插入排序、快速排序、归并排序、希尔排序、计数排序、基数排序、桶排序、堆排序)的时间复杂度、空间复杂度等性质。
2020-02-16
本篇 
第一章   MySQL 大纲介绍 第一章 MySQL 大纲介绍
1、官方定义的MySQL DBA工作内容(1)运维DBA 初级:各版本、各平台安装搭建、升级 中级:体系结构原理、基础管理(启动关闭、初始化配置文件管理、多实例管理、用户权限管理、基本SQL(增删改查))、 日志管理、备份与恢复
2020-02-16
  目录