MySQL客户端类型

QQ_1723120788148

MySQL客户端

1
2
3
4
mysql
mysqladmin
mysqldump
phpmyadmin

mysqld

1
2
3
mysqld一个二进制程序,后台的守护进程
单进程
多线程

MySQL的连接方式

  • TCP/IP连接

    mysql -uroot -p123 -h172.16.1.51

  • Socket连接

    mysql -uroot -p123 -S /tmp/mysql.sock

QQ_1723121188726

1.判断服务类型

1
2
3
4
5
6
7
mysql -uroot -p123 								 socket连接
mysql -uroot -p123 -h127.0.0.1 TCP连接
mysql -uroot -p123 -hlocalhost Socket连接

----(错误写法)
mysql -uroot -p123 -h10.0.0.51 -S /tmp/mysql.sock TCP连接
mysql -uroot -p123 -S /tmp/mysql.sock -h10.0.0.51 TCP连接

2.MySQL服务器组成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
MySQL服务:守护进程

实例:`一个进程 + 多个线程+ 一个预分配的内存结构`

[root@db04 ~]# mysqladmin -uroot -p123 variables|grep innodb_buffer_pool_size
innodb_buffer_pool_size=134217728
MySQL的内存要占物理机内存的75%~80%

假设开启数据库时候
Linux
总内存:16G
已使用:15.9G -->MySQL约占12.8G
要是加载一个2GMySQL表文件,使用的内存也是12.8G里的

#使用ansible是怎么优化MySQL的?
#使用变量

#数据库要占用的内存(不可有小数) 交给int取得整数
#缓冲池大小,缓存表和索引数据的内存区域
innodb_buffer_pool_size

[root@db01 ~]# vim my.cnf
[mysqld]
basedir = /app/mysql
datadir = /app/mysql/data
innodb_buffer_pool_size = {{ (ansible_memtotal_mb * 0.8)|int }}M
server_id={{ ansible_hostname[-1] }}

3.MySQL底层原理

QQ_1723123419826

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
`连接层`
作用:
1)提供两种连接方式
TCP连接
Socket连接
2)验证用户的合法性(用户名 密码 IP 权限)
3)提供一个与SQL层交互的线程

`SQL层`
作用:
1)接收连接层传递过来的SQL语句
2)验证语法
3)验证语义
DDL
DML
DCL
DQL
DTL
4)解析器:解析SQL语句
5)优化器:出多种优化方案,选择最优的一种方式去执行
6)执行器:执行优化器选择的最优的一种方式的语句提供一个和存储引擎层交互的线程接收存储引擎层返回的结构化成表的数据
7)缓存
8)记录日志(binlog)

`存储引擎层`
作用:
1)接收SQL层传递过来的SQL语句
2)与磁盘交互取出指定的数据
3)将数据结构化成表格返回给SQL层

MySQL结构

逻辑结构

    • 元数据
      • 字段
        • 字段名
        • 数据类型
        • 约束
      • 描述信息
    • 真实数据

物理结构:最底层的数据文件

MySQL单位

  • 段(一张表):一个段是由多个区组成的
  • 区 一个区是由64个页组成的(1M)
  • 页 一个页16k