通常,当我们的MySQL数据库逐渐变慢时,我们就希望通过一切努力使它变得更快、更强、更大、更好!那么都有哪些方法呢?别着急,我会一个一个给大家介

绍如何才能实现这些美好的愿望。阅读本系列文章将有助于扩大你的视野,更好地规划你将来的需要,本系列的第一篇文章“更快,更强的MySQL”讨论了查询

优化和硬件调整,包括增加额外的服务器和应用程序变更,本文将介绍如何通过分区和负载均衡解决方案让你的MySQL变得更大更好。

更大的MySQL

增加更多的MySQL实例是提高应用程序响应速度的有效方法,如果你的服务器有多颗CPU,充足的内存和快速的硬盘,这些资源有相当一部分处于闲置状

态,那么在这种情况下,在服务器上可以同时运行多个MySQL实例,因为MySQL默认情况下只有一个进程和多个会话线程,因此它真正能利用的最大硬件资

源是有限的。

如果你的服务器已经快饱和了,那么必须增加服务器,不管你的多个MySQL实例是在一台服务器上,还是在多台服务器

上,你都需要为应用程序配置一个方法让它知道该将查询发送给哪台服务器,如果是要修改数据,那就应该将指令发送到主数据库实例,如果仅仅是查询操作,那么

随便发给任何一个从数据库实例即可。

1、数据分区和水平分区

因为许多Web应用程序是通过会话来识别用户

的,通过会话将它们分配到不同的从数据库实例显得很有道理。例如A-G,H-O,P-Z数据库实例可能在工作,这时可以通过用户名的哈希值,或

userid将用户分配到不同的服务器上,这就是所谓的分区键,选择分区键时需要慎重决定,因为它会影响到你如何构建从数据库实例,主要是考虑如何让这些

服务器平均承担工作负载,如果选择得不好,假设从数据库倒掉,也可能会引起数据中断。

如果正采用这种分区,你需要决定程序运行时使

用哪个数据库,这可以通过一个中间层如MySQL代理来实现,虽然它还处于Alpha阶段,但它的思想很好,并且已经有很多人将其用于生产环境,它运行在

服务器上,响应端口3306上的请求,然后将这些查询通过高速语言如lua实现的某些逻辑转发给后端适当的服务器。

其次你也可以在

应用程序中指定将查询发到哪些服务器,这也是最灵活的方法,你可以完全控制整个决策过程,你也可以使用master_pos_wait检查从数据库实例,

看看它们是否有足够的计算资源。还有你使用的编程语言或Web框架可能也会提供这方面的支持,如果你还不清楚,可以查询它们的文档。

你还可以研究一下Continuent Tungsten,DBIx::DBCluster for Perl以及SQLRelay,它们支持许多不同的编程语言和数据库。同样,CMS如Drupal也支持多种只读的从数据库,你只需要启用这个功能即可。

使用这种架构需要考虑的另一个事情是,是否要使用主数据库实例,以及何时使用,一般说来,所有插入,更新和删除操作都应放在主数据库实例上完成,所有的

查询操作都放在从数据库实例上完成。例如,如果某个用户对博客文章发表了注释,此时如果直接使用从数据库,可能无法完成,因为MySQL复制架构会存在滞

后,此时从数据库中可能还没有那篇博文。

检查过时数据是一个更好的方法,如果你有报告查询在夜间运行,这种方法可能工作得很好,你只需要确保复制赶得上进度即可。

另一个方法是通过版本号跟踪数据库变更,在读取数据之前确定数据是否是最新的版本。

最后,MySQL提供了一个函数master_pos_wait,它可以确定从数据库更新到哪个时间点了。

2、功能分区

你可能已经使用到功能分区,使用功能分区时,需要创建一个生产数据库的副本用于不同目的,如其中一个用于数据仓库和报告,另一个用于文本搜索等。

通过负载均衡使MySQL变得更好

如果你的从数据库已经有些只读数据,你可能需要实现负载均衡,将流量平均分配到各个从数据库,实现方法有多种,如随机分配,最少连接法,响应速度最快

法,或某种加权平均法,虽然某些硬件负载均衡设备可以提供负载均衡功能,但它们往往是设计用于均衡网络流量,并没有提供数据库相关的均衡功能。

幸运的是有很多软件解决方案,LVS项目就是一个不错的候选,它已经发展得相当成熟稳定,它提供了类似DNS轮询的负载均衡算法,但是在IP层实现的,

速度非常快。此外,也有很多项目是建立在LVS基础之上的,包括wackamole,它是基于对等网络的,因此不会发生单点故障,还有一个值得推荐的项目

是ultramonkey。

小结

MySQL提供了许多高级特性可以实现无限制的规模扩展,视不同应用环境有不同的最佳解决方案,因此需要在用于生产数据库之前,最好先对各种解决方案进行充分了解,并尽量搭建与生产环境负载相当的测试平台进行测试。

mysql负载均衡分区_分区和负载均衡让MySQL更大更好相关推荐

  1. nginx 负载 sessionid 不一致_你不知道的Nginx负载均衡算法,快进来迅速掌握

    关于负载均衡的三种算法,轮询法,随机法,最小连接法,这三种负载均衡的算法,但是关于负载均衡还有其他的算法,我们也需要你去看,而且在面试的过程中,很有可能是会问到的呦. 对于要实现高性能集群,选择好负载 ...

  2. mysql gui 分区_一文彻底搞懂MySQL分区

    一.InnoDB逻辑存储结构 首先要先介绍一下InnoDB逻辑存储结构和区的概念,它的所有数据都被逻辑地存放在表空间,表空间又由段,区,页组成. 段 段就是上图的segment区域,常见的段有数据段. ...

  3. 负载均衡策略_常见的负载均衡策略

    轮询(Round Robin): 这种方法就会将 收到的请求循环分配到服务器集群中的每台机器,即有效服务器.如果使用这种方式,所有的标记进入虚拟服务的服务器应该有相近的资源容量以及敷在相同的应用程序. ...

  4. mysql 导出dmp文件_一文带你了解MySQL主从复制(Master-Slave)

    1.复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重 ...

  5. mysql删除端口配置文件_完美解决phpstudy安装后mysql无法启动(无需删除原数据库,无需更改任何配置,无需更改端口)直接共存...

    今天学习php,当然是要先安装好运行环境了,phpstyudy是一个运行php的集成环境, 一键安装对新手很友好,与时作为一个新手,便跟着教程安装了phpstudy集成环境. 很快安装好了,嗯.对新手 ...

  6. ubuntu 更新mysql后无法登陆_更新ubuntu之后无法登陆mysql

    Ubuntu 14.04,更新一些软件之后莫名其妙的mysql无法登陆了,一直显示:"Access denied for user 'root'@'localhost'" 重置ro ...

  7. mysql 默认当前时间_复制信息记录表|全方位认识 mysql 系统库

    在上一期<时区信息记录表|全方位认识 mysql 系统库>中,我们详细介绍了mysql系统库中的时区信息记录表,本期我们将为大家带来系列第七篇<复制信息记录表|全方位认识 mysql ...

  8. mysql 5.6 缓存_为什么默认情况下从MySQL 5.6开始禁用query_cache_type?

    您需要InnoDB的历史才能理解原因.它来了: 战争故事 InnoDB和查询缓存处于不断的战争状态.在检查InnoDB缓冲池中的更改然后交叉检查查询缓存以进行相同更改时,InnoDB往往非常苛刻. 和 ...

  9. mysql 密码hash算法_如何用hash创建一个mySQL用户(‘sha256’,$salt.$password)?

    我肯定错过了什么. 我想为select-only事务设置数据库用户帐户,但mysql不允许我在创建用户帐户时选择密码的哈希方法. 这失败了: GRANT SELECT ON myDB.* TO 'se ...

最新文章

  1. Windows多线程编程总结
  2. latex自动生成中文目录_自动生成工作表目录三种方法,看哪种适合你?
  3. 102、如何滚动更新 Service (Swarm09)
  4. 什么是分布式锁及正确使用redis实现分布式锁
  5. java 2d划线 刷子_月光软件站 - 编程文档 - Java - Java图形设计中,利用Bresenham算法实现直线线型,线宽的控制(NO 2D GRAPHICS)...
  6. 代码中如何让无序标记的内容并排_英语技术文档中如何正确使用无序列表和有序列表?...
  7. 企业传播的云计算时代还有多远?―21世纪广告―文章摘要―龙源期刊网
  8. 乱码问题的原理及解决方法
  9. FPGA学习记录(7)<巴特沃斯低通IIR滤波器FPGA实现>
  10. 学习PLC不可错过的15个基础!
  11. LaTeX 格式、字母、符号、公式 (总结)
  12. JDBC 数据库连接池
  13. SuperSU下载 | SuperSU Download
  14. Linux基本指令初阶
  15. 计算机蓝屏代码0xc0000020,Win10系统运行程序提示“损坏的映像 错误0xc0000020”如何解决?...
  16. 输入一个数求他的因数c语言,【代码】求一个数的因数和、求优化、顺便也供新人参考算法...
  17. Mac电池显示需要维修
  18. Anaconda的升级与卸载
  19. linux操作系统读写文件操作(c语言)
  20. Go 相关问题及解决办法汇总

热门文章

  1. cad坐标归零lisp_「软件技巧」厉害了!输入简单命令轻松解决CAD几类常见问题...
  2. android8 通知呼吸灯_手机呼吸灯那么好用!为什么要取消它?没有呼吸灯真的好吗?...
  3. php sql 条件拼组_sql where查询拼接技巧
  4. flask Form表单数据传递与取值
  5. python sklearn 绘制决策树模型的节点图
  6. opencv java水平投影_OpenCV实现图像在水平方向上投影
  7. Linux内核分析(八) 设备驱动
  8. JS里的居民们5-数组(栈)
  9. [洛谷P1342]请柬
  10. loadrunner录制回放常见问题及解决办法