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 ~] Socket: (2) 要求 使用admin用户,密码123,通过本地Socket登录和管理MySQL mysql> grant all on *.* to admin@'localhost' identified by '123' ; [root@db01 ~]
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 ~] /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 ~] [mysqld] user=mysql basedir=/usr/local /mysql datadir=/data/mysql/data server_id=51 port=3306 socket=/tmp/mysql.sock [mysql] socket=/tmp/mysql.sock
第8章 启动关闭 1 2 3 4 5 6 7 8 9 10 通过命令行控制启动 [root@db01 ~] [root@db01 ~] [root@db01 ~] [root@db01 ~] 关闭数据库方法: [root@db01 ~] [root@db01 ~] [root@db01 ~]
第9章 多实例的应用 9.1 创建相关目录,并授权 1 2 [root@db01 ~] [root@db01 ~]
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] [root@db01 system] [root@db01 system]
9.6 连接测试 1 2 3 [root@db01 system] [root@db01 system] [root@db01 system]