Cet article vous apporte des connaissances pertinentes sur MySQL, qui présentent principalement des problèmes liés au répertoire de données MySQL. Examinons-le ensemble, j'espère qu'il sera utile à tout le monde.
Après avoir installé MySQL 8, nous vérifions la structure de répertoires suivante :
. Base de données MySQL Chemin de stockage des fichiers : /var/lib/mysql/
Comme vous pouvez le voir d'après les résultats, le répertoire de données MySQL sur mon ordinateur est /var/lib/mysql/.
Répertoire de commandes associé : /usr/bin (mysqladmin, mysqlbinlog, mysqldump et autres commandes) et /usr/sbin.
Répertoire du fichier de configuration : /usr/share/mysql-8.0 (fichier de commande et de configuration), /etc/mysql (tel que my.cnf)
[root@atguigu01 ~]# find / -name mysql
mysql> show variables like 'datadir'; +---------------+-----------------+ | Variable_name | Value | +---------------+-----------------+ | datadir | /var/lib/mysql/ | +---------------+-----------------+ 1 row in set (0.04 sec)
Vérifiez quelles bases de données sont actuellement sur mon ordinateur :
Vous pouvez voir que 4 bases de données sont incluses dans la base de données du système MySQL. .
La base de données principale fournie avec le système MySQL. Elle stocke les informations de compte utilisateur et d'autorisation MySQL, des informations de définition des procédures et des événements stockés, ainsi que des informations de journal générées pendant le fonctionnement, des informations d'aide et. informations sur le fuseau horaire, etc.
La base de données fournie avec le système MySQL Cette base de données enregistre des informations sur toutes les autres bases de données gérées par le serveur MySQL, telles que
quelles tables, quelles vues, quels déclencheurs, quelles colonnes, quel indice. Ces informations ne sont pas de véritables données utilisateur, mais des
informations descriptives, parfois appelées métadonnées. Certaines tables commençant par
innodb_sys sont fournies dans la base de données système information_schema pour représenter les tables système internes.
mysql> SHOW DATABASES;
mysql> USE information_schema; Database changed
mysql> SHOW TABLES LIKE 'innodb_sys%'; +--------------------------------------------+ | Tables_in_information_schema (innodb_sys%) |
La base de données fournie avec le système MySQL Cette base de données enregistre principalement certaines informations d'état pendant le fonctionnement du serveur MySQL. Elle peut être utilisée pour surveiller divers indicateurs de performances du service MySQL. Y compris des statistiques sur les instructions qui ont été exécutées récemment, la durée de chaque étape du processus d'exécution, l'utilisation de la mémoire et d'autres informations.
La base de données fournie avec le système MySQL. Cette base de données combine principalement information_schema et
performance_schema sous forme de vues pour aider les administrateurs système et les développeurs à surveiller les performances techniques de MySQL.
2.2 Représentation de la base de données dans le système de fichiersIl y a de nombreux fichiers et sous-répertoires dans ce répertoire de données, sauf En plus de la base de données du système information_schema, d'autres bases de données ont des sous-répertoires correspondants dans le répertoire data.
Prenons comme exemple ma base de données temporaire, ouverte dans MySQL 5. 7 :
-rw-r-----. 1 mysql mysql 50331648 7 月 28 00 :27 ib_logfile -rw-r-----. 1 mysql mysql 12582912 8 月 6 10 :56 ibtmp drwxr-x---. 2 mysql mysql 4096 8 月 6 10 :56 #innodb_temp drwxr-x---. 2 mysql mysql 4096 7 月 28 00 :27 mysql -rw-r-----. 1 mysql mysql 26214400 8 月 6 10 :56 mysql.ibd srwxrwxrwx. 1 mysql mysql 0 8 月 6 10 :56 mysql.sock -rw-------. 1 mysql mysql 5 8 月 6 10 :56 mysql.sock.lock drwxr-x---. 2 mysql mysql 4096 7 月 28 00 :27 performance_schema -rw-------. 1 mysql mysql 1680 7 月 28 00 :27 private_key.pem -rw-r--r--. 1 mysql mysql 452 7 月 28 00 :27 public_key.pem -rw-r--r--. 1 mysql mysql 1112 7 月 28 00 :27 server-cert.pem -rw-------. 1 mysql mysql 1680 7 月 28 00 :27 server-key.pem drwxr-x---. 2 mysql mysql 4096 7 月 28 00 :27 sys drwxr-x---. 2 mysql mysql 4096 7 月 29 23 :10 temp -rw-r-----. 1 mysql mysql 16777216 8 月 6 10 :58 undo_ -rw-r-----. 1 mysql mysql 16777216 8 月 6 10 :58 undo_
[root@atguigu02 mysql]# cd ./temp [root@atguigu02 temp]# ll 总用量 1144 -rw-r-----. 1 mysql mysql 8658 8 月 18 11 :32 countries.frm -rw-r-----. 1 mysql mysql 114688 8 月 18 11 :32 countries.ibd -rw-r-----. 1 mysql mysql 61 8 月 18 11 :32 db.opt -rw-r-----. 1 mysql mysql 8716 8 月 18 11 :32 departments.frm -rw-r-----. 1 mysql mysql 147456 8 月 18 11 :32 departments.ibd -rw-r-----. 1 mysql mysql 3017 8 月 18 11 :32 emp_details_view.frm -rw-r-----. 1 mysql mysql 8982 8 月 18 11 :32 employees.frm -rw-r-----. 1 mysql mysql 180224 8 月 18 11 :32 employees.ibd -rw-r-----. 1 mysql mysql 8660 8 月 18 11 :32 job_grades.frm -rw-r-----. 1 mysql mysql 98304 8 月 18 11 :32 job_grades.ibd -rw-r-----. 1 mysql mysql 8736 8 月 18 11 :32 job_history.frm -rw-r-----. 1 mysql mysql 147456 8 月 18 11 :32 job_history.ibd -rw-r-----. 1 mysql mysql 8688 8 月 18 11 :32 jobs.frm -rw-r-----. 1 mysql mysql 114688 8 月 18 11 :32 jobs.ibd -rw-r-----. 1 mysql mysql 8790 8 月 18 11 :32 locations.frm -rw-r-----. 1 mysql mysql 131072 8 月 18 11 :32 locations.ibd -rw-r-----. 1 mysql mysql 8614 8 月 18 11 :32 regions.frm -rw-r-----. 1 mysql mysql 114688 8 月 18 11 :32 regions.ibd
2. Représentation des tables dans le système de fichiers
.2. 3. 1 Mode moteur de stockage InnoDB
Afin de sauvegarder la structure de la table, InnoDB crée un sous-répertoire de base de données dédié dans le répertoire de données. structure, le nom du fichier est comme ceci :
Par exemple, on crée une table nommée test sous la base de données atguigu : Ensuite elle sera dans le sous-répertoire correspondant à la base de données atguigu Créer un fichier nommé test.frm décrivant la structure du tableau. Le format des fichiers .frm
est le même sur les différentes plateformes. Ce suffixe est .frm et est stocké au format binaire si nous l'ouvrons directement, il sera tronqué.
2. Données et index dans la table① Espace de table système (espace de table système)
Par défaut, InnoDB créera un fichier nommé ibdata1 d'une taille de 12 Mo dans le répertoire de données, ce le fichier correspond à 的系统表空间在文件系统上的表示。怎么才 12 M?注意这个文件是自扩展文件,当不够用的时候它会自 当然,如果你想让系统表空间对应文件系统上多个实际文件,或者仅仅觉得原来的ibdata1这个文件名 难听,那可以在MySQL启动时配置对应的文件路径以及它们的大小,比如我们这样修改一下my.cnf 配置 ② 独立表空间(file-per-table tablespace) 在MySQL5.6.6以及之后的版本中,InnoDB并不会默认的把各个表的数据存储到系统表空间中,而是为每 一个表建立一个独立表空间,也就是说我们创建了多少个表,就有多少个独立表空间。使用独立表空间来 存储表数据的话,会在该表所属数据库对应的子目录下创建一个表示该独立表空间的文件,文件名和表 名相同,只不过添加了一个.ibd的扩展名而已,所以完整的文件名称长这样: 比如:我们使用了独立表空间去存储atguigu数据库下的test表的话,那么在该表所在数据库对应 其中test.ibd文件就用来存储test表中的数据和索引。 我们可以自己指定使用系统表空间还是独立表空间来存储数据,这个功能由启动参数 innodb_file_per_table控制,比如说我们想刻意将表数据都存储到系统表空间时,可以在启动 随着MySQL的发展,除了上述两种老牌表空间之外,现在还新提出了一些不同类型的表空间,比如通用 表空间(general tablespace)、临时表空间(temporary tablespace)等。 在存储表结构方面,MyISAM和InnoDB一样,也是在数据目录下对应的数据库子目录下创建了一个专 在MyISAM中的索引全部都是二级索引,该存储引擎的数据和索引是分开存放的。所以在文件系统中也是 使用不同的文件来存储数据文件和索引文件,同时表数据都存放在对应的数据库子目录下。假如test 表使用MyISAM存储引擎的话,那么在它所在数据库对应的atguigu目录下会为test表创建这三个文 举例:创建一个MyISAM 表,使用ENGINE 选项显式指定引擎。因为InnoDB是默认引擎。 2. 4 小结 举例:数据库a,表b。 1 、如果表b采用InnoDB,data\a中会产生 1 个或者 2 个文件: b.frm :描述表结构文件,字段长度等 如果采用系统表空间模式的,数据信息和索引信息都存储在ibdata1中 如果采用独立表空间存储模式,data\a中还会产生b.ibd文件(存储数据信息和索引信息) 此外: ① MySQL5.7 中会在data/a的目录下生成db.opt文件用于保存数据库的相关配置。比如:字符集、比较 规则。而MySQL8.0不再提供db.opt文件。 ② MySQL8.0中不再单独提供b.frm,而是合并在b.ibd文件中。 2 、如果表b采用MyISAM,data\a中会产生 3 个文件: MySQL5.7 中:b.frm:描述表结构文件,字段长度等。 MySQL8.0 中 b.xxx.sdi:描述表结构文件,字段长度等 b.MYD(MYData):数据信息文件,存储数据信息(如果采用独立表存储模式) b.MYI(MYIndex):存放索引信息文件 推荐学习:mysql视频教程[root@atguigu01 mysql]# cd ./temp
[root@atguigu01 temp]# ll
总用量 1080
-rw-r-----. 1 mysql mysql 131072 7 月 29 23 :10 countries.ibd
-rw-r-----. 1 mysql mysql 163840 7 月 29 23 :10 departments.ibd
-rw-r-----. 1 mysql mysql 196608 7 月 29 23 :10 employees.ibd
-rw-r-----. 1 mysql mysql 114688 7 月 29 23 :10 job_grades.ibd
-rw-r-----. 1 mysql mysql 163840 7 月 29 23 :10 job_history.ibd
-rw-r-----. 1 mysql mysql 131072 7 月 29 23 :10 jobs.ibd
-rw-r-----. 1 mysql mysql 147456 7 月 29 23 :10 locations.ibd
-rw-r-----. 1 mysql mysql 131072 7 月 29 23 :10 regions.ibd
表名.frm
mysql> USE atguigu;
Database changed
mysql> CREATE TABLE test (
-> c1 INT
-> );
Query OK, 0 rows affected (0.03 sec)
[server]
innodb_data_file_path=data1:512M;data2:512M:autoextend
2. 3. 2 MyISAM存储引擎模式
表名.ibd
test.frm
test.ibd
[server]
innodb_file_per_table=0 # 0:代表使用系统表空间; 1 :代表使用独立表空间
mysql> show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | ON |
+-----------------------+-------+
1 row in set (0.01 sec)
表名.frm
test.frm 存储表结构
test.MYD 存储数据 (MYData)
test.MYI 存储索引 (MYIndex)
CREATE TABLE `student_myisam` (
`id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar( 64 ) DEFAULT NULL,
`age` int DEFAULT NULL,
`sex` varchar( 2 ) DEFAULT NULL,
PRIMARY KEY (`id`)
)ENGINE=MYISAM AUTO_INCREMENT= 0 DEFAULT CHARSET=utf8mb3;
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!