MySQL体系结构及多实例
MySQL客户端和服务器端模型
- MySQL是一个典型C/S,服务器端与客户端两部分组成
- 服务器端程序 mysqld
- mysql自带的客户端(mysql mysqladmin mysqldump等),API接口(php-mysql)
连接方式
通过网络连接串,TCP/IP:(用户名;密码;IP;port)
mysql -uroot -p123 -h 10.0.0.52 -P
通过套接字文件,SOCKET:(用户名;密码;Socket路径)
mysql -uroot -p123 -S /application/mysql/tmp/mysql.sock
MySQL服务器构成(实例的构成)

实例
MySQL在启动过程
- 启动后台守护进程(mysqld),并生成工作线程(xxxx)
- 预分配内存结构供MySQL处理数据使用
- 线程是干活的,进程是分配线程的
- MySQL启动过程中,启动了一个守护进程(mysqld),并生成了许多线程
实例是什么:
MySQL的后台进程+线程+预分配的内存结构
mysqld服务的构成
分为三层:
- 连接层
- SQL层
- 存储引擎层
连接层
- 通信协议(tcp/ip socket)
- 连接线程
- 用户验证(合法性,让不让连接)
SQL层
sql层的处理流程图解:

SQL:结构化的查询语言(数据库内部的逻辑语言)又分为:
- DDL:数据库定义语言
- DCL:数据库控制语言
- DML:数据库操作语言
- DQL:数据查询语言
SQL层的功能
1、判断
语法、语句、语义
语句类型:DQL select
2、我们数据库不能真正理解SQL语句
必须明确的知道,数据在哪个磁盘的,哪个文件的哪个,哪个页上。
3、数据库对象授权情况进行检查。
4、解析(解析器)
将sql语句解析成N种执行计划
mysql没法直接执行sql语句,必须解析成执行计划,运行执行计划,最终生成如何区磁盘找数据的方式
5、优化(优化器)
根据不同执行计划,知道哪个代价是最低的
MySQL5.6以后学习了oracle的基于代价算法,从N种执行计划中,选择代价最小的交给“执行器”
6、“执行器”
运行执行计划
生成如何去磁盘找数据的方式
7、将取数据获取的方式,交由下层(存储引擎层)进行处理
8、最终,将取出的数据抽象成管理员或用户能看懂的方式(表),展现用户面前。
9、查询缓存:缓存之前查询的数据。
假如我们查询的表是一个经常有变动的表,查询缓存不要设置太大。
存储引擎层
存储引擎是充当不同表类型的处理程序的服务器组件。
功能:
存数据、取数据
数据的不同存储方式
不同的管理方式:
事务(增、删、改)
备份恢复
高级功能(高可用的架构、读写分离架构)
依赖于存储引擎的功能
- 存储介质
- 事务功能
- 锁定
- 备份和恢复
- 优化
- 特殊功能:
全文搜索
引用完整性
空间数据处理
数据库的逻辑结构(数据内部结构)
为了用户能够读懂数据出现的,更好的理解数据。
管理数据的一种方式:

对象包括库和表,库中包括多张表,表中包括行记录和列结构
MySQL如何使用磁盘
库是用目录表示的,表是库目录下的文件表示的

- .MYD类型文件:存储行数据信息
- .frm类型文件:存储列定义信息
- .MYI类型文件:存储索引
mysql的存储方式
程序文件随数据目录一起存储在服务器安装目录下。执行各种客户机程序、管理程序和实用程序时,将创建程序可执行文件和日志文件。首要使用磁盘空间的是数据目录。
- 服务器日志文件和状态文件:包含有关服务器处理的语句的信息。日志可用于进行故障排除、监视、复制和恢复。
- InnoDB 日志文件:(适用于所有数据库)驻留在数据目录级别。
- InnoDB 系统表空间:包含数据字典、撤消日志和缓冲区。
每个数据库在数据目录下均具有单一目录(无论在数据库中创建何种类型的表)。数据库目录存储以下内容:
- 数据文件:特定于存储引擎的数据文件。这些文件也可能包含元数据或索引信息,具体取决于所使用的存储引擎。
- 格式文件 (.frm):包含每个表和/或视图结构的说明,位于相应的数据库目录中。
- 触发器:与某个表关联并在该表发生特定事件时激活的命名数据库对象。
数据目录的位置取决于配置、操作系统、安装包和分发。典型位置是 /var/lib/mysql。
MySQL 在磁盘上存储系统数据库 (mysql)。mysql 包含诸如用户、特权、插件、帮助列表、事件、时区实现和存储例程之类的信息。
小结
MySQL的连接方式
. 通过网络连接串,TCP/IP:(用户名;密码;IP;port)
mysql -uroot -p123 -h 10.0.0.52 -P 3306
. 通过套接字文件,SOCKET:(用户名;密码;Socket路径)
mysql -uroot -p123 -S /application/mysql/tmp/mysql.sock
优化相关的理念(mysqld)
SQL解析(解析器):解析成 ,执行计划 mysql能够理解的,执行SQL的一种方式
将sql语句解析成N种执行计划
mysql没法直接执行sql语句,必须解析成执行计划,运行执行计划,最终生成如何
优化(优化器):直接影响选择哪个执行计划
基本规则:根据不同执行计划,知道哪个代价是最低的
MySQL5.6以后学习了oracle的基于代价算法,从N种执行计划中,选择代价最小的交给“执行器”
查询缓存:缓存之前所查询的数据
作为了解,生产中,一般会用类似于redis或memcache来代替
逻辑结构---物理结构对应关系
库 ----->data 就是一个目录,为了存放多张表
表 ----->data 在相应的库中,用多个文件来表示
myisam表:3个文件(.myd数据文件 .myi索引文件 .frm表(列)结构定义文件)
innodb:2个或者1个
如何使用磁盘的
- 多个库多个目录,目录下存放了多个表的存储文件
- 初始化生成的存储文件:auto.cnf、ibdataN、ib_logfileN、db02.err等
MySQL管理
连接管理:mysql
连接mysql可以使用的参数:
[root@db02 ~]# mysql --help
-u <user_name> 或 --host=<user_name> # 登陆mysql的用户
-p<password> # 登陆mysql的密码
-h <host_name> 或 --host=<host_name> # 远程连接,后面跟连接mysql服务器的IP
--protocol=<protocol_name>
-P <port_number> 或 --port=<port_number> # 指定端口号
-S <socket_name> 或 --socket=<socket_name> # 指定sock文件路径
两种连接方式
mysql -uroot -p123 -S /application/mysql/tmp/mysql.sock
mysql -uroot -p123 -h 10.0.0.52 -P
参数文件配置/etc/my.cnf
功能:
1.影响到服务器进程的启动
2.影响到客户端程序
如何配置my.cnf
使用不同标签明确指定影响哪部分功能
服务器端:
[server]包括:
[mysqld] ---- > 一般设置此项
[mysqld_safe]
客户端:
[client] ---- > 为了方便设置此项
[mysql]
[mysqldump]
[mysqladmin]
配置文件读取顺序
/etc/my.cnf ---- > /etc/mysql/my.cnf --- > $MYSQL_HOME/my.cnf ---- > defaults-extra-file --- > ~/.my.cnf 如果在启动mysql时利用--defaults-file指定了参数配置文件,那么直接读取指定的文件 /application/mysql/bin/mysqld_safe --defaults-file=/tmp/aa.txt
MySQL数据库的关闭
常规关闭:
mysqladmin shutdown
servive mysqld stop
还有使用kill杀进程的方式关闭,但是尽量不要使用kill方式关闭
可通过如下地址查看生产高并发环境野蛮粗鲁杀死数据库导致故障企业案例:
http://oldboy.blog.51cto.com/2561410/1431161
http://oldboy.blog.51cto.com/2561410/1431172
MySQL多实例
编辑要指定的my.cnf和启动脚本
my.cnf文件
实例1:3306
[root@db02 ]# cat /data//my.cnf
[client]
port =
socket = /data//mysql.sock [mysqld]
user = mysql
port =
socket = /data//mysql.sock
basedir = /application/mysql
datadir = /data//data
log-bin = /data//mysql-bin
server-id = [mysqld_safe]
log-error=/data//my_3306.err
pid-file=/data//mysqld.pid
实例2:3307
[root@db02 ]# cat /data//my.cnf
[client]
port =
socket = /data//mysql.sock [mysqld]
user = mysql
port =
socket = /data//mysql.sock
basedir = /application/mysql
datadir = /data//data
log-bin = /data//mysql-bin
server-id = [mysqld_safe]
log-error=/data//myy_3307.err
pid-file=/data//mysqld.pid
启动脚本
3306启动脚本:
[root@db02 ]# cat /data//mysql
#!/bin/sh
#init
port=
mysql_user="root"
CmdPath="/application/mysql/bin"
mysql_sock="/data/${port}/mysql.sock"
mysqld_pid_file_path=/data//.pid
start(){
if [ ! -e "$mysql_sock" ];then
printf "Starting MySQL...\n"
/bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf --pid-file=$mysqld_pid_file_path >& > /dev/null &
sleep
else
printf "MySQL is running...\n"
exit
fi
}
stop(){
if [ ! -e "$mysql_sock" ];then
printf "MySQL is stopped...\n"
exit
else
printf "Stoping MySQL...\n"
mysqld_pid=`cat "$mysqld_pid_file_path"`
if (kill - $mysqld_pid >/dev/null)
then
kill $mysqld_pid
sleep
fi
fi
} restart(){
printf "Restarting MySQL...\n"
stop
sleep
start
} case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
printf "Usage: /data/${port}/mysql {start|stop|restart}\n"
esac
3307启动脚本:
[root@db02 ]# cat /data//mysql
#!/bin/sh
#init
port=
mysql_user="root"
CmdPath="/application/mysql/bin"
mysql_sock="/data/${port}/mysql.sock"
mysqld_pid_file_path=/data//.pid
start(){
if [ ! -e "$mysql_sock" ];then
printf "Starting MySQL...\n"
/bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf --pid-file=$mysqld_pid_file_path >& > /dev/null &
sleep
else
printf "MySQL is running...\n"
exit
fi
}
stop(){
if [ ! -e "$mysql_sock" ];then
printf "MySQL is stopped...\n"
exit
else
printf "Stoping MySQL...\n"
mysqld_pid=`cat "$mysqld_pid_file_path"`
if (kill - $mysqld_pid >/dev/null)
then
kill $mysqld_pid
sleep
fi
fi
} restart(){
printf "Restarting MySQL...\n"
stop
sleep
start
} case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
printf "Usage: /data/${port}/mysql {start|stop|restart}\n"
esac
3307
创建数据目录授权
mkdir /data/{,}/data -p
chown -R mysql.mysql /data/
初始化数据
cd /application/mysql/scripts
./mysql_install_db --defaults-file=/data//my.cnf --basedir=/application/mysql --datadir=/data//data --user=mysql
./mysql_install_db --defaults-file=/data//my.cnf --basedir=/application/mysql --datadir=/data//data --user=mysql
授权执行权限并启动数据库
5.6.36特殊性:需要创建错误日志文件
touch /data//my_3306.err
touch /data//my_3307.err
给启动脚本执行权限,启动后检查
chmod /data//mysql
chmod /data//mysql
[root@db02 ]# /data//mysql start
Starting MySQL...
[root@db02 ]# /data//mysql start
Starting MySQL...
[root@db02 ]# netstat -lntup|grep
tcp ::: :::* LISTEN /mysqld
tcp ::: :::* LISTEN /mysqld
多实例登陆
mysql -S /data//mysql.sock
mysql -S /data//mysql.sock
MySQL体系结构及多实例的更多相关文章
- MySQL之体系结构与存储实例
定义数据库和实例 在数据库领域中有两个词很容易混淆,这就是“数据库”(database)和“实例”(instance).作为常见的数据库术语,这两个词的定义如下: 数据库:物理操作系统文件或其他形式文 ...
- MySQL体系结构以及各种文件类型学习
1,mysql体系结构 由数据库和数据库实例组成,是单进场多线程架构. 数据库:物理操作系统文件或者其它文件的集合,在mysql中,数据库文件可以是frm.myd.myi.ibd等结尾的文件,当使用n ...
- MySQL 体系结构以及各种文件类型学习汇总 (转)
1,mysql体系结构 由数据库和数据库实例组成,是单进场多线程架构. 数据库:物理操作系统文件或者其它文件的集合,在mysql中,数据库文件可以是frm.myd.myi.ibd等结尾的文件,当使用n ...
- MySql基础入门-mysql体系结构
mysql体系结构: 由:连接池组件.管理服务和工具组件.sql接口组件.查询分析器组件.优化器组件. 缓冲组件.插件式存储引擎.物理文件组成. mysq ...
- mysql体系结构和sql查询执行过程简析
一: mysql体系结构 1)Connectors 不同语言与 SQL 的交互 2)Management Serveices & Utilities 系统管理和控制工具 备份和恢复的安全性,复 ...
- MySQL技术内幕读书笔记(一)——Mysql体系结构和存储引擎
目录 MySQL体系结构和存储引擎 定义数据库和实例 MYSQL体系结构 MYSQL存储引擎 MySQL体系结构和存储引擎 定义数据库和实例 数据库:物理操作系统文件或者其他形式文件类型的结合.在MY ...
- MySQL体系结构和存储引擎概述
MySQL体系结构和存储引擎概述 一.定义数据库和实例 数据库: 物理操作系统文件或其他形式文件类型的集合.数据库文件可以是frm.MYD.ibd 结尾的文件. 从概念上来说,数据库是文件的集合,是 ...
- MySQL学习笔记-MySQL体系结构总览
MySQL体系结构总览 不管是用哪种数据库,了解数据库的体系结构都是极为重要的.MySQL体系结构主要由数据库和数据库实例构成. 数据库:物理操作系统文件或者其它文件的集合,在mysql中,数据库文件 ...
- MySQL笔记(1)---MySQL体系结构和存储引擎
1.前言 本系列记录MYSQL数据库的一些结构和实现特点,方便查询. 2.基本概念 数据库:物理操作系统文件或者其他形式文件类型的集合.MySQL中数据库文件可以是frm.MYD.MYI.ibd结尾的 ...
随机推荐
- MySQL zip解压版安装过程及问题
1.首先解压mysql压缩包,然后添加环境变量path(D:\mysql-5.7.11\bin) 2.修改D:\mysql-5.7.11\my-default.ini 文件的配置项 ...
- java LinkedLis t的26种使用方法
LinkedList类是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用. LinkedList的构造函数如下 1. public LinkedList(): --生成空的链表 2. p ...
- ASP.NET MVC5 中百度ueditor富文本编辑器的使用
随着网站信息发布内容越来越多,越来越重视美观,富文本编辑就是不可缺少的了,众多编辑器比较后我选了百度的ueditor富文本编辑器. 百度ueditor富文本编辑器分为两种一种是完全版的ueditor, ...
- Traits技法
扮演"特性萃取机"角色,萃取各个迭代器的特性(迭代器的相应类型) 模板特例化:提供一份template定义式,而其本身仍为templatization 通过class templa ...
- MYSQL导入大量数据碰到的问题及解决方法
在项目中,经常会碰到往数据库中导入大量数据,以便利用sql进行数据分析.在导入数据的过程中会碰到一些需要解决的问题,这里结合导入一个大约4G的txt数据的实践,把碰到的问题以及解决方法展现出来,一方面 ...
- ueditor表格边框没有颜色的解决
问题: 用ueditor画表格,会发现表格存在,但是表格边框没有颜色. 解决方法: 需要对js文件中的样式进行修改,这里我引用的编辑器样式文件是ueditor.all.min.js,所以先找到该文件, ...
- hibernate 常用主键生成策略与配置
<id name="id" column="id"> <generator class="assigned" /> ...
- ADB Shell之手机性能测试
Connect 夜神模拟器for Android 4.4.2 打开模拟器-在CMD输入如下连接测试设备 adb connect 127.0.0.1:62001 你也可以连接自己的手机设备 开发者选项- ...
- R-FCN论文翻译
R-FCN论文翻译 R-FCN: Object Detection viaRegion-based Fully Convolutional Networks 2018.2.6 论文地址:R-FCN ...
- 如何实现Selenium自动化读取H5手机缓存
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6890675.html 前言: 由于Se ...
