数据目录夹(在centos里面切换到mysql目录下面查看,可以看到许多数据文件。)
[root@localhost lib]# cd
[root@localhost ~]# cd /var/lib/mysql
[root@localhost mysql]# ls
auto.cnf ib_logfile0 mysql performance_schema
ibdata1 ib_logfile1 mysql.sock test
连接到数据库上面
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
可以才看到有四个数据库。
Inforamation_schema:主要存储了一些数据库对象信息,比如用户表信息,列信息,权限信息,字符集信息,分区信息等等。
Mysql:存储了系统用户权限信息。
之后创建一个mytest数据库。
mysql> create database mytest;
Query OK, 1 row affected (0.00 sec)
[root@localhost mysql]# cd /var/lib/mysql
[root@localhost mysql]# ls
auto.cnf ib_logfile0 mysql mytest test
ibdata1 ib_logfile1 mysql.sock performance_schema
之后再去观察,可以看到多出了一个mytest文件,和刚刚的数据库同名。
所以/var/lib/mysql称为数据目录夹。创建一个DB,就会有一个DB的名字和文件名字一样的目录夹产生。即/var/lib/DB名字 为数据库目录夹。
在数据库目录夹里面又存放了什么呢?
[root@localhost mysql]# cd mysql 来到mysql数据库目录夹里面
[root@localhost mysql]# ls
columns_priv.frm innodb_index_stats.frm slave_worker_info.ibd
columns_priv.MYD innodb_index_stats.ibd slow_log.CSM
columns_priv.MYI innodb_table_stats.frm slow_log.CSV
db.frm innodb_table_stats.ibd slow_log.frm
db.MYD ndb_binlog_index.frm tables_priv.frm
db.MYI ndb_binlog_index.MYD tables_priv.MYD
event.frm ndb_binlog_index.MYI tables_priv.MYI
Mysql数据库里面包含了innodb,mysiam的数据表。相应的对应了文件夹里面的文件。
查看mysql数据库里面 tables_priv.MYI的定义。
mysql> show create table tables_priv;
`Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
`Db` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
`User` char(16) COLLATE utf8_bin NOT NULL DEFAULT '',
`Table_name` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
`Grantor` char(77) COLLATE utf8_bin NOT NULL DEFAULT '',
`Timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`Table_priv` set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view','Trigger') CHARACTER SET utf8 NOT NULL DEFAULT '',
`Column_priv` set('Select','Insert','Update','References') CHARACTER SET utf8 NOT NULL DEFAULT '',
PRIMARY KEY (`Host`,`Db`,`User`,`Table_name`),
KEY `Grantor` (`Grantor`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Table privileges' |
有mysiam和innodb和其他的引擎的表,不同引擎的表产生的文件也是不一样的。
上面可以看到mysiam引擎的表产生三个文件。
.frm文件(存储表的定义,即表是怎么建立的。下次数据库去查询的时候要告知客户有哪些字段,已经这个字段的长度为多少。这个文件无论是那种引擎都会形成这样的文件。)
.MYD文件(MYData存储数据)
.MYI文件(MYIndex存储索引)
.MYD,.MYI是mysiam引擎独特的地方。一个存放数据,一个存放索引。都已文件的形式保存。而innodb这种引擎没有这两种文件。只有.frm文件,甚至innodb使用的是共有的表空间。
所以创建一个数据库会在/var/lib下面创建一个和数据库同名的文件。在该数据库里面创建表就会在/usr/lib/数据库名字/下面创建.frm或者其他的文件。得看具体的存储引擎是什么。如下图所示
可以在centos下面使用file命令查看文件的类型。
[root@localhost mysql]# file tables_priv.frm
tables_priv.frm: MySQL table definition file Version 9 表定义
[root@localhost mysql]# file tables_priv.MYD
tables_priv.MYD: empty 表数据为空,因为里面没有插入数据
[root@localhost mysql]# file tables_priv.MYI
tables_priv.MYI: MySQL MISAM compressed data file Version 1 索引为压缩的数据文件
Innodb会将所有的表放在自己的表空间里面,同时还有日志文件。同一个表空间里面存储多个数据库的表信息,所以innodb数据库的日志文件放在mysql数据目录夹下面。
[root@localhost mysql]# ls -l
总用量 110604
-rw-rw----. 1 mysql mysql 56 9月 22 16:24 auto.cnf
-rw-rw----. 1 mysql mysql 12582912 9月 26 11:16 ibdata1
-rw-rw----. 1 mysql mysql 50331648 9月 26 11:16 ib_logfile0
-rw-rw----. 1 mysql mysql 50331648 9月 22 16:24 ib_logfile1
drwx------. 2 mysql mysql 4096 9月 22 16:24 mysql
srwxrwxrwx. 1 mysql mysql 0 9月 26 11:16 mysql.sock
drwx------. 2 mysql mysql 20 9月 27 15:41 mytest
drwx------. 2 mysql mysql 4096 9月 22 16:24 performance_schema
drwx------. 2 mysql mysql 20 9月 27 14:31 test
红色的为日志文件,即两个日志文件,绿色的为表空间文件,这个如果空间不够了会自动增长。
最后一种文件为服务器产生的日志文件,注意不是mysql的日志文件,上面的innodb日志文件是用来数据灾难恢复用的。而服务器上的日志文件是描述服务器启动的过程,甚至服务器里面的信息可以在服务器之间进行同步,做数据的复制。
[root@localhost mysql]# /usr/sbin/mysqld --help --verbose | grep log-bin
2017-09-27 16:43:21 0 [Note] /usr/sbin/mysqld (mysqld 5.6.37) starting as process 8997 ...
2017-09-27 16:43:21 8997 [Note] Plugin 'FEDERATED' is disabled.
--log-bin[=name] Log update queries in binary format. Optional (but
--log-bin-index=name
--log-bin-trust-function-creators
If set to FALSE (the default), then when --log-bin is
--log-bin-use-v1-row-events
2017-09-27 16:43:21 8997 [Note] Binlog end
2017-09-27 16:43:21 8997 [Note] Shutting down plugin 'MyISAM'
2017-09-27 16:43:21 8997 [Note] Shutting down plugin 'CSV'
log-bin (No default value)
由于目前这里没有设置值,所以在当前服务器的运行环境当中是没有日志可以维护的。
log-bin-index (No default value)
log-bin-trust-function-creators FALSE
log-bin-use-v1-row-events FALSE
logbin是以二进制的方式将日志的信息做保存。
还可以
[root@localhost mysql]# /usr/sbin/mysqld --help --verbose | grep slow
可以查看缓慢日志
--slow-query-log Log slow queries to a table or log file. Defaults logging
to a file hostname-slow.log or a table mysql.slow_log if
other slow log options
--slow-query-log-file=name
Log slow queries to given log file. Defaults logging to
hostname-slow.log. Must be enabled to activate other slow
log-slow-admin-statements FALSE
log-slow-slave-statements FALSE
slow-launch-time 2
slow-query-log FALSE
slow-query-log-file /var/lib/mysql/localhost-slow.log
总结:
(1)数据的目录夹是存放各个数据库的信息
(2)不管是哪种引擎,建立表的时候都会产生表结构文件.frm。
(3)Innodb的日志文件是用来做灾难数据恢复的。同时表空间里面存放了所有的表。