【Mysql数据库从0到1】-入门基础篇--mysql基本使用

这篇具有很好参考价值的文章主要介绍了【Mysql数据库从0到1】-入门基础篇--mysql基本使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🔻一、Mysql5.7 VS Mysql8.0 详解

【Mysql数据库从0到1】-入门基础篇--mysql基本使用

1.1 ⛳字符编码

mysql5.7和之前版本,默认字符集为latin1,插入中文字符会出现乱码。在使用5.7及之前的版本时候需要将字符编码修改为utf8字符集,utf8字符集指的是utf8mb3。

从mysql8.0开始,数据库默认字符编码改为utf8mb4。

1.2 ⛳用户的创建与授权

#### mysql8.0 用户的创建 #### 授权时需要分开执行,不能用grant 建立用户

# create user '用户名'@'主机' identified by '密码';
mysql> create user 'zyl'@'%' identified by 'Zyl@123456';
Query OK, 0 rows affected (0.07 sec)

#grant all privileges on *.* to '用户名'@'主机';
mysql> grant all privileges on *.* to 'zyl'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> 
#### Mysql5.7 授权root用户命令 ####
# grant all privileges on *.* to '用户名'@'主机' identified by '密码';

mysql> grant all privileges on *.* to 'root'@'%' identified by 'Zyl@123456';
mysql> flush privileges;

#### Mysql8.0 授权root命令 #### 
# grant all privileges on . to '用户名'@'主机' with grant option;;

mysql> grant all privileges on *.* to 'root'@'%' with grant option;
Query OK, 0 rows affected (0.00 sec)

#### 修改root用户密码 #####
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Zyl@123456';

mysql> flush privileges;

1.3 ⛳ 认证插件

Mysql 5.7 默认身份插件是 mysql_native_password

Mysql 8.0 默认的身份插件是 caching_sha2_password

查看身份认证插件:

mysql> show variables like 'default_authentication_plugin%';
+-------------------------------+-----------------------+
| Variable_name                 | Value                 |
+-------------------------------+-----------------------+
| default_authentication_plugin | caching_sha2_password |
+-------------------------------+-----------------------+
1 row in set (0.00 sec)

1.4 ⛳ 隐藏索引

在Mysql 8.0 中, 可以将索引通过命令设置为 隐藏显示

对于被隐藏的索引,它不会被查询优化器所使用,我们可以使用这一功能,对相关的查询进行性能调试,通过隐藏或显示,分析数据库性能差异的原因,同时也可以去除无效的索引。

ALTER TABLE 表名 ALTER INDEX 索引名 INVISIBLE;

例子:
##创建名为idx_row_id的索引
CREATE INDEX idx_row_id ON tab1 ( row_id );

###隐藏索引
ALTER TABLE tab1 ALTER INDEX idx_row_id INVISIBLE;

###恢复隐藏索引
ALTER TABLE tab1 ALTER INDEX idx_row_id VISIBLE;

1.5 ⛳ 持久化设置

Mysql 8.0 新增 SET PERSIST 的命令,该命令的配置值保存到数据目录下的mysqld-auto.cnf文件中,下次启动时会读取该文件,用其中的配置来覆盖缺省的配置文件,补充了SET GLOBAL 命令只能临时生效的不足。

mysql> SET PERSIST max_connections = 500;
Query OK, 0 rows affected (0.00 sec)

mysql> 

1.6 ⛳ 通用表达式(Common Table Expressions)

Mysql 5.7 复杂的查询会使用嵌入式表,例如:
SELECT
	t1.*,
	t2.* 
FROM
	( SELECT id FROM tab1 ) t1,
	( SELECT user_id FROM tab2 ) t2;

有了Mysql 8.0 通用表表达式(Common Table Expressions)之后:

WITH 
t1 AS ( SELECT id FROM tab1 ),
t2 AS ( SELECT user_id FROM tab2 )
SELECT t1.*,t2.* 
FROM t1,t2;

【Mysql数据库从0到1】-入门基础篇--mysql基本使用

1.7 ⛳ 性能提升

官方表示Mysql 8.0 的速度要比 Mysql 5.7 快 2 倍。Mysql 8.0 在读/写工作负载、IO 密集型工作负载、以及高竞争工作负载时相比Mysql 5.7有更好的性能。
【Mysql数据库从0到1】-入门基础篇--mysql基本使用

1.8 ⛳ 参数变化

mysql中想要模糊的查看某一个项目的配置,可以使用百分号%进行通配符搜索。

mysql> show variables like 'mysql%';

query_cahe参数已经不存在
binglog过期时间参数变更为:
| binlog_expire_logs_seconds | 2592000 |

mysql> show variables like 'binlog_%';
+------------------------------------------------+--------------+
| Variable_name                                  | Value        |
+------------------------------------------------+--------------+
| binlog_cache_size                              | 32768        |
| binlog_checksum                                | CRC32        |
| binlog_direct_non_transactional_updates        | OFF          |
| binlog_encryption                              | OFF          |
| binlog_error_action                            | ABORT_SERVER |
| binlog_expire_logs_auto_purge                  | ON           |
| binlog_expire_logs_seconds                     | 2592000      |
| binlog_format                                  | ROW          |
| binlog_group_commit_sync_delay                 | 0            |
| binlog_group_commit_sync_no_delay_count        | 0            |
| binlog_gtid_simple_recovery                    | ON           |
| binlog_max_flush_queue_time                    | 0            |
| binlog_order_commits                           | ON           |
| binlog_rotate_encryption_master_key_at_startup | OFF          |
| binlog_row_event_max_size                      | 8192         |
| binlog_row_image                               | FULL         |
| binlog_row_metadata                            | MINIMAL      |
| binlog_row_value_options                       |              |
| binlog_rows_query_log_events                   | OFF          |
| binlog_stmt_cache_size                         | 32768        |
| binlog_transaction_compression                 | OFF          |
| binlog_transaction_compression_level_zstd      | 3            |
| binlog_transaction_dependency_history_size     | 25000        |
| binlog_transaction_dependency_tracking         | COMMIT_ORDER |
+------------------------------------------------+--------------+
24 rows in set (0.00 sec)

mysql> show variables like 'query_cahe%';
Empty set (0.00 sec)

mysql> 

1.9 ⛳ NoSQL文档支持

Mysql 从 5.7 版本开始提供 NoSQL 存储功能,目前在 8.0 版本中这部分功能也得到了更大的改进。该项功能消除了对独立的 NoSQL 文档数据库的需求,而 Mysql 文档存储也为 schema-less 模式的 JSON 文档提供了多文档事务支持和完整的 ACID 合规性。

1.10⛳ 窗口函数

创建了名为 w 的 window,规定它对表tab1 中 id 字段进行排序,然后在 select 子句中对 w 执行 rank() 方法,将结果输出为 rank 字段。

mysql> select *, rank() over w as 'rank' from tab1 window w as (order by id);
+------+--------+-------+------+
| id   | name   | class | rank |
+------+--------+-------+------+
| 1001 | 曹操   | 1|    1 |
| 1002 | 张飞   | 1|    2 |
| 1003 | 项羽   | 3|    3 |
| 1004 | 刘备   | 2|    4 |
+------+--------+-------+------+
4 rows in set (0.00 sec)

mysql> 

🔻二、Mysql数据库安装与升级

01-mysql安装篇(rpm方式安装+二进制方式安装)

02-mysql升级篇(rpm方式+二进制方式升级)

🔻三、Mysql数据库基本使用及常规配置详解

2.1 🎈 Mysql版本查看及连接

####方式一:服务器终端命令行####
[root@db-server ~]# mysql --version
mysql  Ver 8.0.32 for Linux on x86_64 (MySQL Community Server - GPL)
[root@db-server ~]# 

####方式二:Mysql终端命令行####
[root@db-server ~]# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.32 MySQL Community Server - GPL

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.32    |
+-----------+
1 row in set (0.00 sec)

####退出Mysql终端命令行####
mysql> exit
Bye
[root@db-server ~]# 

2.2 🎈 Mysql进程查看及服务启停

🔧 进程查看

[root@db-server ~]# ps -ef | grep mysqld

🔨 服务启停

####服务启动####
[root@db-server ~]# systemctl start mysqld

####服务停止####
[root@db-server ~]# systemctl stop mysqld

####服务状态查看####
[root@db-server ~]# systemctl status mysqld


####设置开机自启####
[root@db-server ~]# systemctl enable mysqld
Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service.

####设置开机不自启####
[root@db-server ~]# systemctl disable mysqld
Removed symlink /etc/systemd/system/multi-user.target.wants/mysqld.service.

【Mysql数据库从0到1】-入门基础篇--mysql基本使用

2.3 🎈 Mysql密码策略详解、修改密码、授权root用户远程登录

2.3.1 🍃 Mysql密码策略详解

mysql8.0 密码策略变量详解:

💦 validate_password.policy:密码策略,检查用户的密码。

        0(Low)密码长度最少8个字符

        1(Mediumpolicy)至少包含1个数字,1个小写字母,1个大写字母和1个特殊字符组成(默认值)

        2(Strongpolicy)长度为4或更长的密码子字符串不得与字典文件中的单词匹配

💦 validate_password.length:需要密码最小字符数,默认为8

💦 validate_password.number_count:需要密码的最小数字字符数,默认为1

💦 validate_password.mixed_case_count:需要密码的小写和大写的最小字符数,默认为1

💦 validate_password.special_char_count:需要密码的特殊字符的最小字符数,默认为1

💦 validate_password.dictionary_file:用于检查密码的字典文件的路径名,默认没有

2.3.2 🍃 修改root用户密码

mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select host,user from user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | root             |
+-----------+------------------+
5 rows in set (0.00 sec)

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password.check_user_name    | ON     |
| validate_password.dictionary_file    |        |
| validate_password.length             | 8      |
| validate_password.mixed_case_count   | 1      |
| validate_password.number_count       | 1      |
| validate_password.policy             | MEDIUM |
| validate_password.special_char_count | 1      |
+--------------------------------------+--------+
7 rows in set (0.02 sec)

mysql> alter user root@localhost identified by 'Zyl@123456';
Query OK, 0 rows affected (0.01 sec)

2.3.3 🍃 授权root用户远程登录

mysql> update user set host='%' where user='root';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select host,user from user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| %         | root             |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
+-----------+------------------+
5 rows in set (0.00 sec)

 mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> grant all privileges on *.* to 'root'@'%' with grant option;
Query OK, 0 rows affected (0.00 sec)

mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Zyl@123456';

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> 

授权远程登录与5.7语法有所区别:

🚩 mysql 5.7:

mysql> grant all privileges on *.* to 'root'@'%' identified by 'Zyl@123456' with grant option;

🚩 mysql 8.0,需要分开执行, 将创建账户和赋予权限分开了:

mysql> grant all privileges on *.* to 'root'@'%' with grant option;
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Zyl@123456';
mysql> flush privileges;

赋予CRUD权限:grant select,insert,update,delete on *.* to root'@'%';

赋予超级权限:grant all privileges on *.* to 'root'@'%' with grant option;

撤销授权: revoke all privileges on *.* from 'root'@'%';

刷新权限: flush privileges;

查看权限: show grants for 'root'@'%';

2.4 🎈 Mysql字符集

mysql 8.0之前默认的字符集是latin1,utf8字符集指向的是utf8mb3,从8.0开始默认编码使用utf8mb4,避免了乱码产生。

【Mysql数据库从0到1】-入门基础篇--mysql基本使用

Mysql 各级别的字符集:

  • 服务器级别-----(my.cnf配置)

  • 数据库级别-----自动同步服务器级别字符集

  • 表级别-----ALTER TABLE 表名 DEFAULT CHARSET=‘字符集名’,或者创建表时,创建语句后面加上"CHARACTER SET"子句,如:CREATE TABLE 表名 (列名1 INT,列名2 CHAR(20)) ENGINE = InnoDB DEFAULT CHARSET=utf8;

  • 列级别-----ALTER TABLE 表名 MODIFY 列名 列类型 CHARACTER SET ‘字符集名’;

mysql> show variables like 'character%';
####或者#####
mysql> show variables like '%char%';
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | utf8mb4                        |
| character_set_connection | utf8mb4                        |
| character_set_database   | utf8mb4                        |
| character_set_filesystem | binary                         |
| character_set_results    | utf8mb4                        |
| character_set_server     | utf8mb4                        |
| character_set_system     | utf8mb3                        |
| character_sets_dir       | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
8 rows in set (0.00 sec)

mysql> 

修改数据库字符

###alter database 数据库名 character set '字符编码';
mysql> alter database test01 character set 'utf8';
Query OK, 1 row affected, 1 warning (0.05 sec)

mysql>

修改表字符


###alter table 表名 convert to character set '字符编码';
mysql> alter table tab1 convert to character set 'utf8';
Query OK, 4 rows affected, 1 warning (0.10 sec)
Records: 4  Duplicates: 0  Warnings: 1

### ALTER TABLE  表名 DEFAULT CHARSET=‘字符集名’`
mysql> alter table tab1 DEFAULT CHARSET='utf8';
Query OK, 0 rows affected, 1 warning (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 1

mysql> 

utf8 与utf8mb4

🍀 utf8字符集表示一个字符需要 1 ~4个字节,一般常用字符 1 ~3个字节就可以表示,而字符集最大长度表示一个字符最大字节长度,所以会影响存储和性能,所以产生了utf8mb3 和utf8mb4 两个概念。

🍀 utfmb3:阉割版的utf8字符集,只使用 1 ~3个字节表示字符。
🍀 utfmb4:正宗的utf8字符集,使用 1 ~4个字节表示字符,如存储emoji表情。

2.5 🎈 Mysql --sql大小写规范与sql_mode

2.5.1 🍃 sql大小写规范

Mysql 在 Windows 和 Linux 的大小写规范不一样。

在 Windows 下全部都不区分大小写。

在 Linux 下:

数据库名、表名、表别名、变量名是严格区分大小写。
关键字、函数名称在 SQL 中不区分大小写。
字段名、列别名在所有的情况下都不区分大小写。
mysql> SHOW VARIABLES LIKE '%lower_case_table_names%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_table_names | 0     |
+------------------------+-------+
1 row in set (0.00 sec)

mysql> 

lower_case_table_names 默认为0,大小写敏感。一般情况下不建议修改。

mysql> select * from tab1;
+------+--------+-------+
| id   | name   | class |
+------+--------+-------+
| 1001 | 曹操   | 1|
| 1002 | 张飞   | 1|
| 1003 | 项羽   | 3|
| 1004 | 刘备   | 2|
+------+--------+-------+
4 rows in set (0.00 sec)

mysql> select * from Tab1;
ERROR 1146 (42S02): Table 'test01.Tab1' doesn't exist
mysql> 

2.5.2 🍃 sql_mode

sql_mode会影响mysql支持的sql语法及数据验证检查,通过设置sql_mode可以完成不同严格程度的数据校验,有效保障数据准确性。

#### 查询mysql数据库sql_mode
mysql> select @@session.sql_mode;
+-----------------------------------------------------------------------------------------------------------------------+
| @@session.sql_mode                                                                                                    |
+-----------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select @@global.sql_mode;
+-----------------------------------------------------------------------------------------------------------------------+
| @@global.sql_mode                                                                                                     |
+-----------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> show variables like 'sql_mode';
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value                                                                                                                 |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| sql_mode      | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> 

宽松模式 与 严格模式

🍀 宽松模式:插入数据时,即使给了一个错误数据,也可能被接受,并且不报错。

如:在表中,有字段name属性,字段类型char(10),如果插入数据时候,有一条数据name值为’zyl@123456789’,超过了设定字段长度,那么这条数据插入,不会报错,只会截取前10个字符’‘zyl@123456’,这就是宽松模式。

🍀 严格模式:出现上面情况,应该报错,插入数据出错,所以在数据库生产、开发、测试等环境,必须采用严格模式。

改为严格模式可能存在的问题:

sql_mode设置了含NO_ZERO_DATE,那么不允许插入0日期,插入0日期会抛出错误,如字段TIMESTAMP,在没声明为NULL或显示DEFAULT子句,会自动分配DEFAULT ‘0000-00-00 00:00:00’ 零时间戳。不满足NO_ZERO_DATE而报错。

🍀 1、通过命令临时设置sql_mode,重启后失效:

### 当前会话 
SET SESSION sql_mode = '';

### 全局设置 
SET GLOBAL sql_mode = '';

🍀 2、修改mysql的配置文件,重启mysql服务后生效

sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
常用sql_mode各参数 描述
ONLY_FULL_GROUP_BY 对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中
NO_AUTO_VALUE_ON_ZERO 该值影响自增长列的插入。默认设置下,插入0或NULL代表生成下一个自增长值。如果用户 希望插入的值为0,而该列又是自增长的,那么这个选项就有用了
STRICT_TRANS_TABLES 在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制
STRICT_ALL_TABLES 如果插入数据的第一行内容与字段类型兼容,但后续的数据行存在不兼容的情况,则兼容的数据正常插入,不兼容的数据则会报错并终止insert操作。
NO_ZERO_IN_DATE 在严格模式下,不允许日期和月份为零
NO_ZERO_DATE 设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告
ERROR_FOR_DIVISION_BY_ZERO 在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。如 果未给出该模式,那么数据被零除时MySQL返回NULL
NO_AUTO_CREATE_USER 禁止GRANT创建密码为空的用户
NO_ENGINE_SUBSTITUTION 如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常
PIPES_AS_CONCAT 将“ll”作为字符串的链接字符操作,而不是作为或运算符,与“concat”相类似。
ANSI_QUOTES 启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符
IGNORE_SPACE 用于忽略mysql系统函数与之后的括号之间的空格。

🍀 不同版本默认的sql_mode

Mysql 5.5 :空

+---------------+-----------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value                                                                                                                 |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| sql_mode      |      |
+---------------+-----------------------------------------------------------------------------------------------------------------------+

Mysql 5.6:

+---------------+-----------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value                                                                                                                 |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| sql_mode      |  NO_ENGINE_SUBSTITUTION  |
+---------------+-----------------------------------------------------------------------------------------------------------------------+

Mysql 5.7:

+---------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value                                                                                                                 |
+---------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
| sql_mode      | ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER,  NO_ENGINE_SUBSTITUTION |
+---------------+--------------------------------------------------------------------------------------------------------------------------------------------------+

Mysql 8.0:

+---------------+-----------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value                                                                                                                 |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| sql_mode      | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+---------------+-----------------------------------------------------------------------------------------------------------------------+

🔻四、Mysql数据库目录结构详解–RPM方式安装

🍁 4.1 查看当前系统mysql有关目录

[root@db-server mysql]# find / -name mysql
/etc/selinux/targeted/active/modules/100/mysql
/etc/logrotate.d/mysql
/var/lib/mysql
/var/lib/mysql/mysql
/usr/bin/mysql
/usr/lib64/mysql
[root@db-server mysql]# 

🍁 4.2 RPM方式安装mysql 默认目录

1、数据存储目录---存储mysql运行过程中产生的数据
/var/lib/mysql/

mysql> show variables like 'datadir';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.01 sec)

mysql> 


2、配置文件---存放命令及配置文件,
/usr/share/mysql-8.0(mysql.server命令及配置文件)
/etc/my.cnf (mysql服务配置文件,指定端口、数据库的安装目录等参数)

3、相关命令目录---存放了控制客服端和服务端的命令(可执行文件)
/usr/bin(mysql、mysqladmin、mysqldump、mysqlcheck、mysqlshow、mysql_upgrade等命令)
/usr/sbin(mysqld命令)

4、启动脚本---
/etc/rc.d/init.d/(启动脚本文件mysql的目录)

🔻五、Mysql数据库与文件系统关系详解

🍁 5.1 查看当前有哪些数据库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test01             |
+--------------------+
5 rows in set (0.00 sec)

mysql> 

4个mysql安装自带的数据库,1个自定义数据库:

🍀 information_schema----存储mysql服务器维护的数据库信息,有哪些表、视图、触发器、列、索引等,这些信息并不是真实数据,而是一些描述信息,称之为元数据。还存储了一些以innodb_sys开头的表(内部系统表)。

🍀 mysql----mysql自带核心数据库,存储用户账户及权限信息,其他一些存储过程、事件定义信息,运行过程日志、帮助信息、时区信息等。

🍀 performance_schema----保存mysql运行过程中的一些状态信息,用来监控mysql各项性能指标,如最近执行过的语句,内存使用情况,执行花费时长等。

🍀 sys----主要通过视图形式把 performance_schema和 information_schema 连接起来,帮助管理员和开发人员监控mysql的技术性能。

🍀 test01----自定义数据库

🍁 5.2 Mysql数据库在文件系统中的表示详解

🎑 5.2.1 Mysql 5.7数据库目录文件

如果存储引擎是InnoDB, 在data目录下会看到3类文件(.frm、.ibd、.opt):

🍀 db.opt----存放数据库使用字符集,字符校验规则,show create database时显示数据库默认字符集即db.opt中字符集。

这个文件丢失不影响数据库运行,该文件丢失之后新建表时,找不到数据库的默认字符集,就把character_set_server当成数据库的默认字符集,show create database时显示character_set_server字符集。

🍀 .frm----存放数据库的表结构。

🍀 .ibd----(独立表空间)存放表数据和索引的文件。该表的索引(B+树)的每个非叶子节点存储索引,叶子节点存储索引和索引对应的数据。

如果存储引擎是myisam, 在data目录下会看到3类文件(.frm、.myi、.myd):

🍀 .frm----表定义,是描述表结构的文件。
🍀 .MYD----(MYData)数据信息文件,是表的数据文件。
🍀 .MYI----(MYIndex)索引信息文件,是表数据文件中任何索引的数据树。

.MYD与.MYI合在一起相当于.ibd。

🎑 5.2.2 Mysql 8.0 数据库目录文件

如果存储引擎是InnoDB, 在data目录下只会看到1类文件(.ibd),没有.frm、 db.opt文件:

🍀 ibdata1----系统表空间,默认大小12M。

🍀 .ibd----独立表空间(存放表数据和索引的文件、数据库的表结构、数据库使用字符集,字符校验规则)。

【Mysql数据库从0到1】-入门基础篇--mysql基本使用

如果存储引擎是myisam, 在data目录下会看到3类文件(.sdi、.myi、.myd):

🍀 .sdi----表定义,是描述表结构的文件(相当于mysql5.7中的.frm)。
🍀 .MYD----(MYData)数据信息文件,是表的数据文件。
🍀 .MYI----(MYIndex)索引信息文件,是表数据文件中任何索引的数据树。

🚩 注:

1、在一个MySQL服务器中,系统表空间只有一份。从MySOL5.5.7到MySOL5.6.6之间的各个版本中,我们表中的数据都会被默认存储到这个系统表空间。

2、在MySQL5.6.6以及之后的版本中,InnoDB并不会默认的把各个表的数据存储到系统表空间中,而是为每一个表建立一个独立表空间,也就是说我们创建了多少个表,就有多少个独立表空间。使用 独立表空间来存储表数据的话,会在该表所属数据库对应的子目录下创建一个表示该独立表空间的文件,文件名和表名相同。

[root@db-server mysql]# cd test01/
[root@db-server test01]# ll
total 224
-rw-r----- 1 mysql mysql 114688 Jun  3 15:53 tab1.ibd
-rw-r----- 1 mysql mysql 114688 Jun  3 15:28 tab2.ibd
[root@db-server test01]# pwd
/var/lib/mysql/test01
[root@db-server test01]# 

❓ .frm文件在Mysql8.0中不存在了

0racle 官方将frm文件的信息及更多信息移动到叫做序列化字典信息 (Serialized DictionaryInformation,SDI)中,SDI被写在ibd文件内部。

Mysql8.0属于Oradie旗下,同理为了从IBD文件中提取SDI信息,Oracle提供了一个应用程序ibd2sdi。Mysql8.0自带。

到存储ibd文件的目录下,执行下面的命令,解析.ibd 文件:

[root@db-server test01]# ibd2sdi --dump-file=tab1.txt tab1.ibd
[root@db-server test01]# ll
total 236
-rw-r----- 1 mysql mysql 114688 Jun  3 15:53 tab1.ibd
-rw------- 1 root  root   11142 Jun  3 21:59 tab1.txt
-rw-r----- 1 mysql mysql 114688 Jun  3 15:28 tab2.ibd
[root@db-server test01]# cat tab1.txt 
#####可以发现解析后的tab1.txt文件有表结构信息、字符编码等信息。

【Mysql数据库从0到1】-入门基础篇--mysql基本使用

🎑 5.2.3 系统表空间与独立表空间设置

我们可以自己指定使用系统表空间还是独立表空间来存储数据,这个功能由启动参数 innodb_file_per_table控制,比如说我们想刻意将表数据都存储到系统表空间时,可以在启动MySOL服务器的时候这样配置:

[server]
innodb_file_per_table=0   # 0: 代表使用系统表空间; 1: 代表使用独立表空间

默认使用独立表空间:文章来源地址https://www.toymoban.com/news/detail-470570.html

mysql> show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+
1 row in set (0.01 sec)

mysql> 

🔻六、总结—温故知新

❓ Mysql5.7 与 Mysql8.0 区别
❓ Mysql数据库基本使用及常规参数配置
❓ Mysql数据库目录结构了解
❓ Mysql数据库与文件系统关系

👈【上一篇】
💖The End💖 点点关注,收藏不迷路💖
【下一篇】👉

到了这里,关于【Mysql数据库从0到1】-入门基础篇--mysql基本使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于初识MySQL数据库以及MySQL的基本使用

    数据库一般是指: 在磁盘或者内存中存储的特定结构组织的数据 。 其本质可以理解为: 对数据内容存储的一套解决方案,对数据库提供要求或字段,它会给用户返回结果 MySQL是 一套给用户提供数据存取的服务,是一种网络程序 那么在系统中会存在mysql和mysqld,如何区分两

    2024年02月16日
    浏览(53)
  • MySQL入门指南:数据库操作的基础知识

    当谈到关系型数据库管理系统(RDBMS)时,MySQL无疑是最常见和广泛使用的一个。它是一个强大的工具,用于存储、管理和检索数据。在这篇博客中,我们将介绍MySQL的基本知识,包括数据库的操作、数据表的操作以及数据的增删改查~~ 目录 1. 数据库的操作 1.1 创建数据库 1.2 删除

    2024年02月07日
    浏览(96)
  • Navicat (连接mysql数据库)的基本使用

    目录 前言 一、navicat-15的下载安装 二、navicat连接数据库 1、登录 2、连接数据库失败情况 3、登录数据库需要授权 三、navicat的基础操作  ☆ 1、数据库的基本操作 2、对表进行操作 3、sql 语句管理数据库  4、用户管理 5、 视图的创建 6、表的导入与导出  7、数据库的备份 

    2024年02月04日
    浏览(59)
  • 【Mysql数据库从0到1】-入门基础篇--用户与权限管理

    Mysql 用户分为root用户和普通用户,其中root用户是数据库超级管理员,拥有所有权限(创建、删除、修改密码、授权等管理权限),普通用户只拥有被授予的权限。 Mysql数据库的安全性通过账户管理来保障。 1.1 🍃 Mysql服务器登录 🍀 简单使用 🍀 复杂使用 1.2 🍃 用户创建

    2024年02月07日
    浏览(67)
  • 【Mysql】万字长文带你快速掌握数据库基础概念及SQL基本操作

    为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。 (博客的参考源码可以在我主页的资源里找到,如果在学习的

    2024年02月15日
    浏览(53)
  • MySQL数据库精选(从入门使用到底层结构)

    DDL: 数据定义语言,用来定义数据库对象(数据库、表、字段) DML: 数据操作语言,用来对数据库表中的数据进行增删改 DQL: 数据查询语言,用来查询数据库中表的记录 DCL: 数据控制语言,用来创建数据库用户、控制数据库的控制权限 数据定义语言 数据库操作 查询所有数据

    2024年02月19日
    浏览(49)
  • 完全从零Java自学系列【入门篇】(第四课:Mysql服务端安装&使用客户端操作数据库&初识SQL基础操作&Java中使用第三方包&Java数据库操作&初步理解面相对象真正的意义之桥接设计模式)

      数据库是专门用来存储一系列集合数据的地方。所有的文件都可以被称之为库,当应用场景没那么复杂的时候,简单的应用程序用文本就可以了。数据库的意义是为了设计更好的保障数据安全(如多线程操作)、数据一致、索引(如何在庞大的数据中快速查找)等等一系

    2024年02月21日
    浏览(60)
  • 【MySQL】1、MySQL数据库的基本概念

    数据库的基本概念 1.数据 2.表         将不同的记录组织在一起;用来存储具体数据 3.数据库         表的集合,是存储数据的仓库;以一定的组织方式存储的相互有关的数据集合 4.数据库管理系统         是实现对数据库资源有效组织、管理和存取的系统软件

    2024年02月11日
    浏览(60)
  • 【100天精通python】Day44:python网络爬虫开发_爬虫基础(爬虫数据存储:基本文件存储,MySQL,NoSQL:MongDB,Redis 数据库存储+实战代码)

    目录 1 数据存储 1.1 爬虫存储:基本文件存储 1.2 爬虫存储:使用MySQL 数据库 1.3 爬虫 NoSQL 数据库使用 1.3.1 MongoDB 简介

    2024年02月11日
    浏览(69)
  • mysql 数据库 基本介绍

    描述事物的符号记录 包括数字,文字、图形、图像、声音、档案记录气 以“记录”形式按统一的格式进行存储 1,结构化的数据 即有固定格式和有限长度的数据。例如填的表格就是结构化的数据,国籍:中华人民共和国,民族:汉,性别:男,这都叫结构化数据 2,非结构化

    2024年03月23日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包