首页 > 代码库 > mysql架构组成

mysql架构组成

什么是mysql

        mysql有mysqld AB公司自主研发,是最流行的开发源代码的数据库管理系统之一,它同时也是一个支持多线程高并发多用户的关系型数据库管理系统

        mysql数据库以其简单高效可靠的特点。

    mysql与其他数据库的简单比较

        功能比较:字段类型支持方面,另一个著名的开源数据库PostGreSQL支持的类型是最完整的,而oracle和其他一些商业数据库,比如DB2,Sybase等,较mysql来说也要相对少一些。事务支持方面,虽然mysql自己的存储引擎没有提供,但是已经通过第三方插件式存储引擎innodb实现了sql 92标准所定义的四个事务隔离级别的全部。在可编程支持方面,mysql和其他数据库相比还是一定的差距,虽然最新版的mysql已经开始提供一些简单的可编程支持。如开始支持procedure,function,trigger等。但是所支持的功能还是比较有限,和其他几大商用数据库管理系统相比,还存不足。

        易用性比较:系统易用性方面来比较,每一个使用过mysql的用户都能够明显地感觉出mysql在这方面与其他通用数据库管理系统之间的优势所在。尤其相对于一些大型的商业数据库管理系统如oracle,DB2以及sybase来说,对于普通用户来说,操作的难易程度明显不处于一个级别,mysql一直都奉行简单易用的原则。从安装方面来说,mysql安装包仅仅只有100MB左右,与几大商业数据库完全不在一个数量级,安装难易程度也要逼oraccle等商业数据库简单很多,不论是通过已经编译好的二进制分发包还是源码编译安装。数据创建比较,mysql仅仅只需要一个简单的create datebase命令,即可在瞬间完成建库的,而oracle创建一个数据库简直就是一个非常庞大的工程

        性能比较:仅仅只有oracle数据库能够与其一较高下

        可靠性:当前最火的facebook这样大型的网站都是使用mysql数据库,可以看出,mysql在稳定可靠性方面,而且排在全球10位的大型网站里面,大部分都是部分业务是运行在mysql数据库环境上。mysql数据库在发展过程中一直有自己的三个原则:简单,高效,可靠。

    mysql的主要适合场景

        web网站系统

            是mysql最大的客户群,因为mysql数据库的安装配置非常简单,使用过程维护也不像大型商业数据库管理系统那么复杂,而且性能出色。重要的一个原因是mysql是开放源代码的,可以完全免费使用。

        日志记录系统

            mysql数据库的插入和查询性能都非常的高效,如果设计地较好,在使用myLSAM存储引擎的时候,两者可以做到互不锁定,达到很高的并发性能。所以对需要大量的插入和查询日志记录的系统来说。比如处理用户的登录日志,操作日志等是非常适合的应用场景

        数据仓库系统

            随着21世纪的数据仓库数据量飞速增长,我们需要的存储空间越来越大,数据量的不断增长,使数据的统计分析变得越来越低效,也越来越困难。还是有几个可以解决的思路:一是采用昂贵的高性能主机以提高计算性能,用高端存储设备提供i/o性能,但是成本非常高:二是通过将数据复制到多台使用大容量硬盘的廉价pc server上,以提高整体计算性能和i/o能力,效果尚可,存储空间有一定的限制,成本低廉:三是通过将数据水平拆分,使用多台廉价的pc server和本地磁盘来存放数据,每台机器上面都只有所有数据的一部分,解决了数据量的问题,所有pc server一起并行计算,也解决了计算能力问题,通过中间代理程序调配各台机器的运算任务,即可以解决计算性能问题又可以解决i/o性能问题,成本也很低廉。第二和第三的实现,mysql都有较大的优势,通过mysql的简单复制功能,可以很好的将数据从一台主机复制到另一台,在internet也可以复制。当然,其他的数据库同样也可以做到,不是只有mysql有这样的功能,但是mysql是米那份,其他数据库大多数都是按照主机数量或cpu数量来收费,基本上所有数据库系统都能实现,但是其高昂的成本并不是每一个公司都能承担。

    mysql架构组成

        日志文件:错误日志,查询日志,慢查询日志,事务日志,二进制日志

            日志是mysql数据库的重要组成部分日志文件中记录着mysql数据库运行期间发生的变化,也就是说用来记录mysql数据库的客户端连接状况,sql语句的执行情况和错误信息等。当数据库意外损坏时可以通过查看日志文件找出错误的原因,并且还可以通过日志文件进行数据恢复。

            错误日志:ErrorLog

                在myslq数据库中,错误日志功能是默认开启的,错误日志默认存储在mysql数据库的数据目录中,错误日志文件通常的名称为hostname.err。其中,hostnmae表示服务器主机名。

                错误日志信息可以自己进行配置,错误日志所记录的信息是可以通过log-error和log-warnings来定义的,其中log-warnings是定义是否将警告信息也定义至错误日志中,默认情况下错误日志大概记录服务器启动和关闭过程中的信息,服务器允许过程中的错误信息,事件调度器允许一个事件时产生的信息,在服务器上启动服务器进程时产生的信息。

                    mysql有很多系统变量可以设置,系统变量设置不同,会导致系统允许状态不同。

                    查看系统设置:

                        show [global | session] variables [like_or_where]

                        show variables: shows the values of mysql system variables

                    查看允许状态:

                        show [global | session] status [linke_or_where]

                        show status: provides server status information

                    如何修改系统配置

                        配置文件设置my.cnf

                            binlog_cache_size=1M

                        set global binlog_cache_size=1048576

                    一般而言,日志级别的定义没有会话变量都只是在全局级别下进行定义

                    查看错误日志的状态:show global variables like ‘%log_error%‘;

                        log_error定义为错误日志的文件路径

                        log_error_verbosity

                    更改错误日志位置可以使用log-error来设置形式

                        vim /etc/my.cnf

                        log-error=/usr/local/mysql/data/mysqld.err

                        tail /usr/local/mysql/data/mysqld.err

                    为了方便维护需要,有时候会希望将错误日志中的内容做北方并重新开始记录,这时候,可以利用ysql的flush logs命令来告诉mysql备份旧日志文件并生成新的日志文件,北方文件名以.old结尾

                    删除错误日志

                        mysql5.5.7之前:数据库管理员可以删除很长时间之前的错误日志,以包子mysql服务器上的硬盘空间。mysql数据库中,可以使用mysqladmin命令开启新的错误日志。mysqladmin命令语法:mysqladmin -u root -p    flush-logs也可以登录mysql数据库中使用flush logs语句来开启新的错误日志。

                    在mysql5.5.7之后:服务器将关闭此项功能,只能使用重命名原来的错误日志文件,手动冲洗日志创建一个新的

        二进制日志:binary Log & Binary Log index

            二进制日志,也就是我们常说的binlog,也是mysql server中最重要的日志之一,主要用于记录修改数据或者可能引起数据改变的mysql语句,并且记录了语句发生时间,执行时长,操作的数据等等。所以说通过二进制日志可以查询mysql数据库中进行了哪些变化,一般大小体积上限为1G。

            当我们通过“log-bin=file_name”打开了记录的功能之后,mysql会将所有修改数据库数据的query以二进制形式记录到日志文件中,日志中并不仅限于query语句这么简单,还包括一条query所执行的时机,所消耗的资源,以及相关的事务信息,所以binlog是事务安全的

            和错误日志一样,binlog记录功能同样需呀“log-bin=file_name”参数的显式指定才能开启,如果未指定file_name,则会在数据目录下记录为mysql-bin.******

                查看二进制开启状态

                    show global variables like ‘%log_bin%‘;

                variable_name                value

                log_bin                      ON

                log_bin_basename             /usr/local/mysql/data/mysql-bin

                log_bin_index                /usr/local/mysql/data/mysql-bin.index

                log_bin_trust_function_creators OFF

                log_bin_use_v1_row_events    OFF

                binlog还有其他一些附加选项参数:

                    “max_binlog_size”设置binlog的最大存储上限,一般设置为512或1G,一般不能超过1G当日志达到上限是,mysql会重新创建一个日志开始继续记录,不过偶尔也有超过设置的binlog产生,一般都是因为即将达到上限是,产生了一个较大的事务,为了保证事务安全,mysql不会将同一个事务分开记录到两个binlog中

                    “binlog-do-db_name”参数明确告诉mysql,需要对某个数据库记录binlog,如果有了“binlog-do-db=db_name”参数的显示指定,mysql会忽略对其他数据库执行的query,而仅仅记录针对数据库执行的query。

本文出自 “11853028” 博客,请务必保留此出处http://tanhong.blog.51cto.com/11853028/1902787

mysql架构组成