MySQL被设计为一个可移植的数据库,几乎能在当前所有的操作系统上运行,如Linux、Solaris、FreeBSD、Mac和Windows。尽管各种系统在底层(如线程)实现方面各有不同,但是MySQL几乎能保证在各平台上的物理体系结构的一致性。所以,你应该能很好地理解MySQL在所有这些平台上是如何工作的。
1.1 定义数据库和实例
在数据库领域中有两个词很容易混淆,它们就是“实例”(instance)和“数据库”(database)。作为常见的数据库术语,这两个词的定义如下。
数据库: 物理操作系统文件或其他形式文件类型的集合。在MySQL 中,数据库文件可以是frm、myd、myi、ibd结尾的文件。当使用NDB 引擎时,数据库的文件可能不是操作系统上的文件,而是存放于内存之中的文件,但是定义仍然不变。
数据库实例: 由数据库后台进程/ 线程以及一个共享内存区组成。共享内存可以被运行的后台进程/ 线程所共享。需要牢记的是,数据库实例才是真正用来操作数据库文件的。
这两个词有时可以互换使用,但两者的概念完全不同。在MySQL 中,实例和数据库的通常关系是一一对应,即一个实例对应一个数据库,一个数据库对应一个实例。但是,在集群情况下可能存在一个数据库可被多个实例使用的情况。MySQL被设计为一个单进程多线程架构的数据库,这点与SQL Server比较类似,但与Oracle 多进程的架构有所不同(Oracle 的Windows版本也是单进程多线程的架构)。这也就是说,MySQL数据库实例在系统上的表现就是一个进程。
1.2数据库配置及设置的简单认识
MySQL数据库的配置文件是集中式配置,能够为mysql的各应用程序提供配置信息,大致分为如下几类。
[mysqld]
[mysqld_safe]
[server]
[mysql]
[mysqldump]
[client]
配置文件的查找路径位:
/etc/my.cnf-->/etc/mysql/my.cnf-->/$MYSQL_HOME/my.cnf-->--default-extra-file=/path/to/somedir/my.cnf --> ~/.my.cnf
越往后的配置文件里面的相同参数会覆盖前面的配置文件参数。
获取运行中的mysql进程使用各服务器参数及其值:
mysql> SHOW GLOBAL VARIABLES; #全局参数
mysql> SHOW [SESSION] VARIABLES; #当前会话的参数
注意:其中有些参数支持运行时修改,会立即生效;有些参数不支持,且只能通过修改配置文件,并重启服务器程序生效;
有些参数作用域是全局的,且不可改变;有些可以为每个用户提供单独的设置;
修改服务器变量的值:
mysql> help SET #很重要的一个命令
全局:
mysql> SET GLOBAL system_var_name=value;
mysql> SET @@global.system_var_name=value;
会话:
mysql> SET [SESSION] system_var_name=value;
mysql> SET @@[session.]system_var_name=value;
状态变量:用于保存mysqld运行中的统计数据的变量;
mysql> SHOW GLOBAL STATUS;
mysql> SHOW [SESSION] STATUS;
最后我们再来看下MySQL的架构原理图
mysql01.png上面的架构图大概的描述下:
- 用户连入mysql时首先连接管理器负责分配给其一个线程
- 然后线程管理器负责管理此线程
- 用户模块验证用户是否合法有权限运行sql语句
- 命令派发器决定sql语句怎样执行
- 如果在查询缓存(query_cache,k、v结构,k:sql查询语句v:sql语句查
询值)中有当前需要执行的语句,则命中,直接从缓存中取数据
6.如果缓存中没有当前要执行的语句则将sql语句送给分析器
7.分析器分析sql语句后决定发送给下面的哪个模块执行
8.相应的模块最后再交给访问控制模块查看其是否有权限
9.如果有权限则交给表管理器
10.然后转化为对存储引擎的调用
11.最后的执行操作则由存储引擎来实施
12.执行结束后返回数据,并记录相关日志
网友评论