22
头图

在这之前,我们学习过了:数据库的核心知识点是哪些关系型数据工作流程设计理论与流程,以及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 数据类型

死磕数据库系列(五):MySQL 数据类型与存储引擎介绍

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 日志文件解析(类型、作用)

Mysql 日志是什么?

所谓日志,就是一种将行为动作记录到一个地方,这个地方可以是文件,文本等可存储的载体。

Mysql日志就是记录整个mysql从启动,运行,到结束的整个生命周期下的行为。

日志类型

MySQL 中有七种日志文件,分别是:

  • 二进制日志(binlog)
  • 重做日志(redo log)
  • 回滚日志(undo log)
  • 错误日志(errorlog)
  • 慢查询日志(slow query log)
  • 一般查询日志(general log)
  • 中继日志(relay log)

这几种日志的作用与具体的操作详解可以参阅:死磕数据库系列(十一):MySQL 日志文件解析(类型、作用)

MySQL 数据备份与恢复

数据备份多种方式:

  • 物理备份是指通过拷贝数据库文件的方式完成备份,这种备份方式适用于数据库很大,数据重要且需要快速恢复的数据库
  • 逻辑备份是指通过备份数据库的逻辑结构(create database/table语句)和数据内容(insert语句或者文本文件)的方式完成备份。这种备份方式适用于数据库不是很大,或者你需要对导出的文件做一定的修改,又或者是希望在另外的不同类型服务器上重新建立此数据库的情况
  • 通常情况下物理备份的速度要快于逻辑备份,另外物理备份的备份和恢复粒度范围为整个数据库或者是单个文件。对单表是否有恢复能力取决于存储引擎,比如在MyISAM存储引擎下每个表对应了独立的文件,可以单独恢复;但对于InnoDB存储引擎表来说,可能每个表示对应了独立的文件,也可能表使用了共享数据文件
  • 物理备份通常要求在数据库关闭的情况下执行,但如果是在数据库运行情况下执行,则要求备份期间数据库不能修改
  • 逻辑备份的速度要慢于物理备份,是因为逻辑备份需要访问数据库并将内容转化成逻辑备份需要的格式;通常输出的备份文件大小也要比物理备份大;另外逻辑备份也不包含数据库的配置文件和日志文件内容;备份和恢复的粒度可以是所有数据库,也可以是单个数据库,也可以是单个表;逻辑备份需要再数据库运行的状态下执行;它的执行工具可以是mysqldump或者是select … into outfile两种方式

死磕数据库系列(十):MySQL 数据库的备份与恢复

MySQL 日志文件解析(类型、作用)

死磕数据库系列(十一):MySQL 日志文件解析(类型、作用)

MySQL 数据库读写分离

死磕数据库系列(九):MySQL 读写分离详解

MySQL 分库分库

死磕数据库系列(十二):MySQL 分库分表(何时分?怎么分?)

MySQL 事务与隔离级别

死磕数据库系列(十三):MySQL 事务与隔离级别

MySQL 锁机制详解

死磕数据库系列(十四):MySQL 锁机制详解(表级锁、页级锁、行级锁)

MySQL 存储过程、自定义函数、事务、流程控制的语法、创建和使用

死磕数据库系列(十五):MySQL 存储过程、自定义函数、事务、流程控制的语法、创建和使用

MySQL 单表、多表操作详解

死磕数据库系列(十六):MySQL 单表操作介绍

死磕数据库系列(十七):MySQL 多表操作介绍

MySQL 表的七大约束

死磕数据库系列(十八):MySQL 表的七大约束

MySQL 视图、触发器的原理与实战

本文主要讲解视图(view)的基本概念,什么是视图以及视图的使用场景,视图增删改查的实战(CREATE、DESCRIBE、SHOW CREATE、DORP和ALTER),视图的更新操作包括增加(INSERT)、删除(DELETE)和更新(UPDATE)的视图操作基表数据实战。

死磕数据库系列(十九):MySQL 视图、触发器的原理与实战

MySQL 数据库 DDL、DML、DQL、DCL 语言理论与实践(sql 8.0 版)

image.png

死磕数据库系列(二十):MySQL 数据库 DDL、DML、DQL、DCL 语言理论与实践(sql 8.0 版)

MySQL 多版本并发控制 MVCC 原理及实现

MVCC ( Multi-VersionConcurrency Control) (注:与MVCC相对的,是基于锁的并发控制,Lock-Based Concurrency Control)是一种基于多版本的并发控制协议,只有在InnoDB引擎下存在。MVCC是为了实现事务的隔离性,通过版本号,避免同一数据在不同事务间的竞争,你可以把它当成基于多版本号的一种乐观锁。当然,这种乐观锁只在事务级别提交读和可重复读有效。MVCC最大的好处,相信也是耳熟能详:读不加锁,读写不冲突。在读多写少的OLTP应用中,读写不冲突是非常重要的,极大的增加了系统的并发性能。

不仅是MySQL,包括Oracle,PostgreSQL等其他数据库系统也都实现了MVCC,但各自的实现机制不尽相同,因为MVCC没有一个统一的实现标准。

死磕数据库系列(二十一):MySQL  多版本并发控制 MVCC 原理及实现

MySQL 数据库机房架构与跨城容灾

我们在实际生产环境中,要求不允许丢失任何数据。也就是说,当 MySQL 数据库由于各种原因而无法使用时(发生宕机、网络异常等),不仅需要快速恢复业务,还需要确保数据一致性。

本文主要讲解数据库机房架构与跨城容灾,包括主从复制的强一致性、同城多活、两地三中心、三地五中心、数据兜底逻辑等进行逐步讲解。

死磕数据库系列(二十二):MySQL 数据库机房架构与跨城容灾

MySQL 高可用方案选型解析

高可用是数据库永恒的话题,高可用方案也是最受数据库爱好者关注的重点技术之一。在MySQL二十多年的发展历程中,针对MySQL的高可用方案百花齐放,各具特色,这也是这款开源数据库最能让人着迷的地方。例如,早些年著名的MMM、MHA等等。

随着MySQL官方的不断发力,在基于MySQL复制的基础上,推出了一系列的高可用方案,例如,主从半同步复制、InnoDB ReplicaSet、组复制(MGR)、InnoDB Cluster,及目前最新的InnoDB ClusterSet。

MySQL 的各种高可用方案,大多是基于以下几种基础来部署的:

  • 基于主从复制;
  • 基于Galera协议;
  • 基于NDB引擎;
  • 基于中间件/proxy;
  • 基于共享存储;
  • 基于主机高可用;

在这一篇文章里,将向各位读者介绍各种方案的优缺点,及适用场景。在介绍各种方案之前,读者首先必须了解 MySQL 复制功能,MySQL 的高可用方案几乎全部是基于 MySQL 复制实现的。

死磕数据库系列(二十三):MySQL 高可用方案选型解析

MySQL 级联复制与双主双从配置实战

死磕数据库系列(二十四):MySQL 级联复制与双主双从配置实战

MySQL 高可用之组复制(MGR)详解

死磕数据库系列(二十五):MySQL 高可用之组复制(MGR)详解

MySQL 高可用之单主、双主模型组复制配置实践

死磕数据库系列(二十六):MySQL 高可用之单主、双主模型组复制配置实践

MySQL 常用管理命令介绍

死磕数据库系列(二十七):MySQL 常用管理命令介绍

MySQL InnoDB Cluster 多节点高可用部署实战

MySQL的高可用架构无论是社区还是官方,一直在技术上进行探索,这么多年提出了多种解决方案,比如 MMM, MHA, NDB Cluster, Galera Cluster, InnoDB Cluster, 腾讯的PhxSQL, MySQL Fabric., aliSQL。MySQL官方在2017年4月推出了一套完整的、高可用的Mysql解决方案 - MySQL InnoDB Cluster, 即一组MySQL服务器可以配置为一个MySQL集群。在默认的单主节点模式下,集群服务器具有一个读写主节点和多个只读辅节点。辅助服务器是主服务器的副本。客户端应用程序通过MySQL Router连接到主服务程序。如果主服务连接失败,则次要的节点自动提升为主节点,MySQL Router请求到新的主节点。InnoDB Cluster不提供NDB Cluster支持。

死磕数据库系列(二十八):MySQL InnoDB Cluster 多节点高可用部署实战

MySQL Router 实现数据库读写分离配置实践

MySQL Router是MySQL官方提供的一个轻量级MySQL中间件,用于取代以前老版本的 SQL proxy。

既然MySQL Router是一个数据库的中间件,那么MySQL Router必须能够分析来自前面客户端的SQL请求是写请求还是读请求,以便决定这个SQL请求是发送给master还是slave,以及发送给哪个master、哪个slave。这样,MySQL Router就实现了MySQL的读写分离,对MySQL请求进行了负载均衡。

因此,MySQL Router 的前提是后端实现了MySQL的主从复制。

MySQL Router 很轻量级,只能通过不同的端口来实现简单的读/写分离,且读请求的调度算法只能使用默认的rr(round-robin),更多一点、更复杂一点的能力都不具备。所以,在实现MySQL Router时,需要自行配置好后端MySQL的高可用。高可用建议通过Percona XtraDB Cluster或MariaDB Galera或MySQL官方的group replication实现,如果实在没有选择,还可以通过MHA实现。

所以,一个简单的MySQL Router部署图如下。图片

死磕数据库系列(二十九):MySQL Router 实现数据库读写分离配置实践

MySQL 针对 Swap 分区的运维管理

Linux 有很多很好的内存、IO调度机制,但是并不会适用于所有场景。对于运维人员来说,Linux比较让人头疼的一个地方是:它不会因为MySQL很重要就避免将分配给MySQL的地址空间映射到swap上。对于频繁进行读写操作的系统而言,数据看似在内存而实际上在磁盘是非常糟糕的,响应时间的增长很可能直接拖垮整个系统。所以,作为运维人员,怎样做到尽量避免 MySQL 惨遭 Swap 的毒手将显得尤为重要!

SWAP是操作系统虚拟出来的一部分内存地址,它的物理存储元件是磁盘。在备份数据或恢复数据时,文件系统会向Linux系统请求大量的内存作为cache。在物理内存使用殆尽时候,为了确保程序运行,往往会将另外的一些占用物理内存地址空间的程序映射到swap分区上。

死磕数据库系列(三十):MySQL 针对 Swap 分区的运维管理

MySQL 服务器 CPU、磁盘、内存等硬件选型

死磕数据库系列(三十一):MySQL 服务器 CPU、磁盘、内存等硬件选型

MySQL 数据库、数据表管理工具介绍

死磕数据库系列(三十二):MySQL 数据库、数据表管理工具介绍

MySQL 性能分析与相关工具的使用

在数据库调优中,我们的目标就是 响应时间更快,吞吐量更大。利用宏观的监控工具和微观的日志分析可以帮我们快速找到调优的思路和方式。

死磕数据库系列(三十三):MySQL 性能分析与相关工具的使用

MySQL 性能测试工具 sysbench 详解

sysbench 是一个很不错的数据库性能测试工具。

官方站点:https://github.com/akopytov/sysbench/

死磕数据库系列(三十四):MySQL 性能测试工具 sysbench 详解

MySQL 数据库性能监控

我们监控 MYSQL 数据库,从以下几个维度进行监控

吞吐量,包括数据库的接收和发送吞吐量。

innodb的指标信息,包括了 innodb buffer pool 的各项指标信息,数据读和写的数量以及Innodb锁等待指标信息等。

线程信息,包括缓存的线程、连接的线程、创建的线程以及激活的线程,用来衡量数据库的连接情况,我们在激活的线程中应用了异常检测算法,对于突增或突检的情况,平台会告警,提示异常。

数据库的增删改查操作的统计信息。

慢SQL监控,当慢 SQL 次数到达指定阈值,平台会告警,提醒用户确认具体的慢SQL,并调优。

当开启 performance_schema 库中访问后,我们可以对表、索引的IO等待信息、等待事件信息进行收集和监控。

数据库等待事件的监控。

schema 的统计信息,包括表的行数、大小、空间剩余等信息。

死磕数据库系列(三十五):MySQL 数据库性能监控

MySQL 开发设计规范、SQL 编写规范及安全规范

为了在软件生命周期内规范数据库相关的需求分析、设计、开发、测试、运维工作,便于不同团队之间的沟通协调,以及在相关规范上达成共识,提升相关环节的工作效率和系统的可维护性。同时好的规范,在执行的时候可以培养出好的习惯,好的习惯是软件质量的保证。

死磕数据库系列(三十六):MySQL 开发设计规范、SQL 编写规范及安全规范

今天 ,终终终于卷完了!!!!

希望大家能够从中收获多多!如有帮助,请点赞、转发支持一波!!!


民工哥
26.4k 声望56.7k 粉丝

10多年IT职场老司机的经验分享,坚持自学一路从技术小白成长为互联网企业信息技术部门的负责人。2019/2020/2021年度 思否Top Writer