一· Mysql的系统架构
1.数据库和数据库实例
- 数据库:按照数据结构来组织、存储和管理数据的仓库,通常由数据库管理系统进行管理。
- 数据库管理软件(RDBMS):就是我们说的数据库管理系统软件,他强调软件。
- 数据库实例:启动数据库软件,在内存中运行一个独立进程,用来操作数据,这个正在运行的进程就是一个数据库实例,理论上可以在一台电脑上启动多个数据库实例,当然要监听在不同的端口。
2.Mysql架构
(1)Mysql向外提供的交互接口(Connectors)
(2)管理服务组件和工具组件(Management Server & Utilities)
(3)连接池组件(Connection Pool)
(4)SQL接口组件(SQL Interface)
(5)查询分析器组件(Optimizer)
(6)缓存组件(Cache & Buffers)
(7)MySQL存储引擎
MySQL的查询流程
首先客户端会向mysql服务器发送查询sql语句,之后会进入查询缓存,如果缓存里有就直接返回数据(MySQL在8.0之后取消了查询缓存),如果没有sql语句会进入解析器,进入语法解析,之后进入查询优化器,查询优化器会把我们的sql语句优化成最优的语句,进入执行计划,然后就是查询执行引擎,查询执行引擎通过API接口到存储引擎中查询数据并返回
【小问题】:
MySQL为什么取消了查询缓存
【mysql的缓存机制】简单来说mysql的缓存就是一个HashMap,如果有完全相同的sql语句,服务器会直接从缓存中取到结果,而不用在解析和执行sql。但是如果表中的数据或者结构发生变化,那么缓存中的数据将不再有效,查询缓存中被清空。一般情况下公司生产环境下的MySQL Query Cache都是关闭的。MySQL8.0也是直接取消了缓存查询。
3.Mysql的目录结构
安装目录结构:
默认为C:\Program Files\MySQL
bin
目录:用于放置一些可执行的工具文件,如mysql.exe、mysqld.exe、mysqlshow.exe等。include
目录:用于放置一些头文件,如:mysql.h、mysql_ername.h等。lib
目录:用于放置一系列库文件。
bin目录工具汇总:
MySQL服务端工具:
- mysqld:SQL后台保护程序(MySQL服务器进程)。该程序必须运行之后。客户端才能通过连接服务器端程序访问和操作数据库。
- mysqld_safe:MySQL服务脚本。mysql_safe增加了一些安全特性,如当出现错误时重启服务器,向错误日志文件写入运行时间信息。
- mysql.server:MySQL服务启动服本。调用mysqld_safe来启动MySQL服务。
- mysql_multi:服务器启动脚本,可以启动或停止系统上安装的多个服务。
- myiasmchk:用来描述、检查、优化和维护MyISAM表的实用工具。
- mysqlbu:MySQL缺陷报告脚本。它可以用来向MySQL邮件系统发送缺陷报告。
- mysql_install_db:用于默认权限创建MySQ授权表。通常只是在系统上首次安装MySQL时执行一次。
MySQL客户端工具
- mysql:交互式输入SQL语句或从文件以批处理模式执行SQL语句来操作数据库管理系统,就是我们的客户端。
- mysqldump:将MySQL数据库转储到一个文件,可以用来备份数据库。
- mysqladmin:用来检索版本、进程、以及服务器的状态信息。
- mysqlbinlog:用于从二进制日志读取语句。在二进制日志文件中包含执行的语句,可用来帮助系统从崩溃中恢复。
- mysqlcheck:检查、修复、分析以及优化表的表维护。
- mysqlhotcopy:当服务器在运行时,快速备份MyISAM或ISAM表的工具。
- mysql import:使用load data infile将文本文件导入相关表的客户程序。
- perror:显示系统或MySQL错误代码含义的工具。
- myisampack:压缩MyISAP表,产生更小的只读表。
- mysaqlaccess:检查访问主机名、用户名和数据库组合的权限。
MySQL数据目录结构
默认目录为 C:\ProgramData\MySQL\MySQL Server 8.0,注意ProgramData是一个隐藏目录,需要设置为【显示隐藏文件】
【小知识】:
1.当数据库文件过大时可以通过迁移Data文件夹来释放C盘空间,迁移之后需要将没my.ini,中的路径修改为迁移之后的文件位置
2.在Linux系统中我们看到在配置文件中有一个socket的配置,socket 即 Unix 域套接字文件,在类 unix 平台,客户端连接 MySQL 服务端的方式有两种,分别是 TCP/IP 方式与 socket 套接字文件方式。Unix 套接字文件连接的速度比 TCP/IP 快,但是只能连接到同一台计算机上的服务器使用。通过设置 socket 变量可配置套接字文件路径及名称,默认值为 /tmp/mysql.sock。本地客户端的连接默认会使用到该文件:
mysql -uroot -p -S /tmp/mysql.sock
如果mysql.sock文件误删的话,就需要重启mysql服务
3.MySQL数据备份工具:mysqldump可以用来实现轻量级的【快速迁移或恢复数据库】。 mysqldump是将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。mysqldump一般在数据量很小的时候(几个G)可以用于 备份。当数据量比较大的情况下,就不建议用mysqldump工具进行备份了。下边我们简单的使用mysqldump工具进行备份数据,命令如下:
-- 备份一个表
mysqldump -u root -p ydlclass ydl_user > ~/dump.txt
-- 备份一个数据库
mysqldump -u root -p ydlclass > ~/dump.txt
-- 备份所有数据库
mysqldump -u root -p --all-databases > dump.txt
恢复数据
mysql -u root -p ydl < ~/dump.txt
4.MySQL字符集和排序规则
show collation 命令查看MySQL支持的字符集
可以在建表时指定表的字符集
【小知识】:
utf8和utf8mb4的区别:
- utf8mb3(utf-8):使用1~3个字节表示字符,utf8默认就是utf8mb3。
- utf8mb4:使用1~4个字节表示字符,他是utf8的超集,甚至可以存储很多【emoji表情😀😃😄😁😆】,mysql8.0已经默认字符集设置为utf8mb4。
5.MySQL修改配置的方法
在MySQL中变量分为全局变量和会话变量
查看全局变量:
show global variables like '%wait_timeout%';
select @@global.wait_timeout;
设置全局变量方法:
1:修改配置文件, 然后重启mysqld:
[mysqld]
wait_timeout=10000
2:在命令行里通过SET来设置(推荐)
set global wait_timeout=10000;
set @@global.wait_timeout=10000;
然后查看设置是否成功
show global variables like 'wait_timeout'
select @@global.wait_timeout
会话变量:
如果要修改会话变量值, 可以指定"SESSION"或者"@@session."或者"@@"或者"LOCAL"或者"@@local.", 或者什么都不使用。语法语法:
mysql> set wait_timeout=10000;
mysql> set session wait_timeout=10000;
mysql> set local wait_timeout=10000;
mysql> set @@wait_timeout=10000;
mysql> set @@session.wait_timeout=10000;
mysql> set @@local.wait_timeout=10000;
设置完之后可以查看设置是否成功
mysql> select @@wait_timeout;
mysql> select @@session.wait_timeout;
mysql> select @@local.wait_timeout;
mysql> show variables like 'wait_timeout';
mysql> show local variables like 'wait_timeout';
mysql> show session variables like 'wait_timeout';