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