MySQL系统化知识概要
不想掌握的MySQL知识停留在【简单】的阶段,那就跟着本文的概要制定学习计划吧!
这是一份MySQL的系统化知识概要,也是一份【学习路线图】,有了路线图,制定目标就轻松了,也就是所谓的【循序渐进】。
今天看完MySQL高可用、分库分表等内容,才清楚MySQL还有这么多【高级知识点】。
本文结合自己使用MySQL的经验和其他网友的书籍、博文编写而来。
上面的链接中,有MySQL各个版本的官方文档,可以网页查看,也可以下载PDF(30MB+,孤下载失败了)
目录
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。
- 数据库基础知识
三级模式和二级映像、E-R图、关系模型
SQL语言:DQL、DML、DDL、DCL
- MySQL安装
Windows、Linux;压缩包安装方式;
- 用户和权限
root用户,mysql.user表
新建、修改、删除用户
授权、撤回授权、权限类别
- 图形化工具
MySQL Workbench(免费)、Navicat(商业付费软件,可试用,功能强大)来自博客园
- 命令
/bin目录下,比如,mysql
- 数据库 基本操作
创建、查看、删除
- 数据表 基本操作
创建、查看、修改、删除
查看、修改表结构
- 数据 基本操作
CRUD(增查改删)
- 字段
数据类型、约束、字符集和校对集(utf8 vs utf8mb4)来自博客园
- 单表操作
排序、限量、分组、聚合函数、运算符
- MySQL内置函数
数学函数、数据类型转换函数、字符串函数、日期和时间函数、加密和散列函数、系统信息函数、JSON函数、
其它常用函数
- 多表操作
联合、连接、子查询,外键
- 视图
- 事务
事务隔离级别、锁
- 数据库编程
自定义函数、存储过程、变量、流程控制、游标、触发器、事件、预处理SQL语句
- 存储引擎
MyISAM、InnoDB等(两个主要的,还有很多)
- 索引
建立、修改
使用原则
索引失效
- 锁
表级锁、行级锁
- 数据库优化
最大连接数、缓存、慢查询、数据碎片与维护、日志
- 数据备份与还原
- Java开发
JDBC、数据库连接池(Druid、HikariCP等)、MyBatis、Hibernate、Spring Data JPA
小结,
掌握以上基础知识,在 单实例(一个MySQL进程) 上使用时是足够了。
但是,随着数据量的增长,单实例 的数据库服务器是不够用的了,此时,就需要用到高级知识了。
参考阿里巴巴的MySQL规约(参考文档6):来自博客园
单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表。
- 二进制日志(binlog)
- 分表
垂直、水平分表
- 分区
很少用
- 分库
多数据库
- 多实例
单机多实例
- 主从复制
Replication
- 高可用-组复制
MySQL Group Replication
主流?待确定
- 读写分离
master负责读写,slave只负责读
使用 HaProxy、keepalived 等实现
- 高可用-MHA
MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能。
- 高可用-MMM
MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序。MMM使用Perl语言开发,主要用来监控和管理MySQL Master-Master(双主)复制。
- 高可用-MySQL Cluster
MySQL cluster是官方集群的部署方案,通过使用NDB存储引擎实时备份冗余数据,实现数据库的高可用性和数据一致性。来自博客园
- 高可用-Galera
Galera Cluster是由Codership开发的MySQL多主集群,包含在MariaDB中,同时支持Percona xtradb、MySQL,是一个易于使用的高可用解决方案,在数据完整性、可扩展性及高性能方面都有可接受的表现。
- 高可用-PAXOS
Paxos 算法解决的问题是一个分布式系统如何就某个值(决议)达成一致。来自博客园
- 高可用-ZooKeeper+Proxy
- Java开发
sharding-jdbc结合mybatis实现分库分表功能
springBoot 整合 sharding-jdbc、Jpa分库分表
mycat——最新版 2.0
- alibaba/canal
增量同步MySQL数据到ElasticSearch,然后,数据查询通过ElasticSearch来进行,可以大大减轻MySQL服务器的压力。来自博客园
小结,
高可用方案有很多,具体使用哪个,孤暂不清楚。从看到的资料来看,组复制 是高可用的主流,可以玩玩。
疑问:
1、单表数据 500W 就是极限,上面各个高可用方案的极限是分别是多少呢?
2、在做分库分表时,数据扩容如何实现?今年分成5个表足够了,明年就 需要50个表,此时,怎么扩容?
3、更多实际问题需要处理(没经验,就不多说了)
高可用集群解决了很多问题,但同时也带来了一些问题,比如,因网络延迟或故障导致的数据不一致、分布式事务等,使用时也需要做好考虑。来自博客园
除了上面两部分知识点外,MySQL应该还有更高级别的知识点吧,可以看官方文档、源码获取。
另外,目前孤主要使用MySQL 5.7,MySQL 8和它的区别、优势不是太了解。两者在建立 高可用方案 时有什么不同吗?
》》》全文完《《《
终于知道MySQL也可以处理亿级数据了,使用 分库分表、MySQL高可用方案 即可,当然,还要结合sharding-jdbc、mycat等第三方软件。来自博客园
MySQL岗位,除了开发、DBA,今天还发现一个 MySQL内核开发工程师。
在看集群方案时发现,有一些集群方案时需要更改MySQL内核代码的——C++实现的吧?
关系型数据库,除了MySQL,还有更多的 开源软件 可以选择——比MySQL更棒的——吗?
在阿里云看到了 云数据库RDS MySQL 版,购买实例后,即可通过 简单配置 使用MySQL集群,看起来不错哦!来自博客园
1、书《MySQL数据库原理、设计与应用》
作者:黑马程序员 (编著)
8、Galera Cluster for MySQL 详解(一)——基本原理
10、Canal——增量同步MySQL数据到ElasticSearch
13、