关于mysql开元数据库的几个随想
现在已经是凌晨了,昨天晚上写了我人生中的第一篇笔记,觉得没什么可写的,写了一个多小时都没写出什么,现在突然想写点东西了,这是一个比较有趣的问题,前两个月换了新工作,记得当初面试这份工作的时候面试到第三关(项目经理这关)的时候,他问到了我用过什么数据库,因为在回答过程中无意中说了oracle数据库是百万级别的数据库,mysql是中小型数据库的时候,面试经理反问我说听说现在的淘宝用的数据库就是mysql,这个怎么解释呢?说真的当时我真的不知道怎么解释,只是知道mysql是开元的,而oracle不是,所以当时的回答是:首先mysql是开元的,而oracle不是,而且像马云现在业务做的这么大,并不是他一个人在撑着的,而他能干别人干不了的事情的原因是他有很多聪明的员工,当然要看他的工程师怎么用咯!虽然我觉得这个回答不是正确的,但是说出自己的思路和理解总比不说或者说不会好吧!好吧!事实的确是这样。但经过工作之余时间的查看文档现在给这个问题做一个总结:
首相要声明一点的是MYSQL是开元的,开元的意味着MYSQL发展的很快,会变得很优秀,而且MYSQL说是一个数据库倒不如说是一种存储的规则,mysql的工作原理也简单明了,在最外层到里层分为 connectors、(连接管理器,包括安全的认证)、connection pool(连接池,挂你缓冲用户连接、线程处理)、management Service(系统管理和控制工具)、 &utilities、sql interface(sql接口,接手用户的sql命令、返回用户需要查询的结果)、parser(解析器,解析sql命令)、optimizer(查询优化器,历史调优执行过程策略方案处理)、cache&buffers(查询缓存)、storage engines(存储引擎)、file&logs。
通过配置mysql集群存储方案,可以提高性能和有较好的用错性,具有不共享、分布式节点框架的特点
读写分离
一台 Mysql 作为独立的数据库无法满足实际需求。在实际生产环境中,不论是安全性,高可
用性,还是高并发性等各个方面,单独一台 Mysql 都不足以满足业务需求。
故而现在的做法多为:通过主从复制(Master-Slave)的方式来实现数据同步,再通过读写分离
(MySQL-Proxy)来提升数据库的并发负载能力。使用这种方式进行开发部署,可以较好的解决
业务需求

读写分离的原理:
让 Mater 处理增、改、删(INSERT、UPDATE、DELETE)操作,而 Slave 处理查询(SELECT)操作。
可以通过 MySQL-Proxy 实现读写分离,进行 MySQL-Proxy 读写分离至少需要有以下配置:
1. 数据库 Master 主服务器 x1
2. 数据库 Slave 从服务器 x1
3. MySQL-Proxy 调度服务器 x1
通过以下操作,可以实现读写分离,下列操作都是在 MySQL-Proxy 调度服务器上进行的。
1. MySQL 的安装与配置
2. 检查系统所需软件包
3. 编译安装 Lua
4. 安装配置 MySQL-Proxy
5. 配置并使用 rw-splitting.lua 读写分离脚本
完成以上操作后,即可测试读写分离效果。暂时关闭主从复制功能,连接 MySQL-Proxy,插
入任意记录。查询将发现没有新记录。分别登录到主从服务器查询,发现主服务器有插入记
录,从服务器没有。通过验证,MySQL 的读写分离已经达成,所有的写操作均在 Master 完
成。这样做,就避免了多个数据库同时写入可能造成的数据库不一致性。
此外,所有的读操作分摊给了各个 Slave,以此减轻数据库压力。
跨地区容灾
这里简单介绍一下使用双机热备进行跨地区容灾。
双机热备,简单来讲,就是令两个数据库保持状态自动同步。对于处于双机热备当中的数据
库,对其中任何一个进行操作都可以自动同步到另外一个,这样,就保持两个数据库当中的
数据始终一致。
这种方式有两个好处:
1. 异地容灾,其中一个坏了可以切换到另一个。
2. 负载均衡,可以将请求分摊到其中任何一台上,提高网站吞吐量。
备份工作原理:
两个原始数据相同的数据库 A 和 B,A 数据库中执行过的 sql 语句在 B 数据库里也同步执行一
遍,通过这样,A、B 数据库就可以一直保持同步。
上面是查阅资料找到的一些资料,这些资料足以证明mysql可提供配置和使用的方式很灵活,根据实际的数据特点配置合理的集群数据库的确有可能打赢oracle这个百万级别的数据库,而且通过灵活的配置反倒有更多的优点,例如容错和容灾性、没有百万级别数据库的那种笨重,后期未婚迁移灵活。
关于mysql开元数据库的几个随想的更多相关文章
- Hive的安装与部署(MySQL作为元数据库)
Hive的安装与部署(MySQL作为元数据) (开始之前确保Hadoop环境已经启动,确保Linux下的MySQL已经安装好) 1. 安装Hive (1)下载安装包 可从apache上下载hi ...
- hive安装用mysql作为元数据库,mysql的设置
mysql的设置 在要作为元数据库的mysql服务器上建立hive数据库: #建立数据库 create database if not exists hive; #设置远程登录的权限 GRANT AL ...
- Xampp apache与mySQL开不了 解决办法
Xampp安装后,打开Xampp control panel. 点击Apache对应的Start,开不了.原因是系统的服务占用了80端口,所以要么结束系统服务,要么修改apache端口. 个人比较喜欢 ...
- MySQL开发面试题
……继上一篇MySQL的开发总结之后,适当的练习还是很有必要的…… SQL语法多变,不敢保证唯一,也不敢保证全对,如果错误欢迎指出,即刻修改. 一.现有表结构如下图 TABLENAME:afinfo ...
- MySQL常用:Got a packet bigger than 'max_allowed_packet' bytes & MySQL开远程服务
1. 数据导入时出现错误 Got a packet bigger than 'max_allowed_packet' bytes 通过终端进入mysql控制台 mysql>show VARIAB ...
- 安装cloudera manager使用mysql作为元数据库
1.首次安装好mysql数据库后,会生成一个随机密码,使用如下办法找到: cat /var/log/mysqld.log |grep password 2.首次安装好mysql数据库后,第一次登陆进去 ...
- mysql开发之join语句学习
内连接:inner join -- 全外链接:full outer 左外连接:left outer 右外连接:right outer 交叉连接:cross内连接,两个表中重复部分全外连接,两个表所有字 ...
- hive上mysql元数据库配置
hive调试信息显示模式: ./hive -hiveconf hive.root.logger=DEBUG,console 非常有用. 默认情况下,Hive元数据保存在内嵌的 Derby 数据库中,只 ...
- 在Ubuntu上安装Mysql For Python
安装: 首先安装pip,并且把pip更新到最小版本 apt-get install python-pip pip install -U pip 安装mysql开发包 apt-get install p ...
随机推荐
- CSS技巧之向下箭头
思路:使用◇符号(可在输入法的软键盘找到该符号),使用定位选择位置,并隐藏溢出的上半部分细点:1.使用i标签的楷体属性把◇变大2.给i只有◇符号一半的高度,并隐藏溢出,正常显示一个向上箭头3.对s使用 ...
- 集合异常之Set接口
Set接口,它里面的集合,所存储的元素就是不重复的,通过元素的equals方法,来判断是否为重复元素. HashSet存储JavaAPI中的类型元素 给HashSet中存储JavaAPI中提供的类型元 ...
- 【读书笔记】The Swift Programming Language (Swift 4.0.3)
素材:Language Guide 初次接触 Swift,建议先看下 A Swift Tour,否则思维转换会很费力,容易卡死或钻牛角尖. 同样是每一章只总结3个自己认为最重要的点.这样挺好!强迫你去 ...
- 『C++』Temp_2018_12_26
#include <iostream> #include <string> #include <array> using namespace std; class ...
- FreeImage 生成带透明通道的GIF
主要方法: 加载图像及读取参数 FreeImage_Load FreeImage_GetWidth FreeImage_GetHeight FreeImage_Allocate FreeImage_G ...
- react-router-dom实现全局路由登陆拦截
相比与vue的路由集中式管理,能够很好的进行统一的路由操作,react的路由看起来更乱,想要进行像vue的全局路由管理不是那么得心应手.在我们的项目中,有很多页面是需要登陆权限验证的,最好的方式就是能 ...
- 帝国cms发布信息时替换正文IMG图片标签里的ALT内容
帝国cms发布信息时替换正文IMG图片标签里的ALT内容 在 e/class/userfun.php 里面增加 //替换正文IMG里的ALT内容 function user_imgalt($mid,$ ...
- Python递归与迭代
1.递归与迭代: 递归和迭代都是循环的一种.简单地说,递归是重复调用函数自身实现循环.迭代是函数内某段代码实现循环,而迭代与普通循环的区别是:循环代码中参与运算的变量同时是保存结果的变量,当前保存的结 ...
- UART学习之路(四)VerilogHDL实现的简单UART,VIVADO下完成仿真
用VerilogHDL实现UART并完成仿真就算是对UART整个技术有了全面的理解,同时也算是Verilog入门了.整个UART分为3部分完成,发送模块(Transmitter),接收模块(Recei ...
- Go 入门 - 方法和接口
方法和接口 方法的接受者 Go中没有类,取而代之的是在结构体上定义的方法 为了将方法(函数)绑定在某一类结构体上,我们在定义函数(方法)时引入"接受者"的概念. 方法接受者在它自己 ...