5.3 MySQL系统构成
MySQL数据库系统由多个组件构成,通常包括以下几个部分。
1.MySQL数据库服务
该部分主要由MySQL服务器、MySQL实例和MySQL数据库3个部分组成,通常简称为MySQL服务,对应着官方技术文档中的“MySQL Service”“MySQL Server”或“MySQL Da-tabase Server”等说法。
1)MySQL服务。也称为MySQL数据库服务,它是保存在MySQL服务器硬盘上的一个服务软件。通常是指mysqld服务器程序,它是MySQL数据库系统的核心,所有的数据库和数据表操作都是由它完成。其中的mysqld_safe是一个用来启动、监控和(出问题时)重新启动mysqld的相关程序。如果在同一台主机上运行了多个服务器,通常需要用mysqld_multi程序来帮助用户管好它们。
2)MySQL服务实例。MySQL服务实例是一个正在运行的MySQL服务,其实质是一个进程,只有处于运行状态的MySQL服务实例才可以响应MySQL客户机的请求,提供数据库服务。同一个MySQL服务,如果MySQL配置文件的参数不同,启动MySQL服务后生成的MySQL服务实例也不相同。通常是指mysqld进程(MySQL服务有且仅有这一个进程,不像Oracle等数据库,一个实例对应一堆的进程),以及该进程持有的内存资源。对应官方技术文档中的“MySQLinstance”,也有的称之为mysqld进程。
3)MySQL数据库。通常是指一个物理概念,即一系列物理文件的集合。一个MySQL数据库下可以创建很多个数据库,默认情况下至少会有四个数据库(test、mysql、informa-tion_schema、performance_schema),这些数据库及其关联的磁盘上的一系列物理文件构成MySQL数据库。通常提到的data目录是指存储MySQL数据文件的目录,默认是指/data/mysqldata/3306/data目录。
①information_schema。记录用户、表、视图等元数据信息。值得关注的是,这个库是一个特例,它是虚拟出来的库,是由MySQL实例构建和维护的,其对象都保存在内存中,也就是说在磁盘上找不到对应的物理存在,因为它是虚拟的。那么,用户也无法在该库下创建对象,甚至是root身份用户也不行,对于该库,用户唯一能做的事情就是查询,而且该库中的对象在用户权限上面也非常特别。
②注释:数据目录(catalog)是一组关于数据的数据,也叫元数据。在高级程序设计语言中,程序所用到的数据由程序中的说明语句定义,程序运行结束了,这些说明也就失效了。DBMS的任务是管理大量的、共享的、持久的数据。有关这些数据的定义和描述必须长期保存在系统中,一般把这些元数据组成若干表称为数据目录,由系统管理和使用。
数据目录包括基表、视图的定义,以及存取路径(索引、散列等)访问权限和用于查询优化的统计数据等的描述。数据目录只能由系统定义并为系统所有,在初始化时由系统自动生成。数据目录是被频繁访问的数据,同时又是十分重要的数据,几乎DBMS的每一部分在运行时都要用到数据目录。如果把数据目录中所有基表的定义全部删去,则数据库中的所有数据,尽管还存储在数据库中,将无法访问。为此,DBMS一般不允许用户对数据目录进行更新操作,而只允许用户对它进行有控制的查询。
③mysql:记录用户权限、帮助、日志等信息,提供数据字典的功能。
④performance_schema:MySQL服务性能指标库。
⑤test:测试库。
4)mysql数据库是MySQL数据库中的一个数据库名称,是创建MySQL数据库时自动创建的,主要存储一些系统对象,如用户、权限、对象列表等字典信息。
2.MySQL客户程序和工具程序
主要负责与服务器进行通信,主要有如下几个。
1)mysql:用于把SQL语句发往服务器并让查看其结果的交互式程序,位于[mysql_software]/bin目录下。通过它完成连接数据库、查询、修改对象,执行维护操作。
2)mysqladmin:用于完成关闭服务器或在服务器运行不正常时检查其运行状态等工作的管理性程序。
3)mysqlcheck、isamchk、muisamchk:用于对数据表进行分析和优化,即当数据表损坏时,还可以用它们进行崩溃恢复工作。
4)mysqldump和mysqlhotcopy:用于备份数据库或者把数据库复制到另一个服务器的工具。
3.服务器的语言——SQL
SQL是结构化查询语言(Structured Query Language,SQL)的英文缩写,它是一种专门用来与数据库通信的语言。
注:在MySQL系统构成中,要注意“MySQL数据库” “mysql数据库” “mysql库”和“mysql”几个术语的含义,避免产生概念歧义。