MySQL第十一章 – 数据目录
一、数据目录位置
在Unix系统里,数据目录位置默认安装在/usr/local/mysql/data 或者 /var/lib/mysql上。
在Windows系统里,默认安装位置是C:\ProgramData\MySQL或者C:\Documents and Settings\ALL Users\Application Data\MySQL
可以在安装时指定安装目录,也可以在配置文件my.cnf(unix系统)、my.ini(windows系统)上指定安装目录。如:
[mysqld]
datadir=dir_name
登陆mysql服务器查看数据目录位置:
show variables like ‘datadir’;
从命令行使用mysqladmin查看数据目录位置:
mysqladmin variables
二、数据目录结构
1.目录结构:
数据库的数据库目录:
(1)每个数据库在数据目录下都对应有一个数据库目录。
(2)数据库里的表读、视图和触发器都对应于数据库目录中的文件。
数据目录也包含其他文件:
(1)服务器进程ID(PID)文件。
(2)服务器生成的状态文件和日志文件。
(3)服务器相关的文件,如DES密钥文件、服务器的SSL证书和密钥文件。
2.MySQL服务器提供的数据访问方式
“客户端/服务器”结构
3.数据库在文件系统里的表示
每一个数据库都代表了一个数据库目录,在数据目录下。
SHOW DATABASES语句可以列出位于数据目录里的目录名称。
CREATE DATABASE db_name语句会在数据目录下创建一个名为db_name的数据库目录。
它还会在这个数据库目录下创建一个名为db.opt的文件,它列出了数据库的各种属性,如默认字符集和排序规则。
DROP DATABASE db_name语句会删除数据目录里的db_name目录,删除innodb表必须要用drop database db_name语句删除,不能直接删除数据目录,因为innodb表有它系统表空间的数据字典条目。
4.表在文件系统里的表示
InnoDB:
(1).frm文件(存储表结构的定义)
(2)独立表空间:.ibd文件(存储表数据和索引,都没个表都有一个独立的.ibd文件)
(3)系统表空间:ibdata1的系统数据文件,位于mysql数据目录下。
MyISAM:
(1)mytbl.frm。格式文件,其中包含对该表结构的描述。
(2)mytbl.MYD。数据文件,其中存储了该表各行的内容。
(3)mytbl.MYI。索引文件,其中包含该表的所有索引信息。
MEMORY:
(1).frm文件(存储表结构的定义)
(2)由于MEMORY表是一种内存表。服务器会把MEMORY表的数据和索引全部存储在内存里,而不是存储在磁盘里。
5.视图和触发器在文件系统里的表示
视图:每个视图只有一个.frm文件,其中包含着该视图的定义和其他相关属性。
触发器:每个触发器存储在一个.TRG文件里,其中包含着触发器的定义和其他相关属性。触发器存储的文件名是该触发器关联的表名,而不是触发器的名字。
6.操作系统对数据库对象名字的约束
(1)MySQL允许的数据库名和表名的最大长度为64个字符,但这些名字的长度都不得超过操作系统所允许的最大长度。
(2)底层文件系统是否区分大小写,会对数据库和表的命名与引用产生影响。(Unix系统区分大小写,Windows系统不区分大小写。)
7.影响表最大长度的因素。
(1)操作系统对文件的最大长度有限制。 (2)MySQL本身对于表的长度限制。
8.数据目录结构对系统性能的影响
当文件越多,文件越大的时候,性能越低。
解决办法:
(1)删除一些不用的表 (2)将业务相同的表合并 (3)使用InnoDB表的系统表空间。
9.MySQL状态文件和日志文件
(1) 进程ID文件:MySQL服务器会在启动时把它的进程ID(PID)写入PID文件,并且在关闭时会删除该文件。
(2) 日志文件:大部分日志文件是可选的,可以在服务器启动时候来启用他们,并可指定他们的名字。
三、迁移数据目录的内容
1.迁移数据目录的原因:
(1) 原来数据目录所处的文件系统已经满了,需要换个更大容量的文件系统。
(2) 原来数据目录所处在很忙的磁盘驱动器上,需要把它迁移到活动不太频繁的驱动器上。
(3) 把数据库和日志分别放在不同的磁盘上,这样有助于减少单个磁盘故障造成的破坏。
2.数据目录的迁移方法
(1)通过命令行或选项文件,指定数据目录。如:
[mysqld]
datadir=dir_name
(2)在Unix上,可以先移动要迁移的文件或目录,然后在原来位置生成一个符号链接、指向新位置。
3.迁移注意事项
(1)迁移前要备份好数据,避免数据出问题。
(2)迁移前最好停止服务器运行。
(3)如果没有办法停止服务器,那就在移动数据库之前,还应该执行FLUSH TABLES语句,以保证服务器会关闭所有打开的表文件。
4.评估迁移带来的影响
在Unix上,可以使用du、df和ls -l命令来查看磁盘空间信息。
5.迁移整个数据目录
(1)停止正在运行的服务器。
(2)把数据目录迁移到新的位置上。
(3)选项文件修改或者在原来数据目录里创建一个符号链接,让它指向新位置。
(4)重启服务器。
6.迁移单个数据库
Unix系统:
(1)停止正在运行的服务器。
(2)把数据库移至新的位置;或者将其复制过去,并删除原来哪个。
(3)在数据目录中创建一个符号链接,让其具有原来那个数据库的名字,并指向那个新的数据库位置。
(4)重启服务器。
Windows系统:
(1) 停止正在运行的服务器。
(2) 在数据库移至新的位置;或者将其复制过去,并删除原来那个。
(3) 在MySQL数据目录中创建一个文件,充当符号链接,让MySQL服务器指定在何处可以找到那个迁移后的数据库目录。这个文件的扩展名为.sym,基本名为数据库名。例如,把sampdb数据库从C:\mysql\data\sampdb移至E:\mysql-book\sampdb,则需要创建一个名为C:\mysql\data\sampdb.sym的文件,让其包括下缪一行内容:
E:\mysql-book\sampdb
(4)保证在重启服务器时启用了符号链接支持功能。Windows服务器在默认情况下应该已启用了这项功能,但是你也可以在命令行上使用—symbolic-links选项来显式启用它,或者将下面几行内容放到某个选项文件里来启用它: [mysqld] symbolic-links
7.迁移单个表
满足以下条
件才能迁移单个表:
(1)必须使用Unix系统,并且要迁移的表必须为MyISAM表。
(2)操作系统必须具有一个可工作的realpath()系统调用。如果真有,那么下面的查询的结构将为YES; SHOW VARIABLES LIKE ‘have_symlink’;
方法和迁移数据库差不多,但是可以不关闭服务器,锁定这个表就行。
8.迁移InnoDB系统表空间。
(1)停止正在运行的服务器。
(2)移动需要迁移的表空间文件。
(3)修改定义InnoDB配置的那个选项文件,反映出文件迁移后的新位置。
(4)重启服务器。
9.迁移状态文件和日志文件。
(1)停止服务器。 (2)移动文件。 (3)修改选项文件。 (4)重启服务器。