(一)使用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
存储引擎层
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为一页
分区表:分区表就是一个区构成一个段也就是一个表,就是分区表