mysql总结

mysql技术内幕 innoDB

第一节:Mysql体系结构和存储引擎

mysql可移植的原因:基本上能保证在各个平台上的物理体系结构的一致性。
1.1 定义数据库和实例
1 数据库:物理操作系统文件和其他形式文件的集合。文件类型包括:MYI、MYD、frm、ibd结尾的文件。当使用NDB引擎时,数据库的文件可能不是操作系统上的文件,而是存放于内存之中的文件,但定义仍然不变。
2)数据库实例:由后台线程和一个内存共享区组成。在系统上的表现就是一个实例。
3.Mysql是一个单进程多线程的数据库。
4.linux查看mysql实例:ps -ef | grep mysqld
5.mysql启动时,会读取配置文件,如果没有配置文件,会按照编译时的默认参数来设置启动实例。Oracle如果没有配置,会启动失败。mysql数据库启动按照:/etc/my.cnf->/etc/mysql/my.cnf->/usr/local/mysql/etc/my.cnf->~/.my.cnf的顺序来读取配置文件的。以最后一个读到的配置文件为准。配置文件中的datadir指定了数据库所在的路径。
1.2 MySQL体系结构
1.mysql体系结构:
连接池组件
管理服务和工具组件
SQL接口组件
查询分析器组件
优化器组件
缓冲组件
存储引擎组件(插件式的,基于表的,而不是基于数据库)
物理文件
1.3 MySQL存储引擎
1.MySQL数据库存储引擎是插件式的,每个存储引擎都有各自的优势,可以根据需求建立不同的存储引擎表。·
2,Mysql的主要存储引擎
1)InnoDB:支持事务,其主要设计是为了面向在线事务处理(OLTP)的应用
其特点:行级锁,支持外键。支持类似于Oracle的非锁定读,即,默认读取操作不会 产生锁。5.5.8后,mysql的默认存储引擎就是innoDB存储引擎。
innoDB将数据放在一个逻辑的表空间中,由innoDB自身进行管理,4.1后,存放到一个独立的ibd文件中。
innoDB通过多版本控制(MVCC)来获得高并发性,并实现了SQL标准的4中隔离级别,默认为REPEATABLE级别。同时,使用一个next-key-locking的策略来避免幻读。此外,innoDB存储引擎还提供了插入缓冲(insert buffer) 二次写(double write) 自适应哈希索引(adaptive hash index),预读(read ahead)等高性能,高可用的功能。对于表中存储的数据,innoDB采取了聚集的方式,因此每张表的存储都是按照主键的顺序进行存放。如果没有显示的定义主键,InnoDB会为每行生成一个6个字节的ROWID,并以此为主键。
2) MyISAM:不支持事务,支持表级锁,支持全文索引只要面向一些OLAP(联机分析处理)数据库应用。它的缓冲池吃缓存索引文件,不缓存数据文件。MyISAM存储引擎表由MYD,MYI组成,MYD用来存放数据文件,MYI用来存放索引文件,myisampack工具用来压缩和解压只读表,其使用 了赫夫曼静态算法压缩数据。MyISAM默认支持表的大小为4G,若要支持更大的空间,需要修改MAX_ROWS和AVG_ROW_LENGTH属性,5.0后,MyiSAM支持256TB的单表数据,基本满足一般应用需求。
3) NDB:集群存储引擎,其结构是share nothing的集群架构,能提供更高的可用性。NDB特点是数据全部放在内存中,因此主键查找非常快,并可以通过添加NDB节点的方式,来线性提高数据库的性能。
缺点:NDB的JOIN链接操作是在MySQL数据层完成的,意味着,复杂的链接操作需要巨大的网络开销,因此查询速度很慢。
4) Memery:是将表中的数据放在内存中,如果数据库重启或者崩溃,表中的数据都将消失,适合存储临时数据。默认是使用哈希索引。缺点:只支持表锁,并发性差,不支持text和BLOB列类型。存储变长varchar是按照存储char的方式进行,浪费内存。
1.5 连接MySQL
MySQL的连接是一个进程和MYSQ数据库实例进行通信,常用的进程通信方式有:管道,命名管道,TCP/IP套接字,UNIX域套接字。
1.5.1 服务器间的进程通信:TCP/IP套接字方式是MySQL数据库在任何平台下都提供 的 连接方式
在通过TCP/IP连接到MySQL实例时,MySQL会首先查一张权限视图,用来判断请求的客户端IP是否允许连接到MySQL实例,该视图在mysql架构下,表明为user。
1.5.2 weindows2000 Windows XP,Window 2003 和windows Vista以及此智商的平台同一台服务器上的进程通信:命名管道。在MySQL数据库中须在配置中启用–enable-named-pipe 选项 4.1后,还提供了共享内存的连接方式,对应 配置–shared-memory。如果想使用共享内存,必须还要增加–protocol=memory选项。
1.5.3UNIX域套接字
在linux和UNIX环境,可以使用UNIX域套接字。
具体使用:在mysql下 执行SHOW variables like ‘socket’
找到对应的value:/tmp/mysql.sock
然后执行:mysql -udavid -S /tmp.mysql.sock 既可以连接了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值