vlambda博客
学习文章列表

MySQL框架、体系及产品基础介绍

1.数据库产品类型
第一代数据库架构        
-----     关系型数据库时代(RDBMS )

代表产品 :
闭源:Oracle 、MSSQL、DB2   ......
开源:MySQL、PG、ClickHouse  ......


第二代数据库架构: 并发量,业务量(用户量,数据量)的发展
-----    关系型数据库时代(RDBMS ) 
                            +
-----    NoSQL时代 ( Not Only SQL 时代 )

代表产品:Memcache 、 Redis(缓存) 、MongoDB文档型数据库、ES、Hadoop  ......

第三代数据库架构
-----    分布式/新型数据库架构时代 ( NewSQL 时代 )

代表产品:

阿里系列:PolarDB、 OB
Pincap  :TiDB


2.熟悉数据库行业

数据库的排名信息
https://db-engines.com/en       --->     DB-Engines Ranking


3. MySQL的企业版本选择

E :   企业版(收费),可以下载30天试用
C: 社区版(开源),免费服务5年

社区版选择:

5.6  :GA 6-12月之间的版本 5.6.34-max,最好是双数版
5.7  :一般选择最新GA版本  5.7.28( Sep 27, 2019)
8.0  :一般选择最新GA版本  8.0.18+( Sep 22, 2019)

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

4. 获取社区版MySQL
官方网站:https://www.mysql.com/downloads/
MySQL Community (GPL) Downloads » Download Archives » MySQL Community Server » Product Version (选择双数最新版 ) Operating System : linux - Generic



5. 二进制部署MySQL
5.1 环境准备
# iptables -nL# systemctl stop firewalld# getenforce# ping www.baidu.com

5.2 检验MD5值
# md5sum mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz1daa30a32b99a92062f481bd3ef8694c mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz对比官网中的MD5值: 1daa30a32b99a92062f481bd3ef8694c

5.3 上传软件到指定目录
# cd /opt上传软件包 mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz

5.4 解压并创建软连
# tar xf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz# ln -s mysql-5.7.28-linux-glibc2.12-x86_64 mysql

5.5 修改环境变量
# echo 'export PATH=/opt/mysql/bin/:$PATH' >>/etc/profile# source /etc/profile # mysql -V mysql Ver 14.14 Distrib 5.7.28, for linux-glibc2.12 (x86_64) using EditLine wrapper

5.6 清理遗留环境
# rpm -qa|grep mariadb mariadb-libs-5.5.60-1.el7_5.x86_64
用yum清理# yum remove mariadb-libs-5.5.60-1.el7_5.x86_64
删掉/etc/my.cnf已有文件# rm -rf /etc/my.cnf

5.7 安装依赖包
yum install -y libaio-devel


5.8 创建相关目录并授权

# mkdir -p /data/3306                   -- 存放数据库数据# useradd -M -s /sbin/nologin mysql           -- 创建管理用户# chown -R mysql.mysql /data/3306             

5.9 初始化数据库
/opt/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql --datadir=/data/3306
如果下载了5.6版本的初始化方式如下:/opt/mysql/scripts/mysql_install_db   --user=mysql --basedir=/opt/mysql --datadir=/data/3306

5.10 准备配置文件
作用:

1.影响数据库的启动、工作。

2.影响到客户端连接(本地服务器上发起的)

vim /etc/my.cnf 
[mysqld]user=mysqlbasedir=/opt/mysqldatadir=/data/3306socket=/tmp/mysql.sock[mysql]socket=/tmp/mysql.sock

默认配置文件读取顺序

# mysqld --help --verbose|grep my.cnf/etc/my.cnf ---> /etc/mysql/my.cnf ---> /usr/local/mysql/etc/my.cnf ---> ~/.my.cnf


5.11 准备启动脚本

# cp /opt/mysql/support-files/mysql.server /etc/init.d/mysqld# chkconfig --add mysqld # systemctl start mysqld # /etc/init.d/mysqld start# systemctl enable mysqld# systemctl status mysqld# mysql 
需要设置管理员密码如下:# mysqladmin password 123456


6 MySQL体系结构
6.1 MySQL的C/S模型工作结构

客户端(Client):

自带命令 : mysql、mysqldump、mysqladmin
第三方工具 : sqlyog、navicat、workbench
API : php-mysqli(phpmyadmin)、simple-config(workpress)

服务端(Server) :

TCP/IP              -h      -P 套接字(IP+端口)
Unix Socket      -S

总结:利用客户端的命令或者工具,通过本地unix套接字或者IP+Port方式连接服务端mysqld。

6.2 MySQL的实例结构
MySQL实例结构组成:mysqld守护进程 + Master thread + worker thread线程(IO\SQL\Purge...) + 预分配内存结构

MySQL处理数据方式:通过实例  --->  处理数据


什么是进程?什么是线程?
定义区分: 进程是具有独立功能的程序,而线程是进程的实体。
功能区分:进程是资源分配、调度的单位;线程是进程的执行单元。

同一个进程中的多个线程之间可以并发执行;一个线程可以创建和撤销另一个线程。进程之间资源不可以共享,线程之间资源可以共享。 每个程序之间的进程是相互独立的,但是每个程序的线程之间是数据相互共享。 简而言之,

1)一个程序至少有一个进程,一个进程至少有一个线程。

2)线程的划分尺度小于进程,使得多线程程序的并发性高。

3)另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

6.3 MySQL核心程序工作原理

6.3.1  server 层 /   实例层             ----> Linux  OS

6.3.1.1 连接器
  1. 连接协议:tcp/ip 和unix套接字socket
  2. 加载授权表:用户密码验证
  3. 通过密码验证生成连接线程

6.3.1.2 SQL层
6.3.1.3 管理类工具、插件、mysqlshell(8.0以后)

6.3.2  engine 层   /  存储引擎层     ----> 文件系统




看B站:
https://www.bilibili.com/video/BV157411K7sf?from=search&seid=2216971352526804506