乐趣区

关于数据库:半个月时间把-MySQL-重新巩固了一遍梳理了一篇几万字-超硬核-文章

在这之前,咱们学习过了:数据库的外围知识点是哪些?关系型数据工作流程、设计实践与流程,以及 SQL 语法根底、语句练习与优化。以上这些,都是学习数据库的必备入门根底知识点,须要重点把握。

明天开始,咱们进入死磕数据库系列之:MySQL 数据库的学习之旅。

注:本文是不定期更新内容的,如有帮忙,大家点赞反对一波!!!!

MySQL 数据库简介

MySQL 是最风行的关系型数据库管理系统,在 WEB 利用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。

MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保留在不同的表中,而不是将所有数据放在一个大仓库内,这样就减少了速度并进步了灵活性。

  • MySQL 是开源的,目前隶属于 Oracle 旗下产品。
  • MySQL 反对大型的数据库。能够解决领有上千万条记录的大型数据库。
  • MySQL 应用规范的 SQL 数据语言模式。
  • MySQL 能够运行于多个零碎上,并且反对多种语言。这些编程语言包含 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等。
  • MySQL 对 PHP 有很好的反对,PHP 是目前最风行的 Web 开发语言。
  • MySQL 反对大型数据库,反对 5000 万条记录的数据仓库,32 位零碎表文件最大可反对 4GB,64 位零碎反对最大的表文件为 8TB。
  • MySQL 是能够定制的,采纳了 GPL 协定,你能够批改源码来开发本人的 MySQL 零碎。

在日常工作与学习中,无论是开发、运维、还是测试,对于数据库的学习是不可避免的,同时也是日常工作的必备技术之一。在互联网公司,开源产品线比拟多,互联网企业所用的数据库占比拟重的还是 MySQL。更多对于 MySQL 数据库的介绍,有趣味的读者能够参考官方网站的文档和这篇文章:可能是全网最好的 MySQL 重要知识点

MySQL 装置

MySQL 8 正式版 8.0.11 已公布,官网示意 MySQL8 要比 MySQL 5.7 快 2 倍,还带来了大量的改良和更快的性能!到底谁最牛呢?请看:MySQL 5.7 vs 8.0,哪个性能更牛?

具体的装置步骤请参阅:CentOS 下 MySQL 8.0 装置部署,超具体!

MySQL 多实例配置

MySQL 数据库入门——多实例配置

MySQL 命令根底操作

Windows 服务

-- 启动 MySQL
net start mysql

-- 创立 Windows 服务
sc create mysql binPath= mysqld_bin_path(留神:等号与值之间有空格)

连贯与断开服务器

mysql -h 地址 -P 端口 -u 用户名 -p 明码

SHOW PROCESSLIST -- 显示哪些线程正在运行
SHOW VARIABLES -- 显示零碎变量信息

数据库操作

-- 查看以后数据库
SELECT DATABASE();

-- 显示以后工夫、用户名、数据库版本
SELECT now(), user(), version();

-- 创立库
CREATE DATABASE[IF NOT EXISTS] 数据库名 数据库选项
    数据库选项:CHARACTER SET charset_name
        COLLATE collation_name

-- 查看已有库
    SHOW DATABASES[LIKE 'PATTERN']

-- 查看以后库信息
    SHOW CREATE DATABASE 数据库名

-- 批改库的选项信息
    ALTER DATABASE 库名 选项信息

-- 删除库
    DROP DATABASE[IF EXISTS] 数据库名
        同时删除该数据库相干的目录及其目录内容

更多相干的操作根底知识点请参阅以下文章:

1047 行 MySQL 具体学习笔记(值得学习与珍藏)

MySQL 数据类型

字段类型

整型

TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT 别离应用 8, 16, 24, 32, 64 位存储空间,个别状况下越小的列越好。

INT(11) 中的数字只是规定了交互工具显示字符的个数,对于存储和计算来说是没有意义的。

浮点数

FLOAT 和 DOUBLE 为浮点类型,DECIMAL 为高精度小数类型。CPU 原生反对浮点运算,然而不反对 DECIMAl 类型的计算,因而 DECIMAL 的计算比浮点类型须要更高的代价。

FLOAT、DOUBLE 和 DECIMAL 都能够指定列宽,例如 DECIMAL(18, 9) 示意总共 18 位,取 9 位存储小数局部,剩下 9 位存储整数局部。

字符串

次要有 CHAR 和 VARCHAR 两种类型,一种是定长的,一种是变长的。

VARCHAR 这种变长类型可能节俭空间,因为只须要存储必要的内容。然而在执行 UPDATE 时可能会使行变得比原来长,当超出一个页所能包容的大小时,就要执行额定的操作。MyISAM 会将行拆成不同的片段存储,而 InnoDB 则须要决裂页来使行放进页内。

VARCHAR 会保留字符串开端的空格,而 CHAR 会删除。

工夫和日期

MySQL 提供了两种类似的日期工夫类型: DATETIME 和 TIMESTAMP。

1.DATETIME

可能保留从 1001 年到 9999 年的日期和工夫,精度为秒,应用 8 字节的存储空间。

它与时区无关。

默认状况下,MySQL 以一种可排序的、无歧义的格局显示 DATETIME 值,例如“2008-01-16 22:37:08”,这是 ANSI 规范定义的日期和工夫示意办法。

2.TIMESTAMP

和 UNIX 工夫戳雷同,保留从 1970 年 1 月 1 日午夜 (格林威治工夫) 以来的秒数,应用 4 个字节,只能示意从 1970 年 到 2038 年。

它和时区无关,也就是说一个工夫戳在不同的时区所代表的具体工夫是不同的。

MySQL 提供了 FROM_UNIXTIME() 函数把 UNIX 工夫戳转换为日期,并提供了 UNIX_TIMESTAMP() 函数把日期转换为 UNIX 工夫戳。

默认状况下,如果插入时没有指定 TIMESTAMP 列的值,会将这个值设置为以后工夫。

应该尽量应用 TIMESTAMP,因为它比 DATETIME 空间效率更高。

对于 MySQL 数据类型与存储引擎的更多具体介绍:死磕数据库系列(五):MySQL 数据类型与存储引擎介绍

MySQL 索引详解

什么是索引?

索引是辅助存储引擎高效获取数据的一种数据结构。

很多人形象的说索引就是数据的目录,便于存储引擎疾速的定位数据。

索引的分类

咱们常常从以下几个方面对索引进行分类

从数据结构的角度对索引进行分类
  • B+tree
  • Hash
  • Full-texts 索引
从物理存储的角度对索引进行分类
  • 聚簇索引
  • 二级索引(辅助索引)
从索引字段个性角度分类
  • 主键索引
  • 惟一索引
  • 一般索引
  • 前缀索引
从组成索引的字段个数角度分类
  • 单列索引
  • 联结索引(复合索引)
  • 数据结构角度看索引

下表是 MySQL 常见的存储引擎 InnoDB,MyISAM 和 Memory 别离反对的索引类型

在理论应用中,InnoDB 作为 MySQL 建表时默认的存储引擎

对上表进行横向查看能够理解到,B+tree 是 MySQL 中被存储引擎采纳最多的索引类型。

具体内容:死磕数据库系列(六):MySQL 索引详解

MySQL 性能优化

MySQL 优化计划

想必大家都晓得,面试期间一提到数据库,就会聊到数据库优化相干问题。网上对于数据库优化的文章也是目迷五色,层出不穷。明天将会通过这篇文章细分几点给大家汇总整顿出一套对于 MySQL 数据库的优化计划,让大家通过学习这篇文章不再被面试官吊打!

老本:硬件优化 > 系统配置优化 > 表构造优化 > SQL 语句优化 > 索引优化。

成果:索引优化 > SQL 语句优化 > 表构造优化 > 系统配置优化 > 硬件优化。

死磕数据库系列(七):MySQL 性能优化(硬件,系统配置,表构造,SQL 语句)

MySQL 主从复制

MySQL 复制有两种办法:

  • 传统形式:基于主库的 bin-log 将日志事件和事件地位复制到从库,从库再加以 利用来达到主从同步的目标。
  • Gtid 形式:global transaction identifiers 是基于事务来复制数据,因而也就不 依赖日志文件地位,同时又能更好的保障主从库数据一致性。

MySQL 数据库主从同步实战过程

MySQL 主从同步架构中你不晓得的“坑”(上)

MySQL 主从同步架构中你不晓得的“坑”(下)

这里顺便提一下:ROW 还是 STATEMENT?线上 MySQL Binlog 怎么选?这篇文章,就这三种模式有何区别,在生产如何抉择,做一个具体的案例详解。

MySQL 复制有多种类型:

  • 异步复制:一个主库,一个或多个从库,数据异步同步到从库。
  • 同步复制:在 MySQL Cluster 中特有的复制形式。
  • 半同步复制:在异步复制的根底上,确保任何一个主库上的事务在提交之前至 少有一个从库曾经收到该事务并日志记录下来。
  • 提早复制:在异步复制的根底上,人为设定主库和从库的数据同步延迟时间,即保证数据提早至多是这个参数。

MySQL 主从复制提早解决方案:高可用数据库主从复制延时的解决方案

MySQL 另一种主从同步的计划:基于 Gtid 的 MySQL 主从同步实际

MySQL 数据备份与复原

数据备份多种形式:

  • 物理备份是指通过拷贝数据库文件的形式实现备份,这种备份形式实用于数据库很大,数据重要且须要疾速复原的数据库
  • 逻辑备份是指通过备份数据库的逻辑构造(create database/table 语句)和数据内容(insert 语句或者文本文件)的形式实现备份。这种备份形式实用于数据库不是很大,或者你须要对导出的文件做肯定的批改,又或者是心愿在另外的不同类型服务器上从新建设此数据库的状况
  • 通常状况下物理备份的速度要快于逻辑备份,另外物理备份的备份和复原粒度范畴为整个数据库或者是单个文件。对单表是否有恢复能力取决于存储引擎,比方在 MyISAM 存储引擎下每个表对应了独立的文件,能够独自复原;但对于 InnoDB 存储引擎表来说,可能每个示意对应了独立的文件,也可能表应用了共享数据文件
  • 物理备份通常要求在数据库敞开的状况下执行,但如果是在数据库运行状况下执行,则要求备份期间数据库不能批改
  • 逻辑备份的速度要慢于物理备份,是因为逻辑备份须要拜访数据库并将内容转化成逻辑备份须要的格局;通常输入的备份文件大小也要比物理备份大;另外逻辑备份也不蕴含数据库的配置文件和日志文件内容;备份和复原的粒度能够是所有数据库,也能够是单个数据库,也能够是单个表;逻辑备份须要再数据库运行的状态下执行;它的执行工具能够是 mysqldump 或者是 select … into outfile 两种形式
  • 生产数据库备份计划:高逼格企业级 MySQL 数据库备份计划
  • MySQL 数据库物理备份形式:Xtrabackup 实现数据的备份与复原

MySQL 高可用架构设计与实战

高可用架构对于互联网服务根本是标配,无论是应用服务还是数据库服务都须要做到高可用。对于一个零碎而言,可能蕴含很多模块,比方前端利用,缓存,数据库,搜寻,音讯队列等,每个模块都须要做到高可用,能力保障整个零碎的高可用。对于数据库服务而言,高可用可能更简单,对用户的服务可用,不仅仅是能拜访,还须要有正确性保障,因而数据库的高可用计划是始终以来的探讨热点,明天就各种的高可用计划,谈一下集体的一些认识,如有谬误,还请斧正!!

具体的几种高可用计划介绍请参阅:浅谈 MySQL 集群高可用架构

MySQL 高可用计划:MySQL 同步复制及高可用计划总结
官网也提供一种高可用计划:官网工具|MySQL Router 高可用原理与实战
MHA
  • MHA(Master High Availability)目前在 MySQL 高可用方面是一个绝对成熟的解决方案,该软件由两局部组成:MHA Manager(治理节点)和 MHA Node(数据节点。
  • MHA Manager: 能够独自部署在一台独立的机器上治理多个 master-slave 集群,也能够部署在一台 slave 节点上。
  • MHA Node: 行在每台 MySQL 服务器上。
  • MHA Manager 会定时探测集群中的 master 节点,当 master 呈现故障时,它能够主动将最新数据的 slave 晋升为新的 master,而后将所有其余的 slave 从新指向新的 master。整个故障转移过程对应用程序齐全通明。

MHA 高可用计划实战:MySQL 集群高可用架构之 MHA

MGR
  • Mysql Group Replication(MGR)是从 5.7.17 版本开始公布的一个全新的高可用和高扩张的 MySQL 集群服务。
  • 高一致性,基于原生复制及 paxos 协定的组复制技术,以插件形式提供统一数据安全保障;
  • 高容错性,大多数服务失常就可持续工作,主动不同节点检测资源征用抵触,按程序优先解决,内置动防脑裂机制;
  • 高扩展性,主动增加移除节点,并更新组信息;
  • 高灵活性,单主模式和多主模式。单主模式主动选主,所有更新操作在主进行;多主模式,所有 server 同时更新。

MySQL 数据库读写拆散高可用(待更新)

MySQL 分库分库(待更新)

MySQL 性能监控(待更新)

MySQL 管理工具(待更新)

MySQL 开发标准与应用技巧(待更新)

。。。。。。。。。。。还有,临时目录没有实现。敬请期待。

退出移动版