21

MySQL延时备份之实现

在实际工作中,经常有一不小心误删除数据库或表而后悔莫及的事件发生,这有没有后悔药可吃呢?今天介绍的延时备份就可以做到。延时备份让slave滞后于master一段时间,当你误操作时只要立即停止slave的同步,即可轻松地从延时备份库中找回你误删的数据。

继续阅读全文

30

SQL到NOSQL的思维转变

NOSQL系统一般都会宣传一个特性,那就是性能好,然后为什么呢?关系型数据库发展了这么多年,各种优化工作已经做得很深了,NOSQL系统一般都是吸收关系型数据库的技术,然后,到底是什么因素束缚了关系型数据库的性能呢?我们从系统设计的角度看这个问题。

继续阅读全文

10

InnoDB的Master Thread调度流程

解释一下“插入缓冲”(Insert Buffer):InnoDB为了避免更新数据时更新索引损失太多性能,使用了这种称为Insert Buffer的方法来缓冲索引更新,对于非聚集索引(主键索引)、唯一索引的修改,不是每次都直接插入索引页,而是先判断要更新的这一页在不在内存中,如果不在则存入Insert Buffer,按照Master Thread的调度规则来合并非唯一索引和索引页中的叶子结点,这样经常能减少更新索引的代价。为什么要求是非唯一索引(排除主键索引和唯一索引)呢?因为唯一索引要检查记录是不是存在,所以必须把修改的记录影响的索引页读出来才知道是不是唯一,这样Insert Buffer就没意义了,反正要读出来,所以只对非唯一索引有效。

继续阅读全文

10

MySQL多个Slave同一server_id的冲突原因分析

今天分析一个诡异问题,一个模拟Slave线程的程序,不断的被Master Server给kill掉,最终发现是因为有两个Slave使用同样一个server id去连接Master Server,为什么两个Slave用同一个server id会被Master Server给Kill呢?分析了源码,这源于MySQL Replication的重连机制。

继续阅读全文

十二 14

DRBD+Heartbeat让MySQL提供的服务更加稳定

这段时间对DRBD和Heartbeat有了一个初步的了解,因为公司目前也在用,所以要好好搞一下,今天就在虚拟机打个了环境,亲自动手学习一下。这两个软件的安装都不复杂,如果你能用yum,那就是瞬间搞定的事情,没有的话用rpm包安装也是很轻松的事情,个人觉得,如果不是说地球上真的找不到和你平台对应的rpm包/tar包的话,那你就用源码包好了,自己享受编译带给你的“成就感”吧。不知道为什么很多时候大家都喜欢源码编来编去的,其实,你编译出来的东西不一定比人家专门的开发人员编出的软件效果要好,也可能你会说了,自己编译自由想放哪儿就放哪儿(难道就这么点追求),如果你习惯了rpm,其实,它的安装目录就那么几个位置,况且rpm也有命名选项帮你找出来。

继续阅读全文

十一 18

mysql-proxy中Admin Plugin的使用以及读写分离的问题

先简单说下什么是MySQL Proxy。从名字上就清晰可见代理嘛,就是在你能直接进行操作前,都要经过这个代理或是agent(国外片里的特工),client-agent-server就是这么一个过程,既然mysql-proxy加在客户端和服务端之间,那么它就必须要能听懂双方说的是什么,它的角色就像一名接线员(operator)。我们都知道mysql client和mysqld通信时,采用的是MySQL自己的网络协议,而MySQL Proxy也同样使用的是这个网络协议,那么三者之间也就没有什么障碍了。除了可以按照策略分发请求,既然放在两者中间,那么所有过来的请求它自然都可以截获,如果你愿意当然还可以做操作前的审核,也可注入些新的东西。Agent嘛,无所不能,不过你需要先对Lua无所不能LoL。

继续阅读全文

29

核心业务系统数据库平台迁移: Oracle -> MySQL

为了对核心技术拥有更多的自主控制能力,为了解决数据库的线性扩展问题,为了尽量减少对商业软件的依赖,为了摆脱对高端硬件的依赖,为了… 基于以上多种原因,2年前,我们计划将公司某核心应用平台进行大手术:数据库平台从软件到硬件全部重构。当然,这其中应用架构的改造也不可避免的进行了大换血。

继续阅读全文

27

我对技术方向的一些反思

我在公司五年多了,最初的数据库就是采用PC服务器,然后我们统一把他们整合到小型机上的集中式数据库,把MySQL换成Oracle,而现在我们又要把小型机换成PC服务器,把集中式Oracle数据库拆分成MySQL数据库集群,这不是简单的轮回,而是技术发展的结果。

虽然现在的发展趋势是分布式架构,但是说不定过几年又会出现超级计算机,从而又走向集中式的道路。我们要做的是能够看到3年内技术发展的一个方向,适应技术发展的潮流,并不断调整目标,在解决问题的过程中不断优化。问题和技术都是不断发展的,试图设计一个完美的解决方案是不现实的,在一个问题被解决后,一定会有新的问题冒出来。

选择简单但是不完美的技术解决问题,先做!然后再不断优化。如果不去尝试,我们永远也不知道下一步要做什么,总是停留在对技术方案本身优劣的讨论上,是没有意义的。

人总是在不断反思,不断否定自我的过程中进步的,技术发展也是一样。

继续阅读全文

十二 02

PHP+MySQL环境下SQL Injection攻防总结

程序员们写代码的时候讲究TDD(测试驱动开发):在实现一个功能前,会先写一个测试用例,然后再编写代码使之运行通过。其实当黑客SQL Injection时,同样是一个TDD的过程:他们会先尝试着让程序报错,然后一点一点的修正参数内容,当程序再次运行成功之时,注入也就随之成功了。

继续阅读全文