DBA之路 1_MySQL_数据库介绍安装及体系结构

第一章:数据库的介绍

1.1数据库概述

1.1.1 什么是数据库

    存储数据的仓库其本质是一个文件系统,数据库按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询等操作

1.1.2 数据的存储方式

1) 数据保存在内存,例如:数组,集合;new出来的对象存储在堆中,堆是内存中的一个小块空间,优点:内存速度快,缺点是:断电/退出程序的时候,数据就清除了,内存价格贵
2)数据保存在普通文件,优点:永久保存,缺点:查找,增加,修改,删除数据比较麻烦,效率低
3)数据保存在数据库 优点:永久保存,通过SQL语句比较方便的操作数据库

1.2数据库的优点

数据库是按照特定的格式将数据存储在文件中,通过SQL语句可以方便的对大量数据进行增删改查操作,数据库是对大量的信息进行管理的高效的解决方案。

1.3数据库管理系统

数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立,使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统的高效的解决方案
RDBMS(关系型数据库):Oracle,MySQL,PG,MSSQL
NoSQL:MongoDB,Redis,ES
NEWSQL(分布式):TiDB,Spanner,AliSQL  ,OB,PolarDB

1.2MySQL企业版本GA(稳定版)选择

5.6:5.6.34  5.6.36 5.6.38(2017年9月13) 5.6.40
5.7:5.7.18 5.7.20(2017年9月13) 5.7.24
(所用版本5.7.26简称5726)
8.0: 8011(8011是8.0版本第一个,时间:2018年)8014 8015 8016
版本选择建议要上新环境
1)一般选择官方主流版本:5.6 5.7
2)GA
3)6-12月的产品版本

第二章:二进制安装MySQL

第一步:解压软件

tar xf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz 
mkdir /application
mv mysql-5.7.26-linux-glibc2.12-x86_64 /application/mysql

第二步:用户的创建,环境原始处理

rpm -qa|grep mariadb#这个为系统自带,需要移除,否则会 出问题
yum remove -y  mariadb-libs-5.5.60-1.el7_5.x86_64
也可以通过:rpm -e --nodeps mariadb-libs(卸载忽略依赖)
useradd -s /sbin/nologin mysql

第三步:设置环境变量

vim /etc/profile
export PATH=/application/mysql/bin:$PATH
source /etc/profile

第四步:创建数据路径并授权

1.添加一块新硬盘:
2.格式化后并挂载
fdisk -l
mkfs.xfs /dev/sdb
mkdir /data
blkid(查询磁盘UUID)
vim etc/fstab 
mount -a (全部挂载)
df -h
3.授权
chown -R mysql.mysql /application/mysql
chown -R mysql.mysql /data
fstab添加内容

第五步:初始化数据(创建系统数据)

5.6 版本 初始化命令  /application/mysql/scripts/mysql_install_db 
mkdir -p /data/mysql/data
chown -R mysql.mysql /data
yum install -y libaio-devel
也可以通过rpm -e --nodeps mariadb-libs(卸载忽略依赖)--nodeps忽略依赖
mysqld --initialize --user=mysql --basedir=/application/mysql --datadir=/data/mysql/data
通过--initialize初始化后会生成一个随机密码,也就是初始密码,可以加
mysqld --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/mysql/data
初始化不会生成默认密码
--initialize参数
1.对于密码复杂度进行定制:12位,4种 
2.密码过期时间:180天
3.给root@localhost用户设置临时密码

第六步:配置文件准备

cat >/etc/my.cnf <

第七步:启动数据库

方式1.sys-v

service sshd restart 
service这种启动方式就是我们说的sys-v方式,存放路径是在/etc/init.d,将启动脚本放到这里就行
[root@db01 /etc/init.d]# cp /application/mysql/support-files/mysql.server  /etc/init.d/mysqld 
service mysqld restart
也可以用/etc/init.d/mysqld restart 启动重启

方式2.systemd

cat >/etc/systemd/system/mysqld.service <

1.错误分析

without undating PID 类似错误
查看日志:
在哪?/data/mysql/data/主机名.err
cat /data/mysql/data/db01.err
看[ERROR]  上下文
可能情况:
     1)/etc/my.cnf  路径不对等
     2) /tmp/mysql.sock 修改过该文件或该文件不存在
     3)权限问题

2.管理员密码的设定(root@localhost)

[root@hosue /data/mysql/data]# mysqladmin -uroot password oldboy123
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.
也可以-p password进行交互,手动输入旧密码

管理员密码忘记修改方式

1)先关闭数据库
2)启动数据库到维护模式
[root@db01 ~]# mysqld_safe --skip-grant-tables --skip-networking &   (跳过授权表启动MySQL)
3)登录并修改密码
mysql> alter user root@'localhost' identified by '123456';
直接执行这个命令会报错,如下文
mysql> alter user root@'localhost' identified by '123456';
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
mysql> flush privileges;                   ##重新加载权限表,刷新权限
mysql> alter user root@'localhost' identified by '1';
Query OK, 0 rows affected (0.01 sec)
4) 关闭数据库,正常启动验证

第三章:MySQL的体系结构与管理

3.1MySQL的C/S结构介绍


strings可以读二进制文件部分内容

TCP/IP方式(远程、本地):
mysql -uroot -poldboy123 -h 10.0.0.51 -P3306
Socket方式(仅本地):
mysql -uroot -poldboy123 -S /tmp/mysql.sock

3.2MySQL实例的构成****深入学

实例由:mysqld + master thread +  worker thread + 预分配内存

3.3MySQL中mysqld服务器进程结构

3.3.1 SQL语句引入

结构化查询语言
操作和管理数据库的专用语言
DQL:
 mysql> select user,host from mysql.user;
DDL:
DML:
DCL:
 mysql> select user,host from mysql.user;

3.3.2 连接层

(1) 提供链接协议
          Socket
          TCPIP
    (2)验证用户名(root@localhost)和密码合法性,进行匹配专门的授权表。
    (3) 派生一个专用连接线程(接收SQL语句,返回结果)
mysql> show processlist;
+----+------+-----------+------+---------+------+----------+------------------+
| Id | User | Host      | db   | Command | Time | State    | Info             |
+----+------+-----------+------+---------+------+----------+------------------+
|  7 | root | localhost | NULL | Query   |    0 | starting | show processlist |
+----+------+-----------+------+---------+------+----------+------------------+
1 row in set (0.01 sec)

mysql> 
查看连接线程
改密码的参数在哪做的手脚?
--skip-grant-tables     在连接层的授权表,这里跳过授权表
--skip-networking       排除远程连接,仅允许本地Socket连接

3.3.3 SQL层(优化方面至关重要)

(1)验证SQL语法和SQL_MODE
(2)验证语义
(3)验证权限
(4)解析器进行语句解析,生成执行计划(解析树)
(5)优化器(各种算法,基于执行代价),根据算法,找到代价最低的执行计划。
代价:CPU IO MEM的消耗  
(6)执行器安装优化器选择的最优执行计划,执行SQL语句。
**(7)提供query cache (查询缓存,默认不开),一般不开,用redis来代替
(8)记录操作日志(binlog)只记录增删改,查询类的不会记录,默认不开。
未完待续...

3.3.4 存储引擎层

真正和磁盘打交道的一个层次
根据SQL层提供的取数据的方法,拿到数据,返回给SQL,结构化成表,  再由连接层线程返回给用户。
image.png

你可能感兴趣的:(DBA之路 1_MySQL_数据库介绍安装及体系结构)