Mysql高级1:Mysql的架构介绍

Mysql的架构介绍

一、MysqlLinux版相关环境

开机自启动

#没有chkconfig安装
apt install sysv-rc-conf

# 设置开机启动
chkconfig mysql on
# 查看启动级别
chkconfig --list|grep mysql

安装目录

路径 解释
/var/lib/mysql MySQL数据库文件存放位置
/usr/share/mysql 配置文件目录,错误消息和字符集文件配置
/usr/bin 相关命令目录,客户端程序和脚本 mysqladmin mysqldump
/etc/init.d/mysql 启停脚本相关

修改字符集

先拷贝一份默认设置 cp 默认配置文件 /etc/my.cnf

查看字符集
show variables like 'character%';
show variables like '%char%';

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

mysql> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)
#作废
[client]
default-character-set=utf8

[mysql]
default-character-set=utf8
character_set_client=utf8
# 数据库默认字符集
character_set_server=utf8
#数据库字符集对应一些排序等规则,注意要和character-set-server对应
collation-server=utf8_general_ci

[mysqld]
# 设置client连接mysql时的字符集,防止乱码
init_connect='SET NAMES utf8'
init_connect='SET collation_connection = utf8_general_ci'

# 跳过mysql程序起动时的字符参数设置 ,使用服务器端字符集设置
skip-character-set-client-handshake

# 禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项,则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求!
skip-name-resolve

修改完重启数据库

相关配置文件

1、二进制日志log-bin:主从复制。

# my,cnf
# 开启mysql binlog功能
log-bin=mysql-bin

2、错误日志log-error:默认是关闭的,记录严重的警告和错误信息,每次启动和关闭的详细信息等。

# my,cnf
# 数据库错误日志文件
log-error = error.log

3、查询日志log:默认关闭,记录查询的sql语句,如果开启会降低MySQL整体的性能,因为记录日志需要消耗系统资源。

# my,cnf
# 慢查询sql日志设置
slow_query_log = 1
slow_query_log_file = slow.log

4、数据文件

4、数据文件

MyISAM

  • frm文件:存放表结构
  • myd文件:存放表数据
  • myi文件:存放表索引

InnoDB

  • .frm文件来存储表结构
  • .ibd文件来存储表索引和表数据



## 二、mysql架构介绍

![在这里插入图片描述](https://img-blog.csdnimg.cn/af86a69d5d594320afc1bafa10006afa.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2VpeGluXzQzOTY3NTgy,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)


- **连接层**:最上层是一些客户端和连接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于`tcp/ip`的通信。主要完成一些类似于**连接处理、授权认证、及相关的安全方案**。在该层上**引入了线程池的概念**,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于`SSL`的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。 
- **服务层**:MySQL的核心服务功能层,该层是MySQL的核心,包括**查询缓存,解析器,解析树,预处理器,查询优化器**。主要进行查询解析、分析、查询缓存、内置函数、存储过程、触发器、视图等,select操作会先检查是否命中查询缓存,命中则直接返回缓存数据,否则解析查询并创建对应的解析树。 

- **引擎层**:存储引擎层,存储引擎真正的负责了MySQL中数据的**存储和提取**,服务器通过API与存储引擎进行通信。不同的存储引擎具有的功能不同,这样我们可以根据自己的实际需要进行选取。 
- **存储层**:数据存储层,主要是将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互。 



## 三、存储引擎(表级别的)

`show engines;` 命令查看MySQL支持的存储引擎

`show variables like 'default_storage_engine%';` 查看当前数据库正在使用的存储引擎



**InnoDB和MyISAM对比**

| 对比项   | MyISAM                                                     | InnoDB                                                       |
| -------- | ---------------------------------------------------------- | ------------------------------------------------------------ |
| 外键     | 不支持                                                     | 支持                                                         |
| 事务     | 不支持                                                     | 支持                                                         |
| 行表锁   | 表锁,即使操作一条记录也会锁住整张表,**不适合高并发操作** | 行锁,操作时只锁某一行,不对其他行有影响,**适合高并发操作** |
| 缓存     | 只缓存索引,不缓存真实数据                                 | 不仅缓存索引还要缓存真实数据,対内存要求较高,而且内存大小対性能有决定性影响 |
| 表空间   | 小                                                         | 大                                                           |
| 关注点   | 性能                                                       | 事务                                                         |
| 默认安装 | Y                                                          | Y                                                            |



>[相关视频:尚硅谷MySQL数据库高级,mysql优化,数据库优化](https://www.bilibili.com/video/BV1KW411u7vy?p=42&spm_id_from=pageDriver)

你可能感兴趣的:(笔记,mysql,mysql)