avatar

2.MySQL体系结构及管理

MySQL体系结构及管理

第1章 C/S(客户端/服务端)模型介绍

1
2
3
4
5
6
7
8
9
客户端-服务器端模型
TCP/IP(网络连接串的方式):
mysql -uadmin -p123 -h 10.0.1.51 -P 3306
Scoket(仅能在本地连接):
mysql -uroot -p123 -S /tmp/mysql.sock
客户端程序:
MySQL自带的
navicat,sqlyog
程序连接mysql的驱动程序

第2章 实例介绍

1
2
实例=mysqld后台守护进程+Master Thread+干活的Thread+预分配的内存
公司=老板+经理+员工+办公室

第3章 mysqld程序运行原理

3.1 什么SQL?

MySQL中的专用的命令 结构化查询语言

3.2 SQL 种类

1
2
3
4
DDL : 数据定义语言
DCL : 数据控制语言
DML : 数据操作语言
DQL : 数据查询语言 (oldguo加的)

3.3 mysqld程序结构(一条SQL语句的执行过程)

例如: select user,host from mysql.user;

3.3.1 连接层

1
2
3
4
5
6
7
8
9
10
11
(1) 提供连接协议
TCP/IP连接协议
Socket连接协议
(2) 验证
用户,密码,端口
(3) 提供连接线程
接收用户SQL语句
返回用户结果
与下层联系
--skip-grant-tables
--skip-networking

3.3.2 SQL层

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(1)语法检查,接收上层传送的SQL语句
(2)语法验证模块:验证语句语法,是否满足SQL_MODE
(3)语义检查:判断SQL语句的类型
DDL :数据定义语言
DCL :数据控制语言
DML :数据操作语言
DQL: 数据查询语言
...
(4)权限检查
(5)预处理(解析),生成解析树(执行计划)
(6)优化器(基于代价算法):根据解析器得出的多种执行计划,进行判断,选择最优的执行计划
代价模型:资源(CPU IO MEM)的耗损评估性能好坏
(7)执行器: 根据最优执行计划,执行SQL语句,产生执行结果
执行结果:在磁盘的xxxx位置上
(8)提供查询缓存(默认是没开启的),会使用redis tair替代查询缓存功能
(9)提供日志记录(日志管理章节):binlog,默认是没开启的。

3.3.3 存储引擎层

1
2
(1)从此磁盘获得想要的数据.
(2)取出的数据是2进制或16进制,SQL层结构化成表

第4章 MySQL的逻辑结构

1
2
库	: 库名+库属性      
表 : 表名+表属性+表内容+表结构

第5章 MySQL物理结构引入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
宏观:
库------> 目录
表------>
MyISAM(存储引擎):
user.frm : 表结构
user.MYD : 表数据
user.MYI : 索引

InnoDB(存储引擎):
5.5.8默认引擎是InnoDB
time_zone.frm : 表结构
time_zone.ibd : 数据和索引

微观:
段 segment : 一个表(非分区表),就是一个段,相当于一个文件系统
区 extent : 连续的64个页,大小是1M
页 page : 默认是连续的4个block,16K

第6章 连接管理

说明:连接之前,用户要提前创建好

6.1 自带客户端命令

例子:

1
2
3
4
5
6
7
8
9
TCP/IP:
(1) 要求 root用户,密码123,通过10.0.1.%网段登录并管理MySQL
mysql> grant all on *.* to root@'10.0.1.%' identified by '123';
[root@db01 ~]# mysql -uroot -p -h10.0.1.51 -P3306

Socket:
(2) 要求 使用admin用户,密码123,通过本地Socket登录和管理MySQL
mysql> grant all on *.* to admin@'localhost' identified by '123';
[root@db01 ~]# mysql -uadmin -p123 -S /tmp/mysql.sock

6.2 Windows上的客户端程序应用

1
2
3
sqlyog 
navicat
workbench

第7章 初始化配置

7.1 支持的方法

1
2
3
4
(1) 初始化配置文件(日常)  *****
(2) 预编译时(编译安装)
(3) 命令行启动(临时维护场景) ***
3>1>2

7.2 初始化配置文件应用

7.2.1 作用

1
2
3
(1)影响数据库的启动
(2)影响到数据库的客户端连接
(3)影响到数据初始化的功能

7.2.2 初始化配置文件格式

1
2
3
4
5
6
[标签] : 
[server]: [mysqld],[mysqld_safe]
[client]: [mysql],[mysqladmin],[mysqldump]

配置信息:
xxx=yyy

7.2.3 mysql读取配置文件读取顺序

1
2
3
4
5
6
7
[root@db01 ~]# mysqld --help --verbose |grep my.cnf
/etc/my.cnf -> /etc/mysql/my.cnf -> /usr/local/mysql/etc/my.cnf -> ~/.my.cnf
socket=/tmp/mysql.sock socket=/tmp/mysql1.sock socket=/tmp/mysql2.sock socket=/tmp/mysql3.sock
说明:如果有重复配置,以最后读取到的参数为准
注:
默认情况下,MySQL启动时,会依次读取以上配置文件,如果有重复选项,会以最后一个文件设置的为准。
但是,如果启动时加入了--defaults-file=xxxx时,以上的所有文件都不会读取

7.2.4 基础配置文件模板说明

1
2
3
4
5
6
7
8
9
10
[root@db01 ~]# cat /etc/my.cnf 
[mysqld]
user=mysql # MySQL的管理用户
basedir=/usr/local/mysql # MySQL软件安装路径
datadir=/data/mysql/data # MySQL数据路径
server_id=51 # 在主从复制必须的参数
port=3306
socket=/tmp/mysql.sock # socket文件生成位置
[mysql]
socket=/tmp/mysql.sock

第8章 启动关闭

1
2
3
4
5
6
7
8
9
10
通过命令行控制启动
[root@db01 ~]# systemctl start mysqld
[root@db01 ~]# /etc/init.d/mysqld start
[root@db01 ~]# mysqld_safe --skip-grant-tables --skip-networking &
[root@db01 ~]# mysqld --defaults-file=/tmp/a.txt &

关闭数据库方法:
[root@db01 ~]# systemctl stop mysqld
[root@db01 ~]# /etc/init.d/mysqld stop
[root@db01 ~]# mysqladmin -uroot -p1 shutdown

第9章 多实例的应用

9.1 创建相关目录,并授权

1
2
[root@db01 ~]# mkdir -p /data/330{7,8,9}/data
[root@db01 ~]# chown -R mysql.mysql /data

9.2 分别初始化数据

1
2
3
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3307/data
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3308/data
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3309/data

9.3 准备配置文件

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
cat > /data/3307/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3307/data
server_id=7
socket=/data/3307/mysql.sock
port=3307
EOF

cat > /data/3308/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3308/data
server_id=8
socket=/data/3308/mysql.sock
port=3308
EOF

cat > /data/3309/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3309/data
server_id=9
socket=/data/3309/mysql.sock
port=3309
EOF

9.4 systemd管理多实例

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
cat > /etc/systemd/system/mysqld3307.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://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=/usr/local/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf
LimitNOFILE = 5000
EOF

cat > /etc/systemd/system/mysqld3308.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://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=/usr/local/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf
LimitNOFILE = 5000
EOF

cat > /etc/systemd/system/mysqld3309.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://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=/usr/local/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf
LimitNOFILE = 5000
EOF

9.5 启动多实例

1
2
3
[root@db01 system]# systemctl start mysqld3307
[root@db01 system]# systemctl start mysqld3308
[root@db01 system]# systemctl start mysqld3309

9.6 连接测试

1
2
3
[root@db01 system]# mysql -S /data/3307/mysql.sock 
[root@db01 system]# mysql -S /data/3308/mysql.sock
[root@db01 system]# mysql -S /data/3309/mysql.sock
文章作者: Wu Fei
文章链接: http://linuxwf.com/2020/04/15/2-MySQL%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84%E5%8F%8A%E7%AE%A1%E7%90%86/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WF's Blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论