首页 » MySQL » MySQL学习(一):MySQL架构介绍

MySQL学习(一):MySQL架构介绍

原文 http://blog.csdn.net/xinyu112/article/details/78091768

2017-09-26 12:21:01阅读(225)

一、MySQL架构 1、MySQL服务器由SQL层和存储引擎层构成 SQL层:包括权限判断、SQL解析功能和查询缓存处理等 存储引擎层:完成底层数据库数据存储操作 2、MySQL各个模块的特点

MySQL学习(一):MySQL架构介绍

客户端通过连接/线程处理层来连接MySQL数据库
连接/线程处理层主要用来处理客户端的请求、身份验证和数据库安全性验证等。 查询缓存和查询分析器是 SQL 层的核心部分 主要涉及查询的解析、优化、缓存,以及所有内置的函数,存储过程,触发器,视图等功能。 优化器主要负责存储和获取所有存储在 MySQL 中的数据。 这三层统称为 MySQL 数据库的 SQL 层。 (一)、MySQL物理文件的组成

MySQL 的物理文件包括日志文件、数据文件和其他文件

1、日志文件

主要记录了数据库操作信息和错误信息。常用的日志文件包括错误日志、二进制日志、查询日志、慢查询日志和 InnoDB 引擎在线 Redo 日志等。

错误日志:记录了MySQLSever运行过程中遇到的所有严重的错误信息,以及 MySQL每次启动和关闭的详细信息。
默认关闭,启动时要重新配置.-log-error[=file_name]选工页,修改错误日志存放的目录和文件名称 。 二进制日志(binlog):记录了MySQL所有修改数据库的操作,然后以二进制的形式记录在日志文件中,其中还包括每条语句所执行的时间和所消耗的资源,以及相关的事务信息。
默认开启,启动时可以重新配置-log-bin[=file_name]选项,修改二进制日志存放的目录和文件名称。 查询日志: hostname.log,查询日志记录所有的查询操作,包括所有的 select
操作信息。
体积比较大,开启后对性能有较大的影响,可以通过“-log[=file_name]”选项开启。 慢查询日志: hostname-slow.log,所有 SQL 执行的时间超过 long_query_time 变量的语句和达到min_examined_row_limit 条距离的语句 。
通过设置-log-slow_queries[=file_name]选项开启后,将记录日志所在的路径和名称。 InnoDB引擎在线 Redo 日志:记录了 InnoDB 所做的所有物理变更和事务信息。
通过Redo日志和Undo信息,InnoDB大大地加强了事务的安全性。 通过设置innodb_log_group_home_dir选项来更改日志的存放位置,通过innodb_log_files_in_group选项来设置日志的数量。 2、数据文件

会在 data 目录下面建立一个以数据库为名字的文件夹,用来存储数据库中的表文件数据。

“ .frm ”文件:表名命名,主要存放与表相关的数据信息,主要包括表结构的定义信息。 “ .MYD ”文件:MyISAM 存储引擎创建表时,每一个 MyISAM 类型的表都会有一个“ .MYD ”文件和一个“ .MYI"文件。“ .MYD ” 文件主要用来存放数据表的数据文件。 “ .MYI ”文件:对于MyISAM存储引擎来说,可以被缓存的内容主要就是源于“ .MYI”文件中 ,“ .MYI ” 文件中主要用来存储表数据文件中任何索引的数据树。 “.ibd” 文件和“.ibdata”文件:用来存储InnoDB存储引擎的数据,其中主要包括索引信息。 3、其他文件

例如系统配置文件、 pid 文件、 socket 文件等等。

二、InnoDB存储引擎

MySQL的存储引擎:MyISAM、InnoDB、MEMORY(默认使用 HASH 索引)、MERGE(一组 MyISAM 表的组合)、BerkeleyDB( BDB)
InnoDB 存储引擎是第三方公司开发的,目前应用最广泛的数据存储引擎除了MyISAM之外就是InnoDB了 , InnoDB 写的处理相对于MyISAM效率低一些,InnoDB牺牲了存储和查询的效率,支持事务安全,支持自动增长列,对事务安全的支持,这是 InnoDB成为MySQL最为流行的存储引擎之一的重要原因。

1、支持事务 MySQL 支持对 InnoDB 存储事务控制,实现了 SQL92 标准所定义的 4 个级别(read uncommitted, repeatable read, read committed 和 serializable) 。 MySQL 通过 commit 、 rollback 、set autocommit 、 start transaction 等语法支持本地事务,具体语法如下所示:
START TRANSACTION | BEGIN [WORK]
COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
SET AUTOCOMMIT = {0|1}
2、自动增长列 列的后面添加 auto increment 属性 表在添加数据 的过程中,可以插入空值,该列可以自动增加数据。
# 创建表
create table authors(
    id integer primary key auto_increment,
    name varchar (1O)
) engine=innodb default charset=gbk;
# 插入空值
insert into authors(name) values (’ ivan'), (’ susan ’),(’ shark ’);
3、 外键约束 从数据库性能上讲数据库外键降低了数据库查询的效率,数据库表之间的精合度更加紧密,但是对于不少用户来讲,采用外键约束可能是最低成本的选择方式。 MySQL 支持外键的存储引擎只有 InnoDB。 在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候会添加相对应的索引 。
# 表sclass
create table sclass(
    id integer primary key auto_increment,
    cname varchar(20) not null,
    last_update timestamp not null default current_timestamp on update current_timestamp
)engine=innodb default charset=gbk;
# 表st,添加外键约束
create table st(
    id integer primary key auto_increment,
    sname varchar(20) not null,
    class_id integer not null,
    last_update timestamp not null default current_timestamp on update
current_timestamp,
    foreign key (class_id ) references sclass (id) on delete restrict on update
cascade
)engine=innodb default charset=gbk;

在删除操作时,如果是删除主表的数据,子表对应的记录不会被删除:如果是更新主表,子表对应的记录会更新。

在物理存储方面 , InnoDB 有自己独特的存储方式,数据也是存放在.frm 文件里面,但是表数据和索引数据是存放在一起的。 InnoDB 的存储表和索引有以下两种方式:
使用共享表空间存储,也就是所有表和索引数据存放在同 一个表空间中,数据和索引在 innodb_data\ _home_dir 和 innodb_ data_file_path 定义的表空间中,可以使用一个或者多个
数据文件。
使用多表空间存储,这种存储方式创建的表结构存放在 .frm文件中,但是每个表的
数据和索引被存放在一个单独的 .ibd 文件中。如果是分区表,则每个分区对应单独的 .ibd 文件,
文件名称是“表名+分区名”,可以在创建分区的时候指定每个分区的数据文件的路径,这样
的好处在于可以将表的读取操作平均分布到若干个磁盘分区文件上,提高数据访问的效率。 InnoDB 所有的参数基本上都是加了前缀“ innodb_”。 三、MySQL 工具

MySQL服务器端工具:mysqld、 mysqld_safe、mysql.server、mysqld_multi 、myisamchk 、mysql.server、mysqlbug、mysql_install_db 。
MySQL客户端工具:myisampack、mysql 、 mysqlaccess、mysqladmin、mysqlbinlog、mysqIcheck、mysqldump、mysqlbotcopy 、mysql import、 mysqlshow、perror 。

1、MySQL 客户端连接工具一mysql 登录本地 MySQL 服务器:mysql -u root -p,回车,输入密码 登录远程 MySQL 服务器:mysql -u ivan -h 192.168.0.5 -p,回车,输入密码
查看当前连接用户 :select current user(); –> ivan@% MySQL 的字符集选项可 以在/etc/my.cnf 中配置 ,也可 以在 MySQL 命令 中手工指定客户
端字符集 :mysql -u root -p –default-character-set=gbk,回车,输入密码 直接在 MySQL 客户端执行的语旬,对于一些批处理脚本,这种方式比较方便:mysql -u root -p mysql -e “select host,user from user”;,回车,输入密码

最新发布

CentOS专题

关于本站

5ibc.net旗下博客站精品博文小部分原创、大部分从互联网收集整理。尊重作者版权、传播精品博文,让更多编程爱好者知晓!

小提示

按 Ctrl+D 键,
把本文加入收藏夹