mysql的体系管理

(一)使用systemd管理mysql服务

1.源码包步骤

#编辑脚本文件 

[root@db02 scripts]# vim /usr/lib/systemd/system/mysqld.service 

[Unit] 

Description=MySQL Server 

Documentation=man:mysqld(8) 

Documentation=https://dev.mysql.com/doc/refman/en/using-systemd.html 

After=network.target 

After=syslog.target 

[Install] 

WantedBy=multi-user.target 

[Service] 

User=mysql 

Group=mysql 

ExecStart=/application/mysql/bin/mysqld --defaults-file=/etc/my.cnf 

LimitNOFILE = 5000 

2.二进制包步骤

#编辑脚本文件 

[root@db02 scripts]# vim /usr/lib/systemd/system/mysqld.service 

[Unit] 

Description=MySQL Server 

Documentation=man:mysqld(8) 

Documentation=https://dev.mysql.com/doc/refman/en/using-systemd.html 

After=network.target 

After=syslog.target 

[Install] 

WantedBy=multi-user.target 

[Service] 

User=mysql 

Group=mysql 

ExecStart=/application/mysql/bin/mysqld --defaults-file=/etc/my.cnf 

LimitNOFILE = 5000 

#修改mysql配置文件

[root@db02 mysql]# vim /etc/my.cnf 

basedir = /application/mysql 

datadir = /application/mysql/data 

#启动MySQL并加入开机自启 

[root@db02 mysql]# systemctl start mysqld 
[root@db02 mysql]# systemctl enable mysqld

(二)mysql连接方式

1.第一种连接方式

TCP/IPL连接

2.第二种连接方式

socket连接

问题

mysql    ---------------->   socket连接
mysql-uroot-p123-h127.0.0.0.1----------->  tcp连接
mysql -uroot -p123-hlocalhost------------> socket连接
mysql -uroot -p123-h127.0.0.1 -S/tmp/mysql.sock--------->tcp连接




总结:
1.不一定-h都是TCP连接,-hlocalhost 是socket连接
2.不一定-s都是socket连接,如果前面加了-h一定是TCP
3.mysql默认使用的是socket



为什么要默认是socket连接???
1.安全
2.速度快,因为用tcp的话会使用三次握手,socker不用

(三)MySQL体系结构管理

mysql的客户端: 

mysql 

mysqldump 

mysqladmin 

第三方工具: 

phpmyadmin 

navicat 

sqlyog 

mysqld一个二进制程序,后台的守护进程

单进程
多线程

(四)MySQL服务器构成

1.实例

比如打开一个word文档,任务管理器会有进程,如果退出word文档则进程会结束

比如有一个word文档他里面有2个G的内存,然而,电脑的总内存有16G,并且已经使用了15.9G ,这时,我想打开这个2个G的的文档,他是打不开的,并且中间他会一直在等,如果没有释放内存的话就会报错,

2.MySQL的连接方式

mysqld程序结构

1.连接层 

2.SQL层 

3.存储引擎层

同理mysql打开方式

我有2个G的表,但是在linux中是可以打开的,因为Linux他会与分配给mysql 8个G 所以2个G的表是可以打开的

总结

- 1.MySQL的后台进程+线程+预分配的内存结构。
- 2.MySQL在启动的过程中会启动后台守护进程,并生成工作线程,预分配内存结构供MySQL处理数据使用。


就是windows 他没有预分配的内存结构
linux 有预分配的内存结构

关于连接层

1.验证用户的合法性(用户名,密码,主机域(主机号)黑名单,白名单)
2.提供两种方式 (TCP/IP,socket) -h -s
3.提供一个和SQL层交互的专用线程

SQL层

1.接收连层传来的SQL语句
2.检查语法
3.检查语义
4.解析器 解析SQL语句,生成多种执行计划
5.优化器,在多种执行计划中选择最后的一种优化方式
6.执行器种执行SQL语句
  6.1提供一个与存储引擎层交互的线程
  6.2接收存储引擎返回结构化的成表数据
7.写缓存(redis,memcache)
8.记录日志 binlog

存储引擎层

1572525718809

1.接收SQL层传来的最有的SQL语句
2.与磁盘交互,拿到数据,并结构化成表格,返回给SQL层
3.提供一个与SQL层交互的线程

(五)MySQL的结构

1.逻辑结构

(MySQL的逻辑结构,就是数据库管理员的操作对象)

库 

表:(真实数据+元数据) 

元数据:用来描述真实数据的数据(列+其它属性(行数+占用空间大小+权限)) 

列:列名字+数据类型+其他约束(非空、唯一、主键、非负数、自增长、默认值) 

2.物理结构

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

-rw-rw---- 1 mysql mysql 12982 Oct 30 16:49 innodb_index_stats.frm 

-rw-rw---- 1 mysql mysql 98304 Oct 31 16:34 innodb_index_stats.ibd 

-rw-rw---- 1 mysql mysql 10684 Oct 30 16:49 user.frm 

-rw-rw---- 1 mysql mysql 712 Oct 31 15:55 user.MYD 

-rw-rw---- 1 mysql mysql 2048 Oct 31 16:03 user.MYI 

3.MySQL的单位段

段就是一张表,是由多个区构成

区:区是由多个页构成 

页:最小单位,16k为一页 

分区表:分区表就是一个区构成一个段也就是一个表,就是分区表 
posted on 2019-11-11 20:55  酷gril  阅读(203)  评论(0编辑  收藏  举报