MySQL数据目录
一、MySQL主要的目录结构
1. 数据库文件存放路径
mysql> show variables like 'datadir';
+---------------+------------------------+
| Variable_name | Value |
+---------------+------------------------+
| datadir | /usr/local/mysql/data/ |
+---------------+------------------------+
1 row in set (0.00 sec)
从查询结果可以看出,当前MySQL的数据目录是: /usr/local/mysql/data/
2. 相关命令目录
/usr/bin(mysqladmin、mysqlbinlog、mysqldump等命令)
[root@localhost bin]# find . -name "mysqldump*"
./mysqldump
./mysqldumpslow
3. 配置文件目录
配置文件目录:/usr/share/mysql-8.0(命令及配置文件),/etc/mysql(如my.cnf)
[root@localhost share]# cd /usr/local/mysql/share/
[root@localhost share]# ll
total 1000
drwxr-xr-x. 2 mysql mysql 22 Dec 17 13:28 aclocal
drwxr-xr-x. 2 mysql mysql 24 Dec 17 13:28 bulgarian
drwxr-xr-x. 2 mysql mysql 4096 Dec 17 13:28 charsets
drwxr-xr-x. 2 mysql mysql 24 Dec 17 13:28 czech
drwxr-xr-x. 2 mysql mysql 24 Dec 17 13:28 danish
-rw-r--r--. 1 mysql mysql 25575 Dec 17 11:07 dictionary.txt
drwxr-xr-x. 2 mysql mysql 24 Dec 17 13:28 dutch
drwxr-xr-x. 2 mysql mysql 24 Dec 17 13:28 english
drwxr-xr-x. 2 mysql mysql 24 Dec 17 13:28 estonian
drwxr-xr-x. 2 mysql mysql 24 Dec 17 13:28 french
drwxr-xr-x. 2 mysql mysql 24 Dec 17 13:28 german
drwxr-xr-x. 2 mysql mysql 24 Dec 17 13:28 greek
drwxr-xr-x. 2 mysql mysql 24 Dec 17 13:28 hungarian
-rw-r--r--. 1 mysql mysql 3999 Dec 17 11:07 innodb_memcached_config.sql
-rw-r--r--. 1 mysql mysql 2216 Dec 17 12:46 install_rewriter.sql
drwxr-xr-x. 2 mysql mysql 24 Dec 17 13:28 italian
drwxr-xr-x. 2 mysql mysql 24 Dec 17 13:28 japanese
drwxr-xr-x. 2 mysql mysql 24 Dec 17 13:28 korean
-rw-r--r--. 1 mysql mysql 616528 Dec 17 11:07 messages_to_clients.txt
-rw-r--r--. 1 mysql mysql 359072 Dec 17 11:07 messages_to_error_log.txt
drwxr-xr-x. 2 mysql mysql 24 Mar 12 05:58 norwegian
drwxr-xr-x. 2 mysql mysql 24 Dec 17 13:28 norwegian-ny
drwxr-xr-x. 2 mysql mysql 24 Dec 17 13:28 polish
drwxr-xr-x. 2 mysql mysql 24 Dec 17 13:28 portuguese
drwxr-xr-x. 2 mysql mysql 24 Dec 17 13:28 romanian
drwxr-xr-x. 2 mysql mysql 24 Dec 17 13:28 russian
drwxr-xr-x. 2 mysql mysql 24 Dec 17 13:28 serbian
drwxr-xr-x. 2 mysql mysql 24 Dec 17 13:28 slovak
drwxr-xr-x. 2 mysql mysql 24 Dec 17 13:28 spanish
drwxr-xr-x. 2 mysql mysql 24 Dec 17 13:28 swedish
drwxr-xr-x. 2 mysql mysql 24 Dec 17 13:28 ukrainian
-rw-r--r--. 1 mysql mysql 1248 Dec 17 12:46 uninstall_rewriter.sql
二、数据库和文件系统的关系
1. 查看默认数据库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| learn_mysql |
| leecode |
| mysql |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.00 sec)
MySQl自带的系统数据库为:information_schema,mysql,performance_schema,sys
1.1 mysql
MySQL系统自带的核心数据库,它存储了MySQL的用户账户和权限信息,一些存储过程,事件的定义信息,一些运行过程中产生的日志信息,一些帮助信息和时区信息等
1.2 information_schema
MySQL系统自带的数据库,这个数据库保存着MySQL服务器维护的所有其他数据库的信息,比如有哪些表,哪些视图,哪些触发器,哪些列,哪些索引。这些信息并不是真实的用户数据,而是一些描述性信息,有时候也称为元数据。在数据库information_schema中提供了innodb_sys开头的表,用于表示内部系统表
1.3 performance_schema
MySQL系统自带的数据库,这个数据库主要保存MySQL服务器运行过程中的一些状态信息,可以用来监控MySQL服务的各类指标,包括统计最近执行了哪些语句,在执行过程的每个阶段都花费了多长时间,内存的使用情况等信息
1.4 sys
MySQL系统自带的数据库,这个数据库主要通过视图的形式把information_schema和performance_schema结合起来,帮助系统管理员和开发人员监控MySQL的技术性能
2. 数据库在文件系统中的表示
[root@localhost mysql]# cd /usr/local/mysql/data/
[root@localhost data]# ll
total 188896
-rw-r-----. 1 mysql mysql 56 Mar 12 11:41 auto.cnf
-rw-r-----. 1 mysql mysql 3989 Mar 13 17:59 binlog.000001
-rw-r-----. 1 mysql mysql 1114 Mar 17 14:06 binlog.000002
-rw-r-----. 1 mysql mysql 157 Mar 20 21:40 binlog.000003
-rw-r-----. 1 mysql mysql 3580 Mar 21 06:26 binlog.000004
-rw-r-----. 1 mysql mysql 157 Mar 21 06:26 binlog.000005
-rw-r-----. 1 mysql mysql 80 Mar 21 06:26 binlog.index
-rw-------. 1 mysql mysql 1680 Mar 12 11:41 ca-key.pem
-rw-r--r--. 1 mysql mysql 1112 Mar 12 11:41 ca.pem
-rw-r--r--. 1 mysql mysql 1112 Mar 12 11:41 client-cert.pem
-rw-------. 1 mysql mysql 1680 Mar 12 11:41 client-key.pem
-rw-r-----. 1 mysql mysql 196608 Mar 21 06:28 #ib_16384_0.dblwr
-rw-r-----. 1 mysql mysql 8585216 Mar 12 11:41 #ib_16384_1.dblwr
-rw-r-----. 1 mysql mysql 5590 Mar 12 11:41 ib_buffer_pool
-rw-r-----. 1 mysql mysql 12582912 Mar 21 06:26 ibdata1
-rw-r-----. 1 mysql mysql 50331648 Mar 21 06:28 ib_logfile0
-rw-r-----. 1 mysql mysql 50331648 Mar 12 11:41 ib_logfile1
-rw-r-----. 1 mysql mysql 12582912 Mar 21 06:26 ibtmp1
drwxr-x---. 2 mysql mysql 187 Mar 21 06:26 #innodb_temp
drwxr-x---. 2 mysql mysql 220 Mar 21 04:44 learn_mysql
drwxr-x---. 2 mysql mysql 78 Mar 13 15:51 leecode
-rw-r-----. 1 mysql mysql 7097 Mar 21 06:28 localhost.localdomain.err
-rw-r-----. 1 mysql mysql 5 Mar 21 06:26 localhost.localdomain.pid
-rw-r-----. 1 mysql mysql 180 Mar 15 23:26 localhost-slow.log
drwxr-x---. 2 mysql mysql 143 Mar 12 11:41 mysql
-rw-r-----. 1 mysql mysql 25165824 Mar 21 06:26 mysql.ibd
drwxr-x---. 2 mysql mysql 8192 Mar 12 11:41 performance_schema
-rw-------. 1 mysql mysql 1680 Mar 12 11:41 private_key.pem
-rw-r--r--. 1 mysql mysql 452 Mar 12 11:41 public_key.pem
-rw-r--r--. 1 mysql mysql 1112 Mar 12 11:41 server-cert.pem
-rw-------. 1 mysql mysql 1680 Mar 12 11:41 server-key.pem
drwxr-x---. 2 mysql mysql 28 Mar 12 11:41 sys
-rw-r-----. 1 mysql mysql 16777216 Mar 21 06:28 undo_001
-rw-r-----. 1 mysql mysql 16777216 Mar 21 06:28 undo_002
除了information_schema这个系统数据库外,其他数据在数据目录下都有对应的子目录
如:learn_mysql
[root@localhost data]# cd learn_mysql/
[root@localhost learn_mysql]# ll
total 1296
-rw-r-----. 1 mysql mysql 114688 Mar 21 04:35 a_employee.ibd
-rw-r-----. 1 mysql mysql 114688 Mar 21 03:47 check_user.ibd
-rw-r-----. 1 mysql mysql 114688 Mar 14 05:30 class.ibd
-rw-r-----. 1 mysql mysql 114688 Mar 20 21:47 c_student.ibd
-rw-r-----. 1 mysql mysql 114688 Mar 21 03:38 d_employee.ibd
-rw-r-----. 1 mysql mysql 114688 Mar 21 04:30 f_dept.ibd
-rw-r-----. 1 mysql mysql 131072 Mar 21 04:31 f_emp.ibd
-rw-r-----. 1 mysql mysql 114688 Mar 21 04:38 p_temp.ibd
-rw-r-----. 1 mysql mysql 114688 Mar 14 05:31 student.ibd
-rw-r-----. 1 mysql mysql 147456 Mar 21 04:44 u_course.ibd
-rw-r-----. 1 mysql mysql 131072 Mar 21 04:44 u_user.ibd
3. 表在文件系统中的表示
3.1 InnoDB
-
表结构
为了保存表结构,InnoDB在数据目录下对应的数据库子目录下创建了一个专门用于描述表结构的文件,文件名为:表名.frm -
表中数据和索引
- 系统表空间:InnoDB会在数据目录下创建一个ibdata1的,大小为12M(自扩展文件,不够用时自动增加文件大小),可以通过innodb_data_file_path配置
- 独立表空间:MySQL5.6.6之后,InnoDB默认为每一个表建立一个独立的表空间,也就是说多少个表就有多少个表空间。使用独立表空间来存储数据的话,会在该表所属数据库对应的子目录下创建一个表示该独立空间的文件,文件名与表名相同,扩展名为.ibd:表名.ibd
- 系统表空间与独立表空间设置:innodb_file_per_table=0(0代表使用系统表空间,1代表使用独立表空间)
-
MySQL8.0版本变化
- MySQL5.7会在数据库对应的子目录生成db.opt 文件用来保存数据库相关的配置(字符集,比较规则等)。MySQL8.0不再提供db.opt文件
- MySQL8.0中不再单独提供.frm文件,而是合并到.ibd文件中
3.2 MyISAM
-
表结构
MySQL5.7:表名.frm
MySQL8.0:表名.xxx.sdi -
表中数据和索引
在MyISAM中索引都是二级索引,数据和索引是分开存放的,所以在文件系统中也是使用不同的文件来存储数据文件和索引文件,同时表数据都存放在对应的数据库子目录下:student_myisam_381.sdi #描述表结构文件,字段长度等 student_myisam.MYD #数据信息文件,存储数据信息 student_myisam.MYI #存放索引信息文件
-
MySQL8.0版本变化
MySQL5.7:.frm文件在MySQL8.0中为表名.xxx.sdi文件