0
点赞
收藏
分享

微信扫一扫

走向DBA之MySQL体系结构

一、MySQL体系结构采用C/S结构(C客户端/S客户端)

C/S模型:

二、MySQ连接方式为两种

第一种:TCP/IP (可本地,可远程)

mysql -uroot -pxxxxxx -h10.0.0.xx -P3306
-u:用户
-p:密码
-h:IP
-P:端口号

第二种Socket(仅本地)

mysql -uroot -pxxxxxx -S /tmp/mysql.sock
注意:单实例时不指定socket文件,默认会从my.cnf指定socket文件路径去寻找

三、mysql实例的构成

举例说明:

公司:老板+经理+员工+办公区

实例:mysqld+master thread+干活的thread+预分配内存

说明:mysql实例只是一种概念

四、mysqld程序运行原理:

mysql程序结构:

1.连接层作用:

1.提供连接协议,两种连接方法前文已经写过..

2.验证用户名密码的完整性和合法性

3.派生一个专用连接线程(接收SQL语句和返回结果)

插入一条命令:查看当前连接线程:

 mysql> show processlist;

(所以上一篇救援模式登录数据库都是在连接层做了手脚)

2.SQL层作用:

1.验证SQL语法和SQL_MODE(命令写的对么?)

2.验证语义(你要干嘛?)

3.验证权限(你有权力这么干么?)

4.解析器进行语句解析(生成多种执行方案)

5.优化器(各种算法,提前预算这些方法哪种方法最快最节约资源)

6.执行器(执行优化器提供的最佳的执行SQL语句的方法)

7.提供query cache(缓存,默认没有开),一般也不开,用redis代替

8.记录操作日志(binlog)(只记录修改的记录,默认没开)

那么问题来了,对于新手来说,SQL语句是干嘛的呀?
解答:

SQL语句是管理数据库专用的语句,相当于命令对linux
SQL语句分以下几种:
DQL 数据查询语言
DDL 数据定义语言
DML 数据操作语言
DCL 数据控制语言

3.存储引擎层作用:

根据SQL层提供的取数据的方法,取到数据,返回给SQL,结构化成表,再由连接层返回给用户

五、数据库逻辑结构:

库就相当于linux的目录,表就相当于linux的目录下的文件

宏观看数据结构

就是可以直接看到,比如在linux直接使用ls查看

[root@mysql52 /data/mysql/data]# ls
auto.cnf ibdata1 ib_logfile1 mysql mysql52.pid performance_schema world
ib_buffer_pool ib_logfile0 ibtmp1 mysql52.err oldboy sys

/data/mysql/data目录是存放mysql数据的,(初始化时已指定)

在这个目录下,ls查看,它下边的目录便对应数据库里的库

cd到mysql库里查看表:

[root@mysql52 /data/mysql/data]# ls
auto.cnf ibdata1 ib_logfile1 mysql mysql52.pid performance_schema world
ib_buffer_pool ib_logfile0 ibtmp1 mysql52.err oldboy sys
[root@mysql52 /data/mysql/data]# cd mysql/
[root@mysql52 /data/mysql/data/mysql]# ls
columns_priv.frm gtid_executed.ibd proc.MYD slow_log.CSV
columns_priv.MYD help_category.frm proc.MYI slow_log.frm
columns_priv.MYI help_category.ibd procs_priv.frm tables_priv.frm
db.frm help_keyword.frm procs_priv.MYD tables_priv.MYD
db.MYD help_keyword.ibd procs_priv.MYI tables_priv.MYI
db.MYI help_relation.frm proxies_priv.frm time_zone.frm
db.opt help_relation.ibd proxies_priv.MYD time_zone.ibd
engine_cost.frm help_topic.frm proxies_priv.MYI time_zone_leap_second.frm
engine_cost.ibd help_topic.ibd server_cost.frm time_zone_leap_second.ibd
event.frm innodb_index_stats.frm server_cost.ibd time_zone_name.frm
event.MYD innodb_index_stats.ibd servers.frm time_zone_name.ibd
event.MYI innodb_table_stats.frm servers.ibd time_zone_transition.frm
func.frm innodb_table_stats.ibd slave_master_info.frm time_zone_transition.ibd
func.MYD ndb_binlog_index.frm slave_master_info.ibd time_zone_transition_type.frm
func.MYI ndb_binlog_index.MYD slave_relay_log_info.frm time_zone_transition_type.ibd
general_log.CSM ndb_binlog_index.MYI slave_relay_log_info.ibd user.frm
general_log.CSV plugin.frm slave_worker_info.frm user.MYD
general_log.frm plugin.ibd slave_worker_info.ibd user.MYI
gtid_executed.frm proc.frm slow_log.CSM

表又分为两种存储方式,分别是MyILAM存储引擎和lnnoDB存储引擎。有什么区别呢?

举例:

user表(MyILAM):

user.frm ---->列的定义信息

user.MYD --->数据行

user.MYI --->索引信息

time.zone表 (lnnoDB):

time.zone.frm --->列的定义信息

time.zone.idb --->数据行和索引

总结:

MyISAM把列的定义信息,数据行,和索引分为三个文件进行存储,分别是.frm , .MYD , .MYI

InnoDB把列的定义信息放在.frm ,把数据行和索引信息放在.ibd

微观看数据结构:

段,区,页

一个表就是一个段(分区表除外)

mysql分配空间时,至少分配一个区,一个区默认大小64个页(page),也就是一M,MYSQL最小的IO单元就是page,一个页(page)大小是16k

举报

相关推荐

0 条评论