MySQL基本信息(1)

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

上面的架构图大概的描述下:

  1. 用户连入mysql时首先连接管理器负责分配给其一个线程
  2. 然后线程管理器负责管理此线程
  3. 用户模块验证用户是否合法有权限运行sql语句
  4. 命令派发器决定sql语句怎样执行
  5. 如果在查询缓存(query_cache,k、v结构,k:sql查询语句v:sql语句查
    询值)中有当前需要执行的语句,则命中,直接从缓存中取数据

6.如果缓存中没有当前要执行的语句则将sql语句送给分析器
7.分析器分析sql语句后决定发送给下面的哪个模块执行
8.相应的模块最后再交给访问控制模块查看其是否有权限
9.如果有权限则交给表管理器
10.然后转化为对存储引擎的调用
11.最后的执行操作则由存储引擎来实施
12.执行结束后返回数据,并记录相关日志

你可能感兴趣的:(MySQL基本信息(1))