mysql architecture

MySQL Community Server (GPL) (Current Generally Available Release: 5.7.21)

https://dev.mysql.com/downloads/

future

Mysql5.5&Mysql5.6&Mysql5.7特性 http://blog.csdn.net/liang_0609/article/details/77334959

key:

  • storage engines: innodb myisam ndb
  • binlog replication cluster
  • undo log、redo log

表空间

mysql共享表空间和独立表空间 http://blog.chinaunix.net/uid-677314-id-3060026.html

egine

  • MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择。
  • InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。

transactions

  • ACID 原子性、一致性、隔离性 、持久性
  • transactions
  • xa 分布式事务
  • savepoints

  • read commited

mysql事务,select for update,及数据的一致性处理 https://www.cnblogs.com/houweijian/p/5869243.html

replication

MySQL通过复制(Replication)实现存储系统的高可用。目前,MySQL支持的复制方式有:

  • 异步复制(Asynchronous Replication):原理最简单,性能最好。但是主备之间数据不一致的概率很大。
  • 5.5 半同步复制(Semi-synchronous Replication):相比异步复制,半同步复制牺牲了一定的性能,提升了主备之间数据的一致性(有一些情况还是会出现主备数据不一致)。
  • 5.7 组复制(Group Replication):基于Paxos算法实现分布式数据复制的强一致性。只要大多数机器存活就能保证系统可用。相比半同步复制,Group Replication的数据一致性和系统可用性更高。 本文主要讨论MySQL半同步复制。

简单谈谈MySQL的半同步复制 http://www.jb51.net/article/108154.htm
MySQL Group Replication 介绍 http://blog.csdn.net/d6619309/article/details/53691352
MySQL Group Replication性能测试,星辰大海还是前路茫茫?

cluster

http://blog.csdn.net/u012974916/article/details/53118941

MySQL有众多集群方案,大多数公司用到的都是主从、读写分离、galera这类多主方案,非常适合于中小企业。对于大企业我们需要分表分库,我之前写了3篇关于有分表分库功能的MySQL集群方案Fabric, Cobar, MySQL Cluster,使用这些方案能够简化分表分库的逻辑,加快开发速度。

http://www.bubuko.com/infodetail-1184023.html

分区分表分库

  • 简单的MySQL主从复制
  • MySQL垂直分区
  • MySQL水平分片(Sharding)

  • mysql集群 并不是分表,但起到了和分表相同的作用。集群可分担数据库的操作次数,将任务分担到多台数据库上。集群可以读写分离,减少读写压力。从而提升数据库性能。
  • 自定义规则分区分表:Range(范围)、Hash(哈希)、List(预定义列表)、Key、Composite(复合模式)

  • 单库单表 单库单表是最常见的数据库设计,例如,有一张用户(user)表放在数据库db中,所有的用户都可以在db库中的user表中查到。
  • 单库多表 随着用户数量的增加,user表的数据量会越来越大,当数据量达到一定程度的时候对user表的查询会渐渐的变慢,从而影响整个DB的性能。如果使用mysql, 还有一个更严重的问题是,当需要添加一列的时候,mysql会锁表,期间所有的读写操作只能等待。 可以通过某种方式将user进行水平的切分,产生两个表结构完全一样的user_0000,user_0001等表,user_0000 + user_0001 + …的数据刚好是一份完整的数据。
  • 多库多表 随着数据量增加也许单台DB的存储空间不够,随着查询量的增加单台数据库服务器已经没办法支撑。这个时候可以再对数据库进行水平区分。
  1. 当读压力很大的时候,可以考虑添加Slave机器的分式解决,但是当Slave机器达到一定的数量就得考虑分库了。 2. 当写压力很大的时候,就必须得进行分库操作。

数据库分库分表策略的具体实现方案 http://blog.csdn.net/xlgen157387/article/details/53976153
Mysql分库分表方案 https://www.cnblogs.com/try-better-tomorrow/p/4987620.html
数据库(分库分表)中间件对比 https://www.cnblogs.com/wangzhongqiu/p/7100332.html
记录一次经历的数据库从单库到分库分表的过程 http://blog.csdn.net/wangfanbb/article/details/50887108
MySQL 高可用:mysql+mycat实现数据库分片(分库分表) http://blog.csdn.net/kk185800961/article/details/51147029
MySQL使用方案 https://segmentfault.com/a/1190000002675986
mysql分表和表分区详解 https://www.2cto.com/database/201503/380348.html

突出问题

  • 增加列锁表
  • 全局序列号

MariaDB的前世今生

2009年 Michael Widenius创建新项目Michael以规避关系型数据库开源的可能风险.直到5.5的版本,一直按照MySQL的版本进行发行。使用者基本上不会感受到和MySQL不同的地方。

2012年 MariaDB开始按照自己的节奏和版本发行方式进行发行,初始版本为:10.0.0,此版本以MySQL5.5为基础,同时合并了MySQL5.6的相关功能。

5.5.5-10.1.8-MariaDB Source distribution

MySQL选型以及使用mariadb踩过的几个坑 https://www.jianshu.com/p/dfa4d32520ba