分类目录归档:MYSQL

MySQL性能的相关因素

一、商业需求对性能的影响

不合理需求造成资源投入产出比过低

需求是否合理很多时候可能并不是很容易界定,尤其是作为技术人员来说,可能更难以确定一个需求的合理性。即使指出,也不一定会被产品经历们认可。那作为技术人员的我们怎么来证明一个需求是否合理呢?

第一、每次产品经理们提出新的项目(或者功能需求)的时候,应该要求他们同时给出该项目的预期收益的量化指标,以备项目上先后统计评估投入产出比率;
第二、在每次项目进行过程中,应该详细记录所有的资源投入,包括人力投入,硬件设施的投入,以及其他任何项目相关的资源投入;
第三、项目(或者功能需求)上线之后应该及时通过手机相关数据统计出项目的实际收益值,以便计算投入产出比率的时候使用;
第四、技术部门应该尽可能推动设计出一个项目(或者功能需求)的投入产出比率的计算规则。在项目上线一段时间之后,通过项目实际收益的统计数据和项目的投入资源量,计算出整个项目的实际投入产出值,并公布给所有参与项目的部门知晓,同时存放以备后查。

继续阅读MySQL性能的相关因素

MySQL数据库备份

一、数据库逻辑备份

1、什么样的备份是数据库逻辑备份
数据库逻辑备份就是备份软件按照我们最初所设计的逻辑关系,以数据库的逻辑结构对象为单位,将数据库中的数据按照预定义的逻辑关联格式一条一条生成相关的文本文件,以达到备份的目的。

2、常用的逻辑备份
在MySQL中我们常用的逻辑备份主要就是两种,一种是将数据生成可以完全重现当前数据库中数据的INSERT语句,另外一种就是将数据通过逻辑备份软件,将我们数据库表数据以特定分隔符进行分隔后记录在文本文件中。

3、生成INSERT语句备份
在MySQL数据库中,我们一般都是通过MySQL数据库软件自带工具程序中的mysqldump来实现生成INSERT语句的逻辑备份文件。

4、备份时数据的一致性和完整性要求
我们知道,想数据库中的数据一致,那么只有两种情况下可以做到。
第一、同一时刻取出所有数据;
第二、数据库中的数据处于静止状态。

继续阅读MySQL数据库备份

MySQL访问控制实现原理

MySQL访问控制实际上由两个功能模块共同组成,一个是负责“看守MySQL大门”的用户管理模块,另一个就是负责监控来访者每一个动作的访问控制模块。用户管理模块决定造访客人能否进门,而访问控制模块则决定每个客人进门能拿什么不能拿什么。

一、用户管理
1、mysql.user表
访问者提供来源的主机名(或者主机IP地址信息)和访问者的来访“暗号”(登录用户名和登录密码),这两部分中的任何一个没有能够匹配上都无法让看守大门的用户管理模块乖乖开门。
Host存放信任的主机,可以是:
1)主机名(如:mytest)
2)域名(如:www.domain.com)
3)以“%”来充当通配符的某个域名集合(如:%.domain.com)
4)一个具体的IP地址(如:1.2.3.4)
5)存在通配符的IP集合(如:1.2.3.%)
6)用“%”代表任何主机

继续阅读MySQL访问控制实现原理

MySQL Innodb存储引擎简介

Innodb做为第三方公司所开发的存储引擎,和MySQL遵守相同的开源License协议。

一、功能方面的特点

1、支持事务安全
Innodb在功能方面最重要的一点就是对事务安全的支持,这无疑是让Innodb成为MySQL最为流行的存储引擎之一的一个非常重要原因。而且实现了SQL92标准所定义的所有四个级别(READ UNCOMMITTED,READ COMMITTED,REPEATABLE READ 和 SERIALIZABLE)。对事务安全的支持,无疑让很多之前因为特殊业务要求而不得不放弃使用MySQL的用户转向支持MySQL,以及之前对数据库选型持观望态度的用户,也大大增加了对MySQL好感。

2、数据多版本读取
Innodb在事务支持的同时,为了保证数据的一致性以及并发时候的性能,通过对undo信息,实现了数据的多版本读取。

3、锁定机制的改进
Innodb改变了MyISAM的锁机制,实现了行锁。虽然Innodb的行锁机制的实现是通过索引来完成的,但毕竟在数据库中99%的SQL语句都是要使用索引来做检索数据的。所以,行锁定机制也无疑为Innodb在承受高并发压力的环境下增强了不小的竞争力。

继续阅读MySQL Innodb存储引擎简介

MySQL自带工具

1、mysql
mysql的功能和Oracle的sqlplus一样,为用户提供一个命令行接口来操作管理MySQL服务器。
不太常用但有用的参数:
1)-e, --execute=name参数
这个参数是告诉mysql,我只要执行“-e”后面的某个命令,而不是要通过mysql连接登录到MySQL Server上面。
mysql -uroot -p123456 -e "show databases"
2)-E, --vertical参数
登入之后的所有查询结果都将以纵列显示,效果和我们在一条query之后以“\G”结尾一样
3)--prompt=name参数
其主要功能是定制自己的mysql提示符的显示内容。在默认情况下,我们通过mysql登入到数据库之后,mysql的提示符只是一个很简单的内容“mysql>”,没有其他任何附加信息。非常幸运的是mysql通过“--prompt=name”参数给我们提供了自定义提示信息的办法,可以通过配置显示登入的主机地址,登录用户名,当前时间,当前数据库schema,MySQL Server的一些信息等等。
4)--tee=name参数
用来告诉mysql,将所有输入和输出内容都记录进文件。在我们一些较大维护变更的时候,为了方便被查,最好是将整个操作过程的所有输入和输出内容都保存下来。有了“--tee=name”参数,就再也不用通过copy屏幕来保存操作过程了。

继续阅读MySQL自带工具

MySQL处理sql语句过程

在MySQL中,将客户端请求分为了两种类型:
一种是query,需要调用Parser也就是Query解析和转发模块的解析才能够执行的请求;
一种是command,不需要调用Parser就可以直接执行的请求;

当客户端请求和连接线程“互换暗号(互通协议)”接上头之后,连接线程就开始处理客户端请求发送过来的各种命令(或者query),接受相关请求。

连接线程将收到的query语句转给Query解析和转发模块,Query解析器先对Query进行基本的语义和语法解析,然后根据命令类型的不同,有些会直接处理,有些会分发给其他模块来处理。

如果是一个Query类型的请求,会将控制权交给Query解析器。Query解析器首先分析看是不是一个select类型的query,如果是,则调用查询缓存模块,让它检查该query在query cache中是否已经存在。如果有,则直接将cache中的数据返回给连接线程模块,然后通过与客户端的连接的线程将数据传输给客户端。如果不是一个可以被cache的query类型,或者cache中没有该query的数据,那么query将被继续传回query解析器,让query解析器进行相应处理,再通过query分发器分发给相关处理模块。

继续阅读MySQL处理sql语句过程

MySQL物理文件组成

一、日志文件

1、错误文件
默认以hostname.err命名

2、二进制日志文件
mysql-bin.000005

3、慢查询日志
mysqldb01-slow.log

4、mysql-bin.index文件
(binary log index)的功能是记录所有Binary Log的绝对路径,保证MySQL各种线程能够顺利的根据它找到所有需要的Binary Log文件

二、数据文件
在MySQL中每一个数据库都会在定义好(或者默认)的数据目录下存在一个以数据库名字命名的文件夹,用来存放该数据库中各种表数据文件

继续阅读MySQL物理文件组成