• 1. 2012/10/22MySQL 学习笔记
  • 2. 数据库比较数据库系统 Oracle SQLServer MySQL DB2是否免费收费收费免费收费存储过程支持支持支持支持视图支持支持支持支持快照支持支持不支持支持触发器支持支持支持支持安全强中中强复杂查询强中弱中索引丰富一般弱中数据类型多多多多事务处理强强弱中
  • 3. 数据库需求1) 可伸缩性(Scalability),当服务的负载增长时,系统能被扩展来满足需求,且不降低服务质量。 2) 高可用性(Availability),尽管部分硬件和软件会发生故障,整个系统的服务必须是每天24小时每星期7天可用的。 3) 可管理性(Manageability),整个系统可能在物理上很大,但应该容易管理。 4) 价格有效性(Cost-effectiveness),整个系统实现是经济的、易支付的。
  • 4. MySQL 数据库系统的优缺点优点 1. 源码公开,免费 2. 跨平台 3. 为多种开发语言和包提供了API 4. 支持多线程 5. 小巧、灵活、速度较快 6. 支持各种字符集 7. 提供各种连接、优化的工具包缺点 1. 不完善,很多数据库特性不支持 2. 只适合中小型应用,对于大型应用,可以 跟其他数据库互补; 3. 数据库系统数据量只能达到千万级别;
  • 5. MySQL企业版MySQL企业版提供一套全面的直接来自于MySQL开发者的企业级软件、支持和服务,确保高水平的可用性,安全性和运行时间。在问题发生之前就能积极主动地帮你消除问题,MySQL企业版用一种简单的,统一的方式给了所有你需要的东西,你可以用MySQL成功地开发和部署关键业务应用系统。 主要的区别有以下两点。 1.企业版只包含稳定之后的功能,社区版包含所有Mysql的最新功能。 也就是说,社区版是企业版的测试版,但是,前者的功能要比后者多。 2.官方的支持服务只针对企业版,用户在使用社区版时出现任何问题,Mysql官方概不负责。
  • 6. MySQL社区版开源社区版
  • 7. MySQL集群 MySQL集群设计的初衷是满足世界上对吞吐量和响应时间有严格要求的企业应用。MySQL 集群是一个采用无共享存储的数据存储模式,实时同步且支持快速故障切换,事务和内存数据存储,而无需特殊网络,硬件或是存储要求。 此种设计的数据库使得MySQL集群具有高可用性和可靠性,因为单点故障已不复存在。集群中的任一个节点的失效都不会影响整个系统。一个应用,比如,事务可以持续的执行,即便是的数据节点失效的时候。已经证明,MySQL集群可以每秒处理10,000个分布式事务,并且在各个数据节点间复制。
  • 8. MySQL集群同步集群(mysql cluster) 结构:(data + sql + mgm 节点) 特点: 1) 内存级别的,对硬件要求较低,但是对内存要求较大。换算比例为:1:1.1; 2) 数据同时放在几台服务器上,冗余较好; 3) 速度一般; 4) 建表需要声明为engine=ndbcluster 5) 扩展性强; 6) 可以实现高可用性和负载均衡,实现对大型应用的支持; 7) 必须是特定的mysql 版本,如:已经编译好的max 版本; 8) 配置和管理方便,不会丢失数据;异步集群(mysql replication) 结构:(master + slave) 特点: 1) 主从数据库异步数据; 2) 数据放在几台服务器上,冗余一般; 3) 速度较快; 4) 扩展性差; 5) 无法实现高可用性和负载均衡(只能在程序级别实现读写分离,减轻对主数据库的压力); 6) 配置和管理较差,可能会丢失数据;
  • 9. MySQL集群的组成 数据节点管理节点MySQL服务节点MySQL集群数据节点:用以存储所有属于MySQL Cluster的数据。这些数据在数据节点之间被复制以保证在一个或多个节点出现故障时集群仍然持续可用。数据节点轮流处理事务。随着数据复制份数的增加整个系统的数据冗余性相应提高。 管理节点:用以控制系统启动时的初始配置,在集群设置发生改变时又被重新利用。通常只需配置一个管理节点;然而为了排除单点故障需要,有可能的话,尽量增加管理节点的数量。管理节点只在集群启动和发生配置变化的时候起作用,集群启动以后,不论管理节点处于什么状态,整个集群都将保持其在线和可用状态。 MySQL服务节点:用于存取集群数据节点上的数据,给软件开发者提供了一个标准的SQL语言编程接口。MySQL服务节点负责向数据节点传送访问请求,这使MySQL使用者无需知道具体的集群过程,也无需进行数据库操作的底层编程。
  • 10. MySQL集群的组成 图右图描述了一个MySQL集群架构示例,其为MySQL所有的组件提供了最小限度的冗余。图中的6个节点由如下组成:  两个管理节点  两个数据节点  两个MySQL服务节点
  • 11. MySQL集群数据分布示例实施方法:将存储于集群的数据被切割成数据片。这些数据片根据事先指定的副本数,在可用的数据节点上进行相应的复制。在上图中,我们有四个数据片,将它们分别分布到四个数据节点。每个碎片都复制两次。结果,集群将它们标记为首要和次要数据片。根据这些数据片创建数据组。构成一个副本的数据节点组成一个节点组。
  • 12. 扩展的MySQL集群
  • 13. MySQL集群和复制MySQL Server 5.1 引入了行复制的功能。 一些众所周知的需要应用MySQL 集群的复制功能的理由是: 能扩展MySQL数据库规模 复制功能增强不论是数据中心还是广域网中的数据库的高可用性 数据库读写负载均衡 被复制出的数据库在升级,测试,备份等维护操作中都可以使用 复制对象: 从MySQL 集群到另一个MySQL集群的复制 从MySQL server (MyISAM,InnoDB等)到MySQL 集群的复制 从MySQL集群到MySQL server的复制
  • 14. MySQL复制 MySQL本身支持单向,异步复制。MySQL复制以一台服务器为主机,其它一个或多个服务器为从机。恰恰与MySQL集群相反,集群是同步复制。 异步数据复制意味着数据从一个机器拷贝到另一个机器时,存在一定的延迟。通常,这种延迟是由网络带宽,可用资源,以及管理员预先设定的时间间隔所决定。但是,只要正确配置和调整,复制在很多应用中可以认为是即时的。同步复制意味着数据可以在同一时刻向一台或是多台机器提交,通常叫做”双步提交”。
  • 15. MySQL 主从结构主从复制方法: 主服务器写日志; 同步日志给从服务器; 从服务器读日志并写数据库。标准MySQL复制,主服务器将更新写到二进制日志文件并且维护一个索引文件以保存日志的更新轨迹。二进制日志里保存的更新记录将会被发送到从机。当从机连接至主机,他会从日志里读取从最后一次成功更新的位置。然后会执行从那个时间点之后的所有更新, 完了就一直处于等待状态。
  • 16. 主从复制优势主从复制提供以下优势,可用性,性能,易用性。 一旦主机故障,应用可以转移到从机。 在主机和从机进行负载切分,可以带来更快的响应时间。简单”读”数据的查询,比如SELECT,可以用从机处理以减少主机的压力。更新的查询被分到主机处理,以便结果数据能及时的反馈。这种负载均衡策略在更新比较少的应用中非常有效。(通常情况是这样的) 另一个使用复制的好处是数据库的备份可以使用从机来做,同时也不会影响主机的资源。在备份进行时,主机继续处理更新。
  • 17. MySQL主从读写操作上图描述了在标准的故障切换下,MySQL复制的配置MySQL主从读写操作
  • 18. 主从复制拓扑图
  • 19. MySQL集群到MySQL集群复制
  • 20. MySQL使用共享存储正常运行状态故障切换后状态
  • 21. 数据分布式拆分(Sharding)水平拆分 根据表中数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库(主机)上,这种切分称之为数据的水平)横向)切分。 水平拆分是将同一个表中的不同数据拆分到不同的数据库中。 垂直拆分 按照不同的表(或Schema)来切分到不同的数据库(主机)之上,这种切分可以称之为数据的垂直(纵向)切分。 垂直切分的最大特点是规则简单,实时方便,尤其适合各业务之间耦合度非常低、相互影响很小、业务逻辑非常清晰的系统。将表分开到不同的数据库中。 应用:当某个(或某些)表的数据量和访问量特别大,通过垂直切分将其放在独立的设备上后仍然无法满足性能要求时,就必须将垂直切分与水平切分相结合,先垂直切分,然后水平切分,这样才能解决这种超大型表的性能问题。
  • 22. 垂直切分(vertical sharding)优点 数据库拆分简单明了,拆分规则容易 应用程序模块清晰,容易整合 数据维护方便易行,容易定位缺点 部分表关联无法在数据库级别完成,要在程序中完成; 对于访问极其频繁且数据量超大的表仍然存在性能瓶颈,不一定能满足要求 事务处理相当复杂 切分达到一定程度后,扩展性会受到限制 过多切分可能带来系统过于复杂而难以维护
  • 23. 水平切分(Horizontal Sharding)优点 表关联基本能在数据端全部完成; 不会存在某些超大型数据量和高负载的表遇到瓶颈的问题; 应用程序段整体架构改动相当较小; 事务处理相对简单; 只要切分规则定义好,基本上难遇到扩展性问题。缺点 切分规则相对复杂,很难抽象出一个能够满足整个数据库的切分规则; 后期数据的维护难度有所增加,人为手工定位数据更困难; 应用系统各模块耦合度较高,可能会对后面数据的迁移拆分造成一定的困难。
  • 24. MySQL系统结构图
  • 25. MySQL存储引擎MyISAMMysql的默认数据库,最为常用。拥有较高的插入,查询速度,但不支持事务 InnoDB事务型数据库的首选引擎,支持ACID事务,支持行级锁定 BDB源自Berkeley DB,事务型数据库的另一种选择,支持COMMIT和ROLLBACK等其他事务特性 Memory所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在Mysql重新启动时丢失 Merge将一定数量的MyISAM表联合而成一个整体,在超大规模数据存储时很有用 Archive非常适合存储大量的独立的,作为历史记录的数据。因为它们不经常被读取。Archive拥有高效的插入速度,但其对查询的支持相对较差 Federated将不同的Mysql服务器联合起来,逻辑上组成一个完整的数据库。非常适合分布式应用 Cluster/NDB高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用 CSV: 逻辑上由逗号分割数据的存储引擎。它会在数据库子目录里为每个数据表创建一个.CSV文件。这是一种普通文本文件,每个数据行占用一个文本行。CSV存储引擎不支持索引。 BlackHole :黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继 EXAMPLE存储引擎是一个不做任何事情的存根引擎。它的目的是作为MySQL源代码中的一个例子,用来演示如何开始编写一个新存储引擎。同样,它的主要兴趣是对开发者。EXAMPLE存储引擎不支持编索引。 另外,Mysql的存储引擎接口定义良好。有兴趣的开发者可以通过阅读文档编写自己的存储引擎。
  • 26. MySQL Proxy
  • 27. 分布式数据库中间件产品MySQL Proxy Amoeba Amoeba For MySQL Amoeba For Aladin HiveDB Alibaba-Cobar-Server
  • 28. 数据分布式需要还考虑的几个问题引入分布式事务问题 MySQL 5.0以上,InnoDB支持分布式事务 分布式事务对系统的资源消耗大、 分布式事务的异常处理比较复杂 解决方法:事务拆分,分别控制 跨节点Join的问题 老的Join语句不能继续使用 MySQL Federated引擎提供支持 解决方法:先找一个表,然后在join找另外一个表。 跨节点合并排序的问题 数据源分布到不同的节点中,query分页无法正确运行